← Projects

ft_irc

C++·TCP·kqueue 기반 다중 클라이언트 IRC 서버

기간
2023.02 – 2024.01
인원
3명
역할
서버 · 프로토콜 구현
기술
C++ · TCP · kqueue

채널·개인 메시지를 지원하는 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 객체의 역할
ft_irc UML component diagram
이벤트 루프·파싱·명령 디스패치·서버 상태의 연결 구조
ft_irc UML class diagram
서버·명령 디스패치·IRC 도메인 객체의 역할