티스토리 뷰

728x90
반응형

목차

     

    HTTP의 특징 중 하나는 비연결성이다.

     

    특정 사용자가 한 번 서버에 연결한 적이 있어도 서버는 해당 연결을 유지하지 않는다.

     

    이 때문에 클라이언트의 요청이 없는 실시간 알림이나 메시지 수신이 불가능한데, 이를 해결하는 방식에 대해 정리한다.

    Polling

     

    폴링은 간단하게 말하면 주기적으로 클라이언트가 서버로 요청을 보내는 방식이다.

     

    가장 간단한 방식이지만

     

    지속적인 HTTP 요청이 발생하기 때문에 리소스 낭비가 발생하며,

     

    진정한 의미의 실시간 연결이라 보기 힘들다는 단점이 존재한다.

     

    추가로 이를 부분적으로 해결하기 위해 긴 폴링(Long Polling)이라는 방식이 존재한다.

     

    이는 요청의 유지시간을 이벤트 발생 시까지 길게 유지하는 방법으로,

     

    어느 정도 실시간 연결이라 볼 구석이 있지만 이벤트 사이의 간격이 좁을 경우 기존 방식과

     

    차이가 없다는 단점이 있고, 다수의 사용자에게 이벤트가 발생할 경우 순간적으로 서버에 부담이 간다.

     

    WebSocket

     

    웹소켓은 클라이언트-서버상의 양방향 통신을 위한 HTTP와는 별개의 프로토콜이다.

     

    HTTP 요청을 이용한 Handshaking으로 시작되는 웹소켓 방식은 요청 없이도 양방향 연결을 유지하는 특성이 있어

     

    불필요한 리소스의 낭비를 막을 수 있다.

     

    게임, 채팅, 실시간 차트 등에 주로 사용된다.

     

    STOMP(Simple Text Oriented Messaging Protocol)

     

    STOMP는 직역하면 텍스트 기반 메시지 프로토콜로,

     

    WebSocket 위에서 동작하는 일종의 서브 프로토콜이다.

     

    클라이언트와 서버가 전송할 메시지의 유형, 형식, 내용을 정의하며 메시지의 헤더에 값을 줄 수 있어

     

    실시간 인증 처리 혹은 메시지를 보낸 사람과 받을 사람의 확인도 가능하다.

     

    기본적으로 Publisher/Subscriber 구조로 되어 있으며 

     

    채팅방 생성 > 채팅방 입장(구독) > 메시지 송수신의 메커니즘으로 진행된다.

     

    조금 구체적으로는 웹소켓 설정파일에 브로커와 STOMP 엔드포인트를 설정하는 식으로 구현이 시작된다.

     

    SSE(Server Side Events)

     

    SSE는 웹소켓과는 달리 최초의 연결 후 서버로부터 데이터를 단방향으로 받을 수만 있다.

     

    또한 별도의 프로토콜을 사용하지 않아 웹소켓 방식에 비해 가벼운 기능이라고 할 수 있다.

     

    서버 > 클라이언트로 흐르는 실시간, 단방향 통신이라는 점에서 알림 설정을 할 때 유용한 방식이다.

     

    연결에 문제가 있으면 자동으로 재연결을 시도하지만, 페이지를 닫아도 서버가 이를 감지할 수 없다는 단점이 있다.

     

    조금 구체적으로는 클라이언트에서 전달받은 토큰으로 해당 사용자에 대한 SseEmitter를 저장한 뒤,

     

    관련된 이벤트가 발생할 때마다 알림을 보낼 수 있도록 알림 메시지와 알림 전송 메서드를 배치하는 순으로 작업이 이루어진다.

    반응형
    댓글
    공지사항
    최근에 올라온 글
    최근에 달린 댓글
    Total
    Today
    Yesterday
    링크
    «   2024/09   »
    1 2 3 4 5 6 7
    8 9 10 11 12 13 14
    15 16 17 18 19 20 21
    22 23 24 25 26 27 28
    29 30
    글 보관함