Java 기반 웹 채팅 서버의 동시성 문제 및 아키텍처 검토

Source

  • Evernote/Technote scraps/기술적 이슈에 대한 토론공간.md

Summary

2000년대 초 Java(1.4) 환경에서 웹 채팅 서버를 구현하던 개발자가 겪은 동시성 이슈와 아키텍처 설계에 대한 기술적 질문입니다. 주요 증상은 다중 사용자 환경에서 시간이 지남에 따라 메시지 전달이 지연되거나 실패하는 것이었으며, 원인으로 static 필드인 Hashtable에 대한 읽기/쓰기 동기화 부재를 지목했습니다. 또한 synchronized 메소드의 락 범위(인스턴스 vs 클래스)에 대한 이해 부족과, 700명 동시 접속을 목표로 하는 서버 구조(직접 구현한 스레드 풀 포함)의 적절성에 대한 조언을 구하고 있습니다.

Key Points

  • Java 1.4 환경에서 웹 채팅 서버 구현 중 메시지 전달 지연/실패 현상 발생
  • 원인 분석: static 변수(Hashtable)에 대한 동시 읽기/쓰기 시 동기화 미비
  • 기술적 의문: static 필드에 대한 직접적인 동기화 방법 및 synchronized 메소드의 락 객체 범위(인스턴스 vs 클래스)에 대한 혼란
  • 아키텍처 검토: 700명 동시 접속 목표에 대한 현재 서버 구조(Allen Holub의 스레드 풀 활용)의 적절성 문의
  • 해결 시도: sendPacket()synchronized 적용으로 일시적 개선이나 근본 해결 실패