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