Network server · 42 Seoul · 3-person team
ft_irc
C++·TCP·kqueue 기반 다중 클라이언트 IRC 서버
프로젝트 소개
채널·개인 메시지를 지원하는 IRC 서버
- RFC 1459를 바탕으로 네트워크 연결·사용자 상태·IRC 명령 처리 구현
- 3인 팀 프로젝트에서 서버 및 프로토콜 처리 담당
문제 상황
TCP 수신 데이터와 IRC 명령 경계의 불일치
- TCP는 메시지 단위가 아닌 바이트 스트림으로 데이터 전달
- 한 번의
recv()에서 명령 일부만 수신하거나 여러 명령을 함께 수신하는 상황 처리 필요
해결 과정
클라이언트별 버퍼와 이벤트 기반 명령 처리
- 클라이언트별 수신 버퍼를 유지하고 줄바꿈까지 수신된 완성 메시지만
CommandInvoker로 전달 - non-blocking 소켓의 생성·bind·listen·accept 흐름 구현
kqueue이벤트 루프로 여러 클라이언트의 read/write 이벤트 처리- Client·Channel·User 상태와 PASS·NICK·JOIN·PRIVMSG 등 명령 디스패치 구현
- 연결 종료·오류 발생 시 클라이언트 상태와 파일 디스크립터 정리
구현 범위
다중 연결·채널·개인 메시지 처리
- 분할되거나 합쳐진 수신 데이터에서도 IRC 명령 경계 보존
- 채널 대화와 개인 메시지를 지원하는 이벤트 기반 서버 구현
메시지 처리 구조
이벤트 루프·명령 디스패치·서버 상태를 구분한 구조
- 컴포넌트 다이어그램: 이벤트 처리와 명령 전달 흐름
- 클래스 다이어그램: 서버·명령 처리·IRC 객체의 역할