TIL 82일_2차

Moon-Tree·2023년 4월 27일
0

◆ 통신 종류

1. 일반 HTTP 요청

  • HTML을 포함한 웹 페이지의 구조와 내용을 전송하는 가장 기본적인 방식
    (장점)
  • HTML 구조를 200% 활용 가능하다.
  • ex) form, a, script, link, img
  • 페이지 이동(입력창 초기화 등)으로 인해 기존 페이지를 정리하지 않아도 된다.
    (단점)
  • 페이지 전환이 발생한다.
  • 하나의 페이지에서 여러 기능을 구현하기 어렵다

2. 비동기 HTTP 요청 - jquery ajax, axios 방식

  • 브라우저와 서버 간의 데이터 교환 방식 중 하나로, 페이지 이동 없이 백그라운드에서 데이터를 주고받는 방식
    (장점)
  • 페이지 전환이 없다.
  • 사용자의 작업을 방해하지 않는다.
    (단점)
  • 일반 요청보다 잦은 요청이 발생한다.
  • 순서를 보장하기 어렵다.
  • 서버의 무리가 심하다.

3. 풀링(Pulling) 방식

  • 주기적으로 서버에 비동기 통신을 요청하고 데이터를 받아와서 화면을 갱신한다.
  • 주기가 짧으면 실시간처럼 보이지만 서버에 부담이 크다는 단점이 있다.
  • setInterval 함수 등을 사용한다.

4. 실시간 웹소켓(websocket) 요청

  • 서버와 클라이언트 간 양방향 통신을 지원하는 프로토콜인 웹소켓을 사용하여 실시간성을 구현하는 방식
  • 전화처럼 쌍방향 실시간 연결을 수립하도록 구현
  • 일반적인 HTTP와는 다른 통신 방식이므로, 서버에 가장 부담이 크다는 단점이 있다.
    - ex) 채팅, 실시간 알림, ...

(장점)

  • 실시간으로 데이터를 주고받기 때문에 채팅, 실시간 알림 등 실시간성이 중요한 서비스에 적합하다.
    (단점)
  • 서버에 상당한 무리가 간다.
  • 일반 HTTP와 다른 통신방식(WS/WSS)
  • spring-websocket / sockjs (웹소켓을 편하게 만들어주는 기술) / socket.io : node.js가 기존 값으로 사용한다.
    stomp

5. 실시간 메세지 이벤트

  • 서버에서 클라이언트로 메시지를 일방적으로 보내는 방식
    (장점)
  • 클라이언트의 요청 없이 서버에서 클라이언트로 데이터를 보내기 때문에 클라이언트 측에서 구현하기가 더 쉽습니다.
    (단점)
  • 양방향 통신을 지원하지 않기 때문에 클라이언트에서 서버로 메시지를 보낼 수 없습니다.

◆ 웹소켓(WebSocket)

  • 웹소켓은 실시간 양방향 통신을 지원하는 기술입니다.
    이를 이용하여 채팅이나 실시간 알림 등을 구현할 수 있습니다.
  • 컨트롤러로 접속해서 HTTP 연결이 이루어지고 난 뒤 WS 연결 생성
  • 페이지를 이탈 할 경우 자동으로 WS 연결 종료(수동 종료도 가능)
  • 아무나 서버가 될 수는 없으므로 자격 획득을 위해 상속을 받는다.
    - interface WebSocketHandler
    - class TextWebSocketHandler(텍스트 전송), BinaryWebSocketHandler(파일 전송)
  • 스프링에 등록한다.(Configuration 또는 @Service)
  • 필요한 메서드를 재정의하여 원하는 코드를 작성
    - afterConnectionEstablished : 연결이 이루어진 경우 자동으로 실행
    - WebSocketSession : 웹소켓 연결된 대상의 정보(HttpSession이 아니다.)
    - afterConnectionClosed : 연결이 해제된 경우 자동으로 실행
    - WebSocketSession : 웹소켓 연결된 대상의 정보(HttpSession이 아니다.)
    - CloseStatus : 종료 사유가 저장되어 있다.

웹소켓(WebSocket) 추가적인 설명

Spring에서는 WebSocket을 처리할 수 있는 WebSocketHandler를 제공합니다. WebSocketHandler를 상속받아 필요한 메소드를 오버라이드한 뒤, Spring에 등록하면 WebSocket 통신을 구현할 수 있습니다.

WebSocketHandler는 WebSocket 연결을 처리하기 위한 인터페이스입니다. TextWebSocketHandler와 BinaryWebSocketHandler는 WebSocketHandler 인터페이스를 구현한 클래스로, 각각 텍스트와 파일 전송을 담당합니다.

Spring에서 WebSocketHandler를 등록하는 방법은 Configuration 파일이나 @Service 어노테이션을 이용할 수 있습니다. 등록한 WebSocketHandler를 이용하여 WebSocketSession 정보를 받아와서 실시간 통신을 구현할 수 있습니다.

WebSocketSession은 WebSocket을 통해 연결된 상대방에 대한 정보를 담고 있습니다. HttpSession과는 다르게 WebSocket 통신을 위한 세션 정보입니다. WebSocket 연결이 성공적으로 이루어지면 afterConnectionEstablished 메소드가 자동으로 실행되며, WebSocket 연결이 종료될 때는 afterConnectionClosed 메소드가 자동으로 실행됩니다. 이때, WebSocketSession 정보와 함께 연결 종료 이유인 CloseStatus를 전달합니다.

WebSocket 연결은 HTTP 연결 후에 생성되며, 페이지를 떠나면 WebSocket 연결도 자동으로 종료됩니다. 또한, 수동으로 WebSocket 연결을 종료할 수도 있습니다.

profile
Backend Developer

0개의 댓글