컴퓨터 네트워크를 망라하여 서로 다른 기기 간에 데이터를 송수신하는 TCP/IP 소켓(Socket) 네트워크 프로그래밍을 배웁니다.
1. 소켓 네트워크 용어 사전 (Glossary)
- Socket (소켓): 네트워크 망을 통해 상대방 프로그램과 소통하는 소프트웨어 접점(통신 양 끝단)입니다.
- TCP/IP: 데이터 손실 없이 안전하고 정확하게 전달함을 보장하는 연결 지향적(Connection-oriented) 네트워크 표준 프로토콜입니다.
- Port Number (포트 번호): 한 컴퓨터 내에서 실행 중인 수많은 네트워크 프로그램 중 특정 서비스를 식별하는 16-bit 식별 번호입니다. (0 ~ 65535)
- ServerSocket: 클라이언트의 소켓 연결 요청을 들어오는 포트에서 수신 대기(
accept())하는 서버 전용 소켓입니다.
2. TCP 소켓 서버 / 클라이언트 동작 4단계
[Server] ServerSocket(port) 생성 및 accept() 대기
[Client] Socket(ip, port) 생성으로 연결 요청
[Server] accept() 승인으로 클라이언트 통신용 Socket 생성
[Both] InputStream / OutputStream으로 데이터 고속 송수신
3. TCP 멀티스레드 에코 서버 파이썬/자바 코드
// 서버 단 코드 (EchoServer.java)
import java.io.*;
import java.net.*;
public class EchoServer {
public static void main(String[] args) {
int port = 9999;
try (ServerSocket serverSocket = new ServerSocket(port)) {
System.out.println("에코 서버가 " + port + " 포트에서 수신 대기 중...");
while (true) {
Socket socket = serverSocket.accept(); // 클라이언트 접속 승인
System.out.println("클라이언트 접속 완료: " + socket.getInetAddress());
// 입출력 스트림 연결
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
String msg;
while ((msg = in.readLine()) != null) {
System.out.println("수신 메세지: " + msg);
out.println("Echo: " + msg); // 메세지 되돌려주기
}
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
4. 자주 묻는 질문 (Q&A)
Q. TCP와 UDP 통신의 주요 차이는 무엇인가요? A. TCP는 연결 수립 과정(3-Way Handshake)을 거쳐 신뢰성 높은 데이터를 전송하며, UDP는 연결 수립 없이 빠른 속도로 조각을 던지는 비연결형(Connectionless) 프로토콜입니다. (실시간 스트리밍/게임에는 UDP 선호)