들어가기 앞서
우선 소켓 통신에 대한 이해가 필요하다.
소켓 통신에 대해 잘 모른다면 아래 글을 읽으면 된다.
https://lold2424.tistory.com/245
[JAVA] 소켓 통신의 기본 개념과 구조
Java에서는 네트워크 통신이 가능하도록 java.net 패키지를 통해 TCP/IP 기반 소켓 통신 기능을 제공한다.이번 글에서 TCP 기반의 소켓과 서버소켓을 사용한 1:1 구조를 알아보도록 하겠다.소켓 통신이
lold2424.tistory.com
실제 서비스에서는 다수의 사용자가 동시 접속하기 대문에, 클라이언트마다 별도의 스레드를 생성해 병렬 처리해야한다.
때문에 멀티 클라이언트의 구조에 대해 이해해야만 한다.
멀티 클라이언트 서버란?
기존의 1:1 통신 모델을 확장한 통신을 말한다.
각 클라이언트마다 별도의 연결 세션을 유지하기 위해 일반적으로 TCP 기반으로 구현된다.
TCP 기반으로 구현하면 클라이언트에 대해 스레드를 배정해 1:다수, 다수:다수 구현에 최적화 할 수 있다.
UDP보다 TCP가 패킷 순서 보장, 손실/재전송 처리와 같은 신뢰성 높은 통신을 제공하기에 데이터 순서나 누락 없이 처리해준다.
1:다수
서버 1대 ↔ 다수의 클라이언트 동시 접속
클라이언트마다 개별 스레드 또는 스레드풀로 분리 처리
각자 독립적으로 메시지 송수신 가능
다수:다수
단순히 서버-클라이언트의 다대일이 아니라, 클라이언트들끼리도 메시지를 주고받도록 확장
서버는 모든 클라이언트의 메시지를 받아 다른 클라이언트에 전달하는 허브 역할
멀티 클라이언트 서버 구현 방식
멀티 클라이언트는 여러가지 방식으로 구현할 수 있다.
1. 접속당 1스레드
클라이언트가 연결되면 해당 연결을 처리할 새 스레드를 생성하는 방식이다.
구현이 간단하고 독립적인 처리가 가능하지만, 클라이언트 수가 많아지면 그만큼 사용하는 스레드의 수가 증가해 메모리 소모가 심하다는 단점이 있다.
while (true) {
Socket client = serverSocket.accept();
new Thread(() -> {
// client와 통신 처리
}).start();
}
2. 스레드풀 기반 구조
미리 정해진 수의 스레드를 풀로 생성하고, 클라이언트 요청이 들어오면 스레드가 큐에서 꺼내서 처리하는 방식이다.
스레드 수를 제한하기 때문에 자원을 효율적으로 사용할 수 있어 안정적이지만 구현이 복잡하다는 단점을 가진다.
ExecutorService pool = Executors.newFixedThreadPool(100);
while (true) {
Socket client = serverSocket.accept();
pool.execute(() -> {
// client와 통신 처리
});
}
표로 확인하는 서버 구현 방식
항목 | 접속당 1스레드 | 스레드풀 기반 |
구조 | 요청마다 새로운 스레드 생성 | 고정된 수의 스레드 재사용 |
장점 | 구현이 간단 | 자원 효율적, 안정적 처리 가능 |
단점 | 많은 연결 시 메모리 부담 | 큐 대기 시간이 발생할 수 있음 |
사용 예 | 간단한 채팅 앱, 학습 목적 | 실전 서비스, 높은 트래픽 서버 |
'자바' 카테고리의 다른 글
[JAVA] 객체 직렬화를 통한 네트워크 전송 (0) | 2025.04.23 |
---|---|
[JAVA] 네트워크 주소 체계와 InetAddress 활용 (0) | 2025.04.23 |
[JAVA] 소켓 통신의 기본 개념과 구조 (0) | 2025.04.22 |
[JAVA] 가상(Virtual) 스레드 사용 예시 (0) | 2025.04.18 |
[JAVA] 가상(Virtual)스레드란? (0) | 2025.04.17 |