AI Briefing

고전 돌아보기, C10K 문제 (C10K Problem)

·2023.12.01 02:00

1만 명의 동시 접속을 처리하기 위한 C10K 문제의 정의와 이를 해결하기 위한 기술적 진화 과정을 살펴본다.

1999년 Dan Kegel이 제기한 C10K 문제는 서버가 1만 명의 동시 접속자(Concurrent Users)를 어떻게 효율적으로 처리할 것인가에 대한 과제입니다.

과거에는 요청마다 프로세스를 fork()하거나 Thread를 생성하는 방식을 사용했습니다. 하지만 이 방식은 다음과 같은 한계가 있습니다.

  • 메모리 부족: 각 Thread마다 별도의 스택 메모리가 할당되어 대규모 접속 시 메모리 점유율이 급증합니다.
  • Context Switching 부하: Thread가 많아질수록 CPU 자원을 차지하기 위한 경합과 컨텍스트 스위칭 비용이 기하급수적으로 증가합니다.

이러한 문제를 해결하기 위해 Nonblocking I/OAsynchronous I/O 기술이 등장했습니다. Linux의 epoll, BSD의 kqueue, Windows의 IOCP 등이 대표적이며, 이러한 기술들은 현대의 고성능 웹 서버인 nginxNode.js의 핵심 동작 원리가 되었습니다.

이 요약은 원문 이해를 돕기 위한 큐레이션입니다. 저작권은 원저작자에게 있으며, 정확한 내용과 맥락은 원문을 확인하세요.

요약 오류, 출처 표기 문제, 삭제 요청은 문의 · 건의로 알려주세요.