연결마다 드는 자원
WebSocket 연결 하나는 파일 디스크립터 1개와 읽기·쓰기 버퍼, 프레임워크 메타데이터, 연결별 상태를 합쳐 약 10~50KB 의 메모리를 써. 유휴 상태의 CPU 비용은 0 에 가깝고 활성 상태에서는 메시지 빈도에 비례해 늘어나. 연결 100K개는 큰 서버 한 대에 들어가고 1M개도 가능하지만 세심한 설계가 필요해. 10M개라면 지역별 분할이나 관리형 서비스가 필요해.
운영체제 한계가 중요해
Linux 의 프로세스당 파일 디스크립터 기본값은 1024라서 올리지 않으면 서버 하나에 WebSocket 연결 1024개도 열 수 없어. ulimit, limits.conf, sysctl 로 높여. 네트워크가 잠깐 끊긴 뒤 몰려드는 재연결을 처리하려면 net.core.somaxconn 과 tcp_max_syn_backlog 도 조정해.
직접 운영과 관리형 서비스의 솔직한 절충
직접 운영은 연결 1K개에서는 싸지만 10M개에서는 비싸. 관리형 서비스는 1K개에서는 비싸도 10M개에서는 확장과 당직 전문 인력을 따로 채용하지 않아도 돼서 쌀 수 있어. 대부분 앱의 전환점은 동시 연결 100K~1M개 부근이야. cwkPippa 는 분명 직접 운영 영역이지만 전 세계 SaaS 채팅 제품이라면 다를 수 있어.