TCP Server Design

다중 클라이언트 TCP 서버와 메시지 경계 처리

TCP 채팅 서버는 연결 수만 늘리는 문제가 아니라 클라이언트별 상태, 버퍼, 메시지 경계, backpressure를 함께 관리해야 합니다.

01

연결 수락

accept로 클라이언트를 받고 연결별 상태와 버퍼를 준비합니다.

connection state
02

읽기 이벤트

recv 결과를 누적 버퍼에 넣고 완성된 메시지인지 확인합니다.

read buffer
03

메시지 파싱

구분자 또는 length prefix로 애플리케이션 메시지 경계를 복원합니다.

framing
04

브로드캐스트

대상 클라이언트들의 쓰기 큐에 메시지를 넣고 느린 클라이언트를 분리합니다.

fan-out
05

종료 정리

연결 종료, 오류, timeout 시 소켓과 버퍼, 사용자 목록을 정리합니다.

cleanup
fork
프로세스 격리 구현은 단순하지만 메모리와 프로세스 생성 비용이 큽니다.
소규모 예제
thread
연결별 동시 처리 공유 데이터 락과 스레드 수 제한을 신경 써야 합니다.
경쟁 조건 점검
event loop
많은 연결 처리 non-blocking I/O와 상태 머신이 필요하지만 스레드 수를 연결 수와 1:1로 늘리지 않습니다.
epoll/select

채팅 서버 안정성 기준

메시지 경계 TCP는 스트림이므로 줄바꿈이나 길이 prefix 같은 framing이 필요합니다.
느린 수신자 한 클라이언트의 느린 읽기가 전체 브로드캐스트를 막지 않게 합니다.
입력 제한 메시지 길이와 연결 수를 제한하지 않으면 메모리 사용이 폭증할 수 있습니다.