Skip to content

Latest commit

 

History

History
31 lines (21 loc) · 2.59 KB

File metadata and controls

31 lines (21 loc) · 2.59 KB

☕ Java Multi-Threaded Socket Chat Server

Java Socket API와 Multi-Threading을 활용하여 구현한 실시간 다중 사용자 채팅 프로그램 백엔드 엔지니어로서 필수적인 네트워크 프로그래밍 구조, 동시성 제어(Thread), 입출력 스트림(I/O Stream)의 핵심 메커니즘을 직접 커스텀 소켓 아키텍처로 구현하며 학습한 프로젝트입니다.


📅 프로젝트 개요

  • 개발 환경: Eclipse IDE, Java JDK
  • 주요 기술: Java Core, Socket API, Multi-Thread, Java I/O Stream

🛠️ 핵심 역량 및 구현 특징 (Backend Points)

1. TCP 소켓 네트워킹 (Socket Programming)

  • ServerSocket을 통해 특정 포트(Port)에서 클라이언트의 접속 요청을 상시 대기(Listen)하는 서버 엔진을 구축했습니다.
  • Socket 연결 확립 후 클라이언트와 서버 간의 양방향 독립 데이터 통신 플로우를 제어했습니다.

2. 멀티스레딩 기반 동시성 제어 (Multi-Threading)

  • 1:1 단방향 채팅을 넘어 복수의 클라이언트가 동시 접속할 수 있도록, 새로운 사용자 연결이 들어올 때마다 서버 측에서 **독립적인 워커 스레드(Worker Thread)**를 동적으로 생성 및 할당하는 구조를 설계했습니다.
  • 하나의 클라이언트가 메시지를 보냈을 때, 현재 서버에 연결된 모든 클라이언트 스레드 리스트를 순회하며 메시지를 동시 전송(Broadcast)하는 공유 자원 동기화 로직을 구현했습니다.

3. Java I/O 스트림 핸들링

  • 네트워크 소켓 파이프라인을 통해 들어오는 실시간 텍스트 데이터를 문자 단위로 효율적으로 버퍼링하기 위해 BufferedReaderPrintWriter 스트림을 활용하여 입출력 성능을 최적화했습니다.

💡 인사이트 및 회고

  1. 스레드 리소스의 이해: 클라이언트 접속 시마다 무조건 스레드를 생성하는 방식은 동시 접속자가 수백 수천 명으로 늘어날 때 대규모 낭비가 발생할 수 있음을 인지했습니다. 이를 개선하기 위해 추후 스레드 풀(ExecutorService) 아키텍처를 도입하여 서버 자원을 바운딩하는 효율적인 백엔드 리팩토링의 필요성을 체감했습니다.
  2. 동시성 이슈 체감: 다수의 클라이언트 스레드가 하나의 커넥션 리스트 자원에 동시에 접근할 때 발생할 수 있는 데이터 정합성 문제에 대해 고민해 보며, 백엔드 프로그래밍에서의 동기화(Synchronization)의 중요성을 깊이 이해하게 되었습니다.