웹소켓(WebSocket)이란 무엇인가
웹소켓(WebSocket)은 클라이언트(브라우저 등)와 서버 간에 실시간 양방향 통신을 가능하게 해주는 프로토콜임.
HTTP 프로토콜과 다르게 요청-응답 방식이 아니라, 연결이 유지된 상태에서 양방향으로 데이터를 자유롭게 주고받을 수 있음.
일반적인 HTTP 는 클라이언트가 요청할 때만 서버가 응답하는 방식이지만, 웹소켓은 한번 연결이 성립되면 서버에서도 자유롭게 클라이언트에 메시지를 보낼 수 있음.
따라서 실시간성이 중요한 채팅, 알림, 주식 시세, 게임 서버 등에 많이 사용됨.
1. 웹소켓의 동작 방식
웹소켓은 처음에는 HTTP 요청 으로 연결을 시작함. 이를 핸드셰이크(Handshake) 라고 부름.
핸드셰이크가 완료되면 연결이 업그레이드되어 지속적인 양방향 통신이 가능해짐.
클라이언트 → 서버 : HTTP 요청 (Upgrade: websocket)
서버 → 클라이언트 : HTTP 101 Switching Protocols
→ 연결 성립 → 이후부터 실시간 데이터 송수신
특징
- 연결이 유지되는 동안 양방향으로 자유롭게 통신 가능함.
- 별도의 요청 없이 서버에서 클라이언트로 푸시 알림 가능함.
- HTTP 와 같은 포트(80/443) 를 사용하여 방화벽을 통과할 수 있음.
2. 웹소켓과 HTTP 차이
구분 | HTTP | WebSocket |
통신 방식 | 요청-응답 (Request/Response) | 양방향 지속 연결 (Full-duplex) |
연결 유지 | 요청마다 연결 | 최초 연결 후 지속 유지 |
헤더 크기 | 상대적으로 큼 | 초기 이후 작은 프레임 사용 |
서버 푸시 | 불가능 (HTTP/2 에서 일부 가능) | 가능 |
사용 사례 | 웹사이트, REST API | 실시간 채팅, 게임 서버, 알림 등 |
HTTP 에 비해 웹소켓은 지속적인 실시간 통신 이 필요한 서비스에 적합함.
3. 웹소켓의 장점과 단점
장점 | 단점 |
서버와 클라이언트 간 실시간 양방향 통신 가능함 | 연결 유지로 인해 서버 자원 사용량 증가함 |
연결된 상태에서 오버헤드가 적음 | 프록시나 방화벽에서 차단될 수 있음 |
빠른 데이터 전송 속도 | 연결 장애 시 복구 처리가 필요함 |
서버에서 클라이언트로 실시간 알림 전송 가능함 | 구현과 디버깅이 HTTP 대비 복잡함 |
4. 웹소켓 실무 활용 사례
- 실시간 채팅 시스템
- 메신저, 고객 상담 챗봇 등에서 즉각적인 메시지 송수신 가능함.
- 실시간 알림
- 주문 완료, 친구 요청, 시스템 알림 등을 실시간으로 전달함.
- 주식/코인 시세 스트리밍
- 가격 변동을 실시간으로 클라이언트에 전달함.
- 멀티플레이 게임 서버
- 게임 내 이벤트나 플레이어 상태를 빠르게 전달함.
- IoT 시스템
- 센서 데이터나 장비 상태를 실시간으로 모니터링함.
5. 웹소켓 기본 사용법 (Spring Boot 예제)
Spring Boot 에서 웹소켓을 사용하려면 간단하게 설정할 수 있음.
1) 의존성 추가
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
2) WebSocketConfig 작성
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(new MyWebSocketHandler(), "/ws");
}
}
3) 핸들러 구현
public class MyWebSocketHandler extends TextWebSocketHandler {
@Override
public void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
System.out.println("메시지 수신: " + message.getPayload());
session.sendMessage(new TextMessage("서버로부터 응답함"));
}
}
위처럼 구현하면 /ws 엔드포인트로 연결된 웹소켓 클라이언트가 메시지를 보내고 받을 수 있음.
정리
웹소켓은 서버와 클라이언트 간 지속적인 연결을 유지하면서 양방향 통신을 지원하는 프로토콜임.
초기 HTTP 핸드셰이크 이후에는 실시간으로 데이터를 주고받을 수 있어 채팅, 알림, 실시간 스트리밍 서비스 등에서 많이 활용됨.
Spring Boot 같은 프레임워크를 이용하면 비교적 쉽게 구현이 가능하며, 서비스의 실시간성을 향상시키는 데 효과적인 기술임.
출처 : ChatGPT
'BE > Spring & Spring Boot' 카테고리의 다른 글
모놀리식 아키텍처와 MSA (0) | 2025.04.24 |
---|---|
[Spring Boot] Spring JDBC (0) | 2025.04.22 |
[Spring Boot] @CacheEvict (0) | 2025.04.15 |
[Spring Boot] 소셜로그인 (1) | 2025.04.07 |
[Spring Boot] WebFlux (0) | 2025.04.01 |