2025년 9월 2일 화요일(69일차)

Jeonghoon·2025년 9월 2일

jeonghoon's Study

목록 보기
70/128

🌐 HTTP와 WebSocket 비교 및 구현


📡 HTTP

  • 클라이언트 <------ 요청(Request) / 응답(Response) ------> 서버
  • 요청이 있을 때만 응답 가능한 방식
  • 통신 상태를 유지하지 않는 무상태(Stateless) 프로토콜
  • 매 요청마다 연결 및 매핑 필요

🔄 WebSocket

  • 지속적인 양방향 연결 가능한 통신 프로토콜
  • Socket: 통신의 종착점(엔드포인트)
  • 클라이언트 소켓이 서버 소켓에 연결 요청

주요 사용처

  1. 실시간 통신 (채팅, 게임 등)
  2. 실시간 알림, 보안 등

⚙️ 스프링 웹소켓 구현

단계설명
1websocket 라이브러리 설치
2서버 웹소켓 핸들러 클래스 생성 (ChatHandler)
3TextWebSocketHandler 상속, 필수 메서드 오버라이딩
4@Component 애노테이션으로 스프링 컨테이너에 등록
5연결, 종료, 메시지 처리 메서드 구현

상속받는 주요 메소드

메소드명역할
afterConnectionEstablished(session)클라이언트와 서버 연결 성공 시 호출
afterConnectionClosed(session, status)연결 종료 시 호출
handleTextMessage(session, message)메시지 수신 시 호출

🔌 서버 웹소켓 및 경로 매핑

  • @Configuration, @EnableWebSocket 애노테이션 추가
  • WebSocketConfigurer 인터페이스 구현
  • registerWebSocketHandlers 메서드에서 핸들러 객체와 매핑 경로 등록

👨‍💻 클라이언트 WebSocket 구현 (JS)

  • 각 브라우저별 세션 별도로 관리 됨
  • 클라이언트 웹소켓 생성
const socket = new WebSocket("ws://서버주소");
  • 주요 이벤트 및 메소드
이벤트명설명
onopen(event)서버와 연결 성공 시 실행
onclose(event)연결 종료 시 실행
onerror(event)에러 발생 시 실행
onmessage(event)메시지 수신 시 실행
.send(message)서버에 메시지 전송
  • 접속중인 클라이언트 정보를 저장하는 Map 또는 List 관리 필요

🗂️ 실전 활용 팁

  • 접속 중인 클라이언트 소켓 관리 위해, Vector 등 동기화 된 배열 사용 권장
  • 웹소켓 관련 자세한 구현 예제는 Day02 참고

🔎 HTTP와 WebSocket 주요 비교

특성HTTPWebSocket
통신 방식요청-응답 (클라이언트 주도)양방향 (클라이언트/서버 주도)
연결 상태비연결(Stateless)지속 연결(Stateful)
데이터 전송단방향, 요청 시만 가능전이중(Full Duplex), 양방향 실시간 가능
오버헤드매 요청마다 헤더 포함, 상대적으로 높음최초 연결 후 최소 헤더, 낮은 오버헤드
사용 사례웹 페이지 로드, REST API실시간 채팅, 실시간 알림, 게임
보안HTTPS, 기본 보안 표준별도 WSS 적용 필요, 보안 상대적 취약

⏳ WebSocket 작동 원리

  1. 클라이언트가 HTTP 핸드셰이크 요청
  2. 서버가 HTTP → WebSocket 프로토콜로 업그레이드(스위칭)
  3. 지속적인 소켓 연결 형성, 전이중 통신 시작
  4. 클라이언트와 서버가 연결 종료 전까지 실시간 양방향 데이터 교환

0개의 댓글