본문 바로가기
Etc

Socket과 SSE 적용

by SuperDT 2025. 4. 27.

리소스 효율, 네트워크 환경, 보안, 브라우저 호환성 등을 충분히 고려해 상황에 맞는 방식으로 적용

 

Socket (주로 WebSocket)

1) WebSocket은 클라이언트와 서버 간의 양방향 통신을 제공

2) 채팅, 게임, 실시간 알림 등 양방향 데이터 교환이 필요한 상황에 적합

3) 연결 유지와 리소스 관리

  • 클라이언트와 서버 간 연결을 지속적으로 유지하므로, 많은 연결이 발생하면 서버 리소스가 많이 소비될 수 있음. 이를 위해 연결 수 제한과 부하 분산을 고려
  • 동시에 연결된 클라이언트가 많을 경우, 서버는 비동기 처리와 함께 스케일링이 필요할 수 있음. 수평 스케일링을 고려해 로드 밸런서 설정을 포함하는 것이 좋음

4) 보안

  • WebSocket은 HTTPS와 함께 wss:// 프로토콜을 통해 보안을 강화할 수 있음. 데이터 암호화와 사용자 인증/권한 설정은 필수
  • 연결된 모든 클라이언트가 일정 수준의 보안 요건을 만족하는지 확인 필수

5) 프로토콜 및 데이터 형식

  • WebSocket은 클라이언트와 서버가 자유롭게 데이터를 주고받을 수 있으므로 데이터 형식을 JSON, Protobuf 등으로 통일하여 관리

6) 에러 처리와 재연결

  • 연결이 끊어졌을 때 재연결 로직이 필요. 특히, 클라이언트가 인터넷 연결 문제로 연결이 끊겼을 경우 자동 재연결 기능을 구현하는 것이 사용자 경험을 개선

 

SSE (Server-Sent Events)

 

1) 서버가 클라이언트로 단방향 데이터 전송을 할 때 적합

2) 클라이언트가 구독을 하면 서버에서 지속적으로 데이터를 보낼 수 있으므로, 알림, 주식 시세, 뉴스 피드 등 실시간 데이터 스트리밍에 자주 사용

3) 연결 및 데이터 흐름 관리

  • SSE는 HTTP 기반의 단방향 통신이므로, 클라이언트는 주기적으로 연결을 갱신하여 서버로부터 새로운 데이터 수신. 데이터 전송 빈도가 높을 경우, 연결 갱신 및 데이터 흐름 관리가 중요
  • 연결을 지속하기 위해 keep-alive 설정이 필요할 수 있으며, 서버가 클라이언트 연결을 끊지 않고 지속적으로 유지하도록 설계

4) 단방향 특성 이해

  • SSE는 서버에서 클라이언트로만 데이터를 전송할 수 있기 때문에, 클라이언트가 데이터를 서버로 보내야 할 필요가 있다면 별도의 HTTP 요청이 필요. 단방향성을 고려해 이벤트 설계

5) 브라우저 호환성과 네트워크 상태 관리

  • SSE는 대부분의 현대 브라우저에서 지원하지만, WebSocket에 비해 브라우저 호환성이 조금 낮을 수 있음
  • 네트워크 오류나 일시적인 연결 끊김이 발생했을 때, SSE는 기본적으로 자동 재연결을 시도. 재연결 주기를 서버에서 설정하여 빈번한 연결 시도를 방지하는 것이 좋음

6) 보안 및 캐싱

  • SSE 역시 HTTPS를 통해 데이터를 암호화할 수 있으며, 기본적인 HTTP 헤더를 사용하므로 프록시 서버나 캐시 서버가 데이터 흐름을 방해하지 않도록 캐시 방지 헤더를 설정하는 것이 좋음

'Etc' 카테고리의 다른 글

APNs p8키 Sandbox와 운영환경  (0) 2025.05.04
생산성을 높일 수 있는 AI 툴 종류  (0) 2025.04.27
운영중 테이블에 PK 추가 전략  (0) 2025.04.27
CTI란 ?  (0) 2025.04.20
[SQL] BULK INSERT 란  (0) 2025.04.20