2강. IP, Port, TCP 이해하기

0. 학습 목표
→ 이번 글에서 무엇을 이해하고, 무엇을 정리하고, 무엇을 확인할지 먼저 정리합니다.
0.1 이번 글에서 다룰 내용
이번 글은 개념 중심 강의입니다.
1강에서 서버는 먼저 실행되어 기다리고, 클라이언트는 서버에 접속을 요청한다고 배웠습니다. 그런데 아직 중요한 질문이 남아 있습니다. 클라이언트는 서버가 어디에 있는지 어떻게 알까요?
서버가 있는 컴퓨터를 찾는 정보가 IP이고, 그 컴퓨터 안에서 어떤 프로그램으로 들어갈지 구분하는 번호가 Port 입니다. 그리고 서버와 클라이언트가 연결을 만든 뒤 데이터를 순서대로 주고받는 대표적인 방식이 TCP입니다.

이번 강의에서 배우는 IP, Port, TCP는 최종 채팅 프로젝트의 server.py와 network_client.py에 직접 등장합니다. 서버 코드의 HOST = "0.0.0.0", PORT = 5000과 클라이언트 코드의 SERVER_IP = "192.168.0.10", SERVER_PORT = 5000이 왜 이런 값인지 이번 강의에서 이해합니다.
| 구분 | 내용 |
| 이해할 것 | IP, 포트, TCP의 역할과 서버·클라이언트 주소 구조 |
| 정리할 것 | 서버가 기다리는 주소와 클라이언트가 접속하는 주소의 차이 |
| 확인할 것 | 주어진 상황에서 클라이언트의 접속 대상 주소를 말로 설명할 수 있는지 |
0.2 앞으로 실습할 프로젝트 구조 미리보기
이번 강의에서는 새 파일을 만들거나 기존 파일을 수정하지 않습니다. 아래 구조는 앞으로 완성할 채팅 프로그램의 전체 모습을 미리 보여 주는 참고용입니다. 이번 강의에서 배울 IP, Port, TCP 개념은 나중에 server.py와 network_client.py에서 직접 사용됩니다.
chat_server/
└── server.py ← 이후 강의에서 HOST·PORT 대기 설정 작성
chat_client/
├── main.py
└── network_client.py ← 이후 강의에서 SERVER_IP·SERVER_PORT 접속 처리
서버 쪽 코드에는 HOST와 PORT가 등장하고, 클라이언트 쪽 코드에는 SERVER_IP와 SERVER_PORT가 등장합니다. 이번 강의의 목표는 이 값들이 왜 필요한지, 서로 어떤 관계인지 이해하는 것입니다.
1. 핵심 개념 이해하기
→ IP, 포트, TCP가 각각 어떤 역할을 하는지 이해합니다.
1.1 클라이언트는 서버를 그냥 찾을 수 없다
네트워크 프로그래밍에서, 클라이언트가 서버에 접속하려면 반드시 두 가지를 알아야 합니다.


어느 컴퓨터인가? → IP (건물 주소)
그 컴퓨터 안의 어느 프로그램인가? → 포트 (창구 번호)
채팅 서버가 192.168.0.10 컴퓨터에서 5000번 포트로 기다리고 있다면, 클라이언트는 192.168.0.10:5000으로 접속해야 합니다.
| 용어 | 일상 비유 | 의미 |
| IP | 건물 주소 | 네트워크 안에서 어느 컴퓨터인지 찾는다 |
| Port | 창구 번호 | 그 컴퓨터 안에서 어느 프로그램인지 찾는다 |
| TCP | 전화 통화 | 연결을 먼저 만든 뒤 순서대로 대화한다 |
1.2 IP는 네트워크 안에서 컴퓨터를 찾는 주소다

같은 와이파이에 연결된 컴퓨터들이 있다고 가정해 보겠습니다.
노트북 A: 192.168.0.10
노트북 B: 192.168.0.11
노트북 C: 192.168.0.12
채팅 서버가 노트북 A에서 실행 중이라면 클라이언트는 192.168.0.10을 알아야 합니다. 이번 과정의 초반 실습은 서로 직접 닿을 수 있는 내부망을 기준으로 합니다.
| 구분 | 설명 |
| 내부 IP | 같은 공유기나 같은 네트워크 안에서 컴퓨터를 찾는 주소 |
| 이번 강의 범위 | 서버와 클라이언트가 같은 내부망에 있다고 가정하고 내부 IP 중심으로 설명 |
Ubuntu에서 내부 IP를 확인할 때는 다음 명령어를 사용합니다.
ip addr
출력 결과에서 inet으로 시작하는 줄을 찾습니다. /24 앞의 값이 내부 IP 후보입니다.
inet 192.168.0.10/24
✔ 확인 기준: ip addr 출력에서 /숫자 앞의 IP를 서버 PC의 내부 IP 후보로 말할 수 있으면 완료입니다. 127.0.0.1만 보고 서버 PC의 내부 IP라고 착각하지 않았는지 확인하세요.
1.3 Port는 한 컴퓨터 안에서 프로그램을 찾는 번호다

