Server Sent Event란? (feat. Websocket과 차이점)

J·2025년 4월 6일
1

웹 공부

목록 보기
17/19
post-thumbnail

예전에 이름이랑 개념만 들어보고 지나쳤던 기술인데, 소켓 통신이랑 뭐가 다른걸까 궁금해져서 간단하게 데모 프로젝트를 만들어보았다.

Server Sent Event 란?

Server에서 Client로 보내는 단방향 스트리밍 기술이다. 소켓은 실시간으로 양방향 통신이 가능하지만 SSE는 Server -> Client 방향으로만 데이터를 보낼 수 있다.

SSE vs Websocket

항목 SSE WebSocket
기반 프로토콜 HTTP/1.1 HTTP 업그레이드 -> Websocket 프로토콜
통신 방향 단방향 (서버 -> 클라이언트) 양방향 (서버 <-> 클라이언트)
전송 형식 `text/event-stream` (UTF-8 텍스트 기반), 바이너리 불가능 바이너리, 텍스트 모두 가능
사용 예시 실시간 시계, 모니터링 데이터, 실시간 검색어 순위 등 실시간 채팅, 실시간 비디오 스트리밍, 멀티 게임 등

HTTP 업그레이드란?

HTTP/1.1에서 제공하는 header로, 서버에게 http에서 다른 프로토콜로 전환을 요청할 때 사용하는 header이다. 서버는 다른 프로토콜로 전환을 결정한 경우에는 101(Switching Protocols) status로 응답을 보낸다.

서버의 현재 시간을 띄우는 웹페이지 만들어보기

Websocket으로 만들어보기

server 코드 (express)
client 코드 (react)

실제로 Connection:Upgrade가 포함된 header로 request를 보내고 Connection:Upgrade가 header에 포함된 response를 받는것을 확인할 수 있다.

SSE로 만들어보기

server 코드 (express)
client 코드 (react)

profile
꾸준한 노력파 개발자의 이모저모

1개의 댓글

comment-user-thumbnail
2025년 4월 20일

아아 이걸 사용해서 서버의 시간을 가져올 수 있는 거군요!
그동안 websocket만 알고 있었는데,
'단방향 스트리밍' 이라는 것도 있는 지는 처음 알았습니다
텍스트 형식으로 서버에서 실시간으로 보내줘야하는 상황에서는
sse 라는 방식만으로도 충분하군요!
웹에서서 실시간 통신은 막연하게 어렵다고 생각했었는데,
html5 사양에 포함되어 이미 javascirpt api로도 쉽게 사용할 수 있었다는 것이
놀랍네요 그동안 이런것을 모르고 있었다니.. 오늘도 한가지 배워가네요!

답글 달기