
IRC는 "Internet Relay Chat"의 약자로, 인터넷을 통해 실시간으로 텍스트 기반의 대화를 주고받을 수 있는 통신 프로토콜이다. 1980년대 후반에 개발되어 여러 사용자가 동시에 참여할 수 있는 채팅방에서 대화를 나누거나, 1대1로 개인 메시지를 주고받는 등의 기능을 제공한다.

IRC는 오늘날에도 여전히 사용되고 있지만, 이전에 비해 그 중요성은 줄어들었다.
과거에는 IRC가 인터넷 상에서 실시간 대화와 커뮤니케이션을 위한 주요 플랫폼 중 하나였다. 그러나 소셜 미디어 플랫폼과 메신저 앱의 등장으로 인해 대부분의 사람들이 소셜 미디어나 메신저 앱을 사용하는 경향이 높아졌다.
그럼에도 IRC는 여전히 기술 커뮤니티나 오픈 소스 프로젝트에서 활발하게 사용되고 있다고 한다. 특히, 프로그래밍, 컴퓨터 과학 및 기술 관련 주제에 관심 있는 사람들 사이에서는 여전히 널리 사용되고 있다(왠지 geek스러운 느낌이 난다).
IRC를 사용하기 위해서는 IRC 클라이언트라는 소프트웨어가 필요하다. 이 클라이언트를 통해 IRC 서버에 연결하고, 하나 이상의 채널에 참여할 수 있다. 사용자는 채널에서 다른 사람들과 메시지를 주고받거나, 개인적으로 메시지를 보낼 수도 있다.
여기서 내가 구현할 것은 IRC 클라이언트가 아닌 IRC 서버이다.
C++ 기반 소켓 프로그래밍을 통해 여러 명의 클라이언트가 접속할 수 있고, 또 채널을 생성해 사용자 간 메시지를 주고 받을 수 있으며, 채널 관리자는 강퇴, 초대와 같은 커맨드들을 사용할 수 있도록 구현한다.
여러 명의 클라이언트 접속을 핸들링하기 위해서 자식 프로세스를 생성하거나 혹은 멀티 스레드 프로그래밍을 사용하는 것은 금지된다.
때문에 단일 스레드에서 여러 클라이언트를 핸들링하기 위해서는 비동기 프로그래밍 모델을 통해 이루어져야 한다.
이번 프로젝트를 구현하기 위해 중요한 키워드는 소켓 프로그래밍과 비동기 처리라고 할 수 있다!