Java 채팅 서버 구현 시 쓰레드 동기화 및 성능 이슈 토론 (2002)
Source
Evernote/Technote scraps/기술적 이슈에 대한 토론공간.1.md
Summary
2002 년 JavaService.net 커뮤니티에서 진행된 웹 채팅 서버 구현 관련 기술 토론입니다. 개발자는 Red Hat Linux 환경에서 Java 1.4 를 사용하여 쓰레드 풀링 (Allen Holub 의 라이브러리 사용) 기반 채팅 서버를 구축 중이었으나, 동시 접속자 증가 시 메시지 전달 지연 및 동기화 문제를 겪었습니다. 주요 논점은 static 필드인 Hashtable(sm_oClientSocket) 에 대한 읽기/쓰기 동기화 방법 (synchronized 메소드의 한계) 과 InputStream.available() 을 이용한 무한 루프 처리 시 CPU 점유율 상승 문제였습니다. 커뮤니티 멤버들은 available() 체크 로직의 비효율성과 무한 루프의 위험성을 지적하며, 적절한 입력 스트림 조사 방법과 동기화 전략에 대한 조언을 나눴습니다. 당시 목표는 서버당 700 명 이상의 동시 접속 처리였습니다.
Key Points
- Java 1.4 기반 웹 채팅 서버 구현 중 메시지 전달 지연 및 동기화 버그 발생
- 쓰레드 풀링 (1000 개 풀) 구조에서
static Hashtable접근 시synchronized메소드만으로는 클래스/인스턴스 락 충돌로 인한 동기화 실패 가능성 제기 InputStream.available()을while(true)루프에서 사용 시 CPU 점유율 100% 상승 및 메모리 소모 문제 지적- 동시 접속자 700 명 이상 처리를 위한 아키텍처 및 동기화 전략에 대한 커뮤니티 피드백
- 구체적인 소스 코드는 기업 제품이라 공개되지 않았으나, 문제 상황과 진단 과정이 상세히 기록됨