[Java Network] 4. Socket 프로그래밍
in Java on Java Network
Socket 프로그래밍…
h… w… j. n. ctrl cv… [java net]
HTTP 프로토콜은 HTML 형태의 데이터를 대량으로 빠르게 처리하기 위해 만든 프로토콜이다. 오랜 세월 사용했지만 처음 제안된 프로토콜 규격에서 크게 변하지 않고 그대로 사용되고 있다.
Java의 HttpClient
API에서 제공하는 WebSocket 기능은 Java 11에서 추가되었으며, Java 생태계에서 기본 제공하는 WebSocket 클라이언트 구현입니다. 이 기능은 WebSocket 프로토콜(RFC 6455)을 지원하며, 비동기식 메시지 처리 및 HTTP/2 기반의 확장성을 제공합니다.
아래는 HttpClient
WebSocket 방식의 역사, 특징, 장점, 한계 등을 설명합니다.
1. WebSocket
1-1. HttpClient
WebSocket
Java 11에 HttpClient
API가 표준으로 도입되고, WebSocket 클라이언트 기능이 추가
- WebSocket 클라이언트를 기본 API로 제공함으로써, 외부 라이브러리 없이도 WebSocket 통신을 구현 가능
- RFC 6455(WebSocket 프로토콜 표준)를 기반으로 구현
- 이후 버전에서는 성능 최적화와 새로운 프로토콜 확장(HTTP/2, HTTP/3 통합) 등이 점진적으로 개선
1-2. 특징 및 장점
- 표준 WebSocket 프로토콜 지원
- RFC 6455(WebSocket Protocol)를 준수하여 동작
- HTTP 요청을 통해 WebSocket으로 업그레이드 가능
- 표준 Java API 제공
- 외부 라이브러리 없이 Java 11 이상에서 기본적으로 WebSocket 클라이언트를 구현 가능
- 의존성 관리가 쉬움
- 비동기 처리 지원
- WebSocket API는 비동기식 프로그래밍 모델을 기반으로 설계되어, 메시지 송수신 시
CompletionStage
와 같은 Java의 비동기 도구를 활용 CompletableFuture
와CompletionStage
를 활용하여 효율적인 비동기 메시지 송수신 구현 가능
- WebSocket API는 비동기식 프로그래밍 모델을 기반으로 설계되어, 메시지 송수신 시
- 성능 최적화
- Java의 최신 HTTP/2 및 NIO 기반 구현으로 높은 성능을 제공
- WebSocket의 지속적인 연결 특성을 활용하여 네트워크 오버헤드 감소
- 쉬운 통합
- Java 11의
HttpClient
API와 통합되어, HTTP와 WebSocket 통신을 단일 API로 처리 가능 - HTTP 요청-응답과 WebSocket 연결을 하나의 API로 처리 가능
- 서버와 클라이언트 간 양방향 통신에 적합
- Java 11의
- 보안 강화
- HTTPS 기반의 TTLS 의 지원으로
wss://
를 통해 WebSocket 보안 연결(TLS)을 기본적으로 지원 - TLS 및 인증 메커니즘과 자연스럽게 연동
- HTTPS 기반의 TTLS 의 지원으로
- 범용성
- Java 생태계와의 자연스러운 통합(예: Jakarta EE, Spring Framework)
- HTTP/2, HTTP/3과 같은 최신 HTTP 프로토콜과 통합 지원
1-3. 단점
- 서버 기능 미지원
HttpClient
WebSocket은 클라이언트 전용 API이며, 서버 기능은 제공하지 않습니다. (Java에서 WebSocket 서버를 구현하려면 Jakarta EE, Spring WebSocket 등 추가 프레임워크가 필요)
- 기능의 단순함
- 고급 기능(STOMP 프로토콜 지원, 클러스터링 등)은 제공하지 않음
- 대규모 애플리케이션에서는 제한적일 수 있음
- Java 11 이상 필요
- Java 11 이상에서만 사용 가능하며, Java 8 이하의 프로젝트에서는 사용할 수 없음
- 추상화 부족
- Raw WebSocket 메시지(텍스트 또는 바이너리)를 처리해야 하므로, JSON, STOMP와 같은 메시지 프로토콜을 직접 구현해야 하는 부담이 있음
1-4. 사용 사례
- 실시간 데이터 전송
- 주식 가격, 실시간 채팅, 알림 시스템 등에서 클라이언트가 WebSocket 서버와 지속적으로 연결 유지
- IoT 디바이스 통신
- IoT 클라이언트에서 WebSocket을 통해 서버로 실시간 데이터 스트리밍
- 간단한 클라이언트 구현
- RESTful API 호출과 WebSocket 연결이 모두 필요한 클라이언트 애플리케이션
6. 다른 WebSocket 클라이언트 라이브러리와 비교
기능 | HttpClient WebSocket | Spring WebSocket | OkHttp WebSocket |
---|---|---|---|
API 제공 | 기본 Java API | Spring Framework 통합 | OkHttp 라이브러리 기반 |
사용 용도 | 간단한 WebSocket 클라이언트 구현 | 고급 기능 (STOMP, 클러스터링) | 경량 클라이언트 구현 |
확장성 | 제한적 | 매우 높음 | 제한적 |
의존성 관리 | 추가 의존성 불필요 | Spring 의존성 필요 | OkHttp 의존성 필요 |
비동기 지원 | CompletableFuture | Spring Messaging 기반 | 비동기 메시지 처리 가능 |
7. 결론
HttpClient
WebSocket API는 Java 11 이상에서 기본적으로 제공되는 WebSocket 클라이언트 구현으로, 외부 라이브러리 없이도 간단한 WebSocket 통신을 처리할 수 있다는 점에서 큰 장점을 가집니다.
다만, 고급 기능(예: STOMP, MQTT 지원)이 필요한 경우 Spring WebSocket이나 OkHttp 같은 대안 솔루션이 더 적합할 수 있습니다. 간단한 클라이언트 애플리케이션이나 Java 표준 API 사용이 목표인 경우 HttpClient
WebSocket API는 충분히 효과적입니다.