리눅스 기반의 네트워크 서버의 사용자 트래픽 관리를 위한 쓰레드 풀과 IOCP 대체 서버 구현

  • 사용 스킬 : C, LINUX, ePoll, 멀티 쓰레드
  • 개발 기간 : 2008년 9월 ~ 12월
  • 관련 과목 : 4학년 2학기 네트워크 프로그래밍 과목의 개별 프로젝트
  • 설명 : 리눅스 기반의 네트워크 서버에서 사용자의 요청 및 접속을 관리하기 위한 멀티 쓰레드 기반의 쓰레드 풀을 개발한 후, 이를 더 개선하기 위해서 리눅스의 ePoll을 기반으로 하여 윈도우의 IOCP와 유사한 서버 시스템을 구현함

4학년 2학기에 수강한 네트워크 프로그래밍 과목은 중간고사와 기말고사 대신에 주어진 개별 프로젝트를 수행하고, 보고서를 작성하는 것으로 대체하였다. 4학년 2학기에 대부분의 학생들이 취업에 신경써야 하기 때문에 교수님께서 배려를 해주셨다. 중간 과제는 쓰레드 풀 기반의 일-대-다 멀티 채팅 프로그램을 개발하는 것이었으며, 기말 과제는 중간 과제에서 개발한 시스템을 윈도우 운영 체제의 IOCP와 유사한 방식의 비동기 I/O 기반으로 개선하는 것이었다.

나는 대학원 진학을 미리 결정한 터라 4학년 2학기에 여유가 있었고, 이 두 과제를 함에 있어서 최선을 다했다. 결과물도 내가 가장 신경써서 만들었고 완성도도 높다고 할 수 있는 결과물 중 하나이다. 그리고 IOCP에 대해서 확실하게 이해할 수 있는 매우 유익하고 좋은 기회였다.

우선 중간 과제에는 쓰레드 풀을 만들고 이를 관리하는 시스템을 개발하였다. 스레드 풀 기법이란 쓰레드가 필요할 때마다 생성하는 것이 아니라 쓰레드를 미리 생성해 놓고 필요시 생성된 쓰레드를 이용한 기법을 말한다. 아래는 간단한 시스템 구조이다.

아래는 각각 서버와 3개의 클라이언트의 스크린 샷이다. 서버 프로그램을 실행 할 때는 왼쪽의 서버 화면에서와 같이 최대 2명의 클라이언트만 접속을 허용하도록 매개변수를 설정했다. 오른쪽의 클라이언트 화면을 보면 2개의 클라이언트(포트 7002, 7003)가 접속한 상태에서 또 다른 클라이언트 접속시(포트 7001) 접속이 거부됨을 알수 있다. 만약 현재 접속중인 클라이언트 중 하나(7002나 7003)가 접속을 중단한다면, 접속이 거부되었던 또 다른 클라이언트(7001)는 접속할 수 있다.

기말 과제는 위에 개발한 채팅 시스템을 윈도우 시스템의 IOCP와 유사하게 변경하는 것이다. IOCP(Input Output Completion Port)는 현존하는 모든 I/O 방식 중 가장 성능이 뛰어난 것으로 알려진 방식으로 입/출력에 대한 작업을 커널이 대신 관리하고 사용자에게는 작업의 완료 결과를 통보하는 기법이다. 하지만 안타깝게도 리눅스 시스템에서는 이러한 IOCP가 지원되지 않는다. 대신 리눅스와 같은 유닉스 기반의 시스템에서는 ePoll(event Poll)이라는 이반트 통지 기반의 입출력 처리 도구가 있다. 이 ePoll과 위에서 개발한 쓰레드 풀 시스템을 혼합하면 IOCP와 완벽히 같지는 않으나 유사한 방식의 시스템을 개발할 수 있다. 이러한 시스템에서는 위에서 개발한 단순 쓰레드 풀 방식의 한 서버에 접속한 사용자의 수를 제한해야만 하는 단점을 보완할 수 있다. 아래는 이러한 시스템의 구조를 나타낸다.

아래는 개발한 시스템의 서버와 3개의 클라이언트의 접속 화면이다. 클라이언트는 거의 무한에 가깝게 접속할 수 있다.(물론 실제로는 서버 능력에 따라 달라진다.) 왜냐하면 위의 기존 시스템은 하나의 클라이언트가 접속하면 쓰레드 풀 관리자에 의해 쓰레드 풀에서 한개의 쓰레드가 할당되어 클라이언트가 접속을 종료할 때까지 그 쓰레드는 그 클라이언트만 담당한다. 만약 해당 클라이언트의 입력이 오랫동안 없더라도 해당 쓰레드는 클라이언트로부터 언제 입력이 들어올지 모르기 때문에 다른 곳에 사용될 수 없다. 하지만 새로운 시스템에서는 하나의 쓰레드는 하나의 요청작업(=패킷)에 할당이 되고 해당 요청을 처리하면 다시 쓰레드 풀에 반환된다. 그러므로 생성된 쓰레드 수와 접속하는 클라이언트 수는 서로 독립이기 때문에, 무한의 클라이언트가 접속할 수 있다.

 

(C)Copyright Minje, Sohn All Rights Reserved.