본 프로젝트는 TCP 소켓을 활용하여 실시간 채팅 및 파일 다운로드 기능을 제공하는 서버를 구현합니다. 네트워크 통신의 원리를 깊이 있게 이해하고, 직접 서버를 구축함으로써 클라이언트와 서버간의 상호작용에 대해 직접 경험합니다.
- 프로그래밍 언어: Java (JDK 17)
- 서버 설정 및 클라이언트 관리
- 포트 설정: 7777 포트를 사용하여 서버 소켓을 생성
- 클라이언트 연결 대기: 서버는 클라이언트의 연결 대기
- 스레드 생성: 클라이언트가 연결되면, 해당 클라이언트를 위한 별도의 스레드를 생성하여 서비스 제공.
- 지속적 서비스 제공: 클라이언트가 종료 키워드를 입력할 때까지 서비스를 반복 제공.
- 실시간 다중 채팅 기능
- 채팅방 생성: 사용자가 새로운 채팅방을 생성할 수 있다.
- 메시지 송수신: 채팅방 내에서 사용자 간의 메시지를 실시간으로 송수신할 수 있다.
- 파일 관리 기능
- 파일 리스트 제공: 사용자에게 서버에 있는 파일 리스트를 제공한다.
- 파일 전송 요청 처리: 사용자의 파일 전송 요청을 처리한다.
- 파일 다운로드: 사용자가 서버에 있는 파일을 다운로드할 수 있다.
- 버전1: 순수 자바를 이용한 멀티챗 기능 구헌.
- 버전2: 채팅방 개념 추기: 자료구조(Map)와 클래스(POJO)를 통해.
- 버전3: 배차(Dispatch)개념 도입, 전략 패턴을 이용한 성능 향상.
- 버전4: 사용자 연결 클래스화 및 자체 프로토콜 제작
- 전통적인 HTTP 서버와 내 서버의 연결 방식 차이점 분석.
- ClientConnection, Dispatch, SocketServer 관계 도식화
- 획일화된 통신방식 프로토콜 설계.
- 버전5: 채팅방을 POJO로 변경, 채팅방 개념 클래스로 시각화.
- Servlet
- Apache/Tomcat
- Spring의 Dispatcher Servlet(전략 패턴)
- 프로토콜 형식
- 병렬처리
- 쓰레드, 쓰레드
- Thread-safe
- 동시성 관리
- 입출력과 버퍼
- NIO
- CGI, 환경 변수.
- Tomcat, catalina와 coyote
- 자체 프로토콜