IP로 컴퓨터를 찾았다고 해서 바로 원하는 프로그램에 도착하는 것은 아닙니다.
한 컴퓨터에서 웹 서버, 채팅 서버, 데이터베이스 서버가 동시에 실행될 수 있습니다.
어느 프로그램으로 들어갈 것인지 구분하는 번호가 바로 포트입니다.
이번 과정에서는 예시 포트로 5000번을 사용합니다.
5000번 자체가 특별해서가 아니라, 서버와 클라이언트가 같은 포트 번호를 약속해야 한다는 점이 중요합니다.
서버: 5000번 포트에서 기다림
클라이언트: 5000번 포트로 접속함
만약 서버가 192.168.0.10:5000에서 기다리는데 클라이언트가 192.168.0.10:6000으로 접속하면, IP는 맞지만 포트가 달라서 채팅 서버를 찾지 못합니다.
✔ 확인 기준: 192.168.0.10:5000에서 IP와 포트를 각각 구분할 수 있으면 완료입니다. 서버 포트와 클라이언트 포트가 서로 다른 값으로 적혀 있지 않은지 확인하세요.
1.4 TCP는 연결을 먼저 만든 뒤, 데이터를 주고받는 방식이다

TCP는 두 프로그램 사이에 먼저 연결을 만든 뒤 그 연결을 통해 데이터를 순서대로 주고받는 방식입니다. 전화 통화에 비유할 수 있습니다.
| TCP 흐름 | 전화 비유 |
| 서버 대기 | 전화를 받을 준비를 한다 |
| 클라이언트 접속 | 상대방 번호로 전화를 건다 |
| 연결 생성 | 통화가 연결된다 |
| 데이터 송수신 | 연결된 상태에서 서로 대화한다 |
| 연결 종료 | 대화가 끝나면 전화를 끊는다 |
IP와 Port는 어디로 갈지를 정하는 정보이고, TCP는 어떤 방식으로 주고받을지를 정하는 통신 방식입니다. 둘은 다른 개념입니다.
2. 실습 구조 확인하기
→ 같은 컴퓨터에서도 네트워크 학습이 가능함을 이해합니다.

서버와 클라이언트가 꼭 다른 컴퓨터에 있어야 하는 것은 아닙니다.
같은 컴퓨터에서 서버 프로그램과 클라이언트 프로그램을 동시에 실행해서 통신할 수 있습니다.
이 과정의 실습에서는 한 대의 컴퓨터에서 터미널 2개를 열어 각각 실행합니다.
내 컴퓨터
├── 터미널 1: python chat_server/server.py
└── 터미널 2: python chat_client/main.py
같은 컴퓨터 안에서 자기 자신에게 연결할 때는 다음 주소를 사용합니다.
127.0.0.1 → 내 컴퓨터 자기 자신
localhost → 내 컴퓨터 자기 자신
두 표현은 학습 단계에서는 거의 같은 의미로 이해해도 됩니다. 이 주소의 의미는 2강에서 IP와 포트를 배우면서 더 자세히 다룹니다. 이 과정에서 자주 쓰는 두 표현을 구분해 둡니다.
| 표현 | 의미 |
| 네트워크 | 두 대 이상의 컴퓨터가 연결된 모든 환경. 같은 방 안에 있는 두 컴퓨터도 네트워크 |
| 인터넷 | 전 세계 컴퓨터가 연결된 거대한 네트워크. 네트워크의 일부 |
이 과정에서는 같은 컴퓨터 안(127.0.0.1)에서 실습하므로 인터넷 연결 없이도 모든 실습이 가능합니다. "네트워크 프로그래밍 = 인터넷이 꼭 필요하다"는 오해가 있는데, 실제로는 로컬 네트워크에서도 동일한 원리가 적용됩니다.
✔ 확인 기준: 서버가 먼저 실행되고, 클라이언트가 연결 요청을 보내고, 서버가 수락한다는 순서를 말할 수 있으면 완료입니다.
3. 다음 강의로 이어지는 부분
→ 이번 강의 핵심을 정리하고, 3강에서 배울 소켓의 역할을 예고합니다.
클라이언트는 서버의 IP와 Port를 사용해 TCP 연결을 만들고, 그 연결을 통해 데이터를 주고받습니다.
| 개념 | 한 줄 정리 |
| IP | 네트워크 안에서 컴퓨터를 찾는 주소 |
| Port | 한 컴퓨터 안에서 통신할 프로그램을 찾는 번호 |
| TCP | 연결을 먼저 만든 뒤 데이터를 순서대로 주고받는 방식 |
| 서버 | 먼저 실행되어 특정 포트에서 기다리는 프로그램 |
| 클라이언트 | 서버의 IP와 포트를 알고 접속하는 프로그램 |
다음 3강에서는 이 질문의 답을 배웁니다.
IP와 Port를 알았다면, Python 코드에서 어떻게 실제 연결을 만들까?
그 답이 바로 다음에 배울 Soket 입니다.
→ 다음 강의 (3강): IP와 포트를 실제 코드로 연결해 주는 도구인 소켓의 역할과 동작 흐름을 배웁니다. Socket 이 무엇인지 이해하면 4강·5강의 서버·클라이언트 코드가 훨씬 명확하게 보입니다.