Web Socket과 PUB/SUB 모델

지노·2021년 11월 10일
0

Web Socket

HTTP vs Socket 통신

HTTP 통신

Client의 요청이 있을때만, 서버가 응답해서 정보를 전송하고 곧바로 연결을 끊는 방식
단방향 통신에 연결상태를 유지하지 않는 stateless 방식

실시간 데이터 통신보다는 필요한 경우에만 서버에 요청하여 사용할때 유리

Socket 통신

Client와 Server가 특정 port를 통해 연결을 유지하고 있어서, 실시간으로 양방향 통신하는 방식
양방향 통신에 연결상태를 유지하는 stateful 방식

실시간 스트리밍이나 실시간 채팅에 사용

Web Socket

  • HTTP 환경에서 전이중 통신(full duplex, 2-way communication)을 지원하기 위한 프로토콜
  • HTTP 프로토콜에서 Handshaking을 완료한 후, HTTP로 동작하지만 다른 방식으로 통신하다.
  • 프로토콜은 ws, wss를 사용
  • 포트는 HTTP(80), HTTPS(443)과 동일한 포트 사용

Handshake

Handshake 요청

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Protocol: v10.stomp, v11.stomp, my-team-custom
Sec-WebSocket-Version: 13
  • Connection: Upgrade - HTTP 사용 방식을 변경하자
  • Upgrade: websocket - WebSocket을 사용하자
  • Sec-WebSocket-Protocol: xxx, yyy, zzz - WebSocket을 쓰면서 이 중에서 protocol을 골라서 쓰자
  • Sec-WebSocket-Key: dfdfsefsf - 보안을 위한 요청 키

Handshake 응답

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
  • 101 Switching Protocols : Handshake 요청 내용을 기반으로 다음부터 WebSocket으로 통신할 수 있다.
  • Sec-WebSocket-Accept: 보안을 위한 응답 키 - base64.encode(Sec-WebSocket-Key.concat(GUID))

Web Server를 사용하는 경우

Hop-by-hop headers를 사용하는

  • Connection
  • Keep-Alive
  • Upgrade
    헤더들은 두개의 연속된 노드 사이의 커넥션에 적용되기 때문에 최종 목적 서버에 도달하기 전에 변경될 수가 있다.

그래서 web-server에서 다시 헤더 추가를 정의해주어야한다.

Pub/Sub

https://medium.com/frientrip/pub-sub-%EC%9E%98-%EC%95%8C%EA%B3%A0-%EC%93%B0%EC%9E%90-de9dc1b9f739

참고지식

HTTPS

  1. 서버는 공인 CA에게 서버 정보와 서버의 공개키를 제공하고 인증을 요청한다.
  2. 공인 CA는 서버 정보를 확인하고 공인 CA의 개인키로 서버 정보와 서버의 공개키를 암호화하여 사이트 SSL 인증서를 제작한다.
  3. 서버는 SSL 인증서를 web server를 통해 게시한다.
  4. 클라이언트는 서버로부터 SSL 인증서를 받는다.
  5. 클라이언트에서 갖고있던 공인 CA 공개키를 사용하여 복호화한다.
  6. 클라이언트에서 공인 CA의 공개키를 통해 복호화가 가능하면 해당 인증서가 유효한 인증서임이 보증되고 서버의 정보와 공개키를 얻는다.
  7. 클라이언트는 대칭키를 만들고 서버의 공개키로 암호화하여 서버로 전송한다.
  8. 서버는 서버의 개인키를 사용하여 복호화하고 서버와 클라이언트는 같은 대칭키를 가지고 통신을 할 수 있다.

Foward vs Redirect

JSP에서 현재 작업중인 페이지에서 다른 페이지로 이동하는 두가지 방식의 페이지 전환 기능

profile
Spring Framework를 이용한 웹 개발과 AWS 서비스, Container를 사용한 CI/CD 인프라에 관심이 있습니다.

0개의 댓글