Push Notification 기본 동작 방식

ollie·2023년 11월 29일
2
post-thumbnail

Intro 🐈

프로젝트에서 푸쉬 알림 기능을 추가하기 위해 푸쉬 알림의 기본 동작 방식이 어떻게 되는지 알아보고자 합니다.
'FCM 같은 도구를 사용하지 않는다면 어떻게 구현할 수 있을까요?'

📍 기본 동작 구조

기본_동작

1. Client는 VAPID를 이용해 Push Server에 Push Subscription을 요청합니다.

  • VAPID(Voluntray Application Server Identification) : 웹 푸쉬 알림을 사용하는 서비스 별 식별자
  • Push Server는 어느 클라이언트에게 데이터를 보낼지 식별이 필요합니다. 이때, 각 클라이언트 디바이스 별로 제공되는 Push Subscription 정보를 사용하여 푸시 메시지를 전송합니다.
  • ( 참고로 FCM의 경우, Push Subscription 대신 FCM Token을 사용해 디바이스 별로 클라이언트를 구분합니다. )

2. Push Server는 클라이언트에게 Push Subscription를 전달합니다.

3. Client는 Server에 Push Subscription 정보를 반환합니다.

4. Server는 Client의 Push Subscription 정보를 저장해두었다가 특정 이벤트가 발생하였을 경우, Push Server에 Push Subscription 정보와 함께 알림 요청을 보냅니다.

  • 이벤트 예시: 상품이 재입고 되었을 경우, 입고 예정 알림 설정을 한 고객에게 상품 입고 알림을 보낸다.

5. Push Server는 Server Push 기술을 이용하여 Client에게 알림을 보냅니다.

  • 이때 Server Push 기술은 HTTP/2 이상 포로토콜에서 제공하는 기술이기 때문에 HTTP/2 이상을 사용합니다.
  • WebSocket, SSE, HTTP/2 Push 등의 기술을 사용해 Server Push를 구현합니다.

1. Client는 Push Server에 VAPID를 요청합니다.

  • VAPID(Voluntray Application Server Identification): 웹 푸쉬 알림을 사용하는 서비스 별 식별자
  • Push Server는 어느 클라이언트에게 데이터를 보낼지 식별이 필요합니다. 이때, 각 클라이언트 별로 VAPID 라는 식별자를 할당하고, 후에 요청이 들어올 때 어느 클라이언트로 전달할지 VAPID를 확인하여 데이터를 전달합니다.

2. Push Server는 클라이언트에게 VAPID를 전달합니다.

3. Client는 Server에 VAPID를 반환합니다.

4. Server는 Client의 VAPID를 저장해두었다가 특정 이벤트가 발생하였을 경우, Push Server에 VAPID와 함께 알림 요청을 보냅니다.

  • 이벤트 예) 상품이 재입고 되었을 경우, 입고 예정 알림 설정을 한 고객에게 상품 입고 알림을 보낸다.

5. Push Server는 Server Push 기술을 이용하여 Client에게 알림을 보냅니다.

  • 이때 Server Push 기술은 HTTP/2 이상 포로토콜에서 제공하는 기술이기 때문에 HTTP/2 이상을 사용합니다.
  • WebSocket, SSE, HTTP/2 Push 등의 기술을 사용해 Server Push를 구현합니다.

서비스에 적용한다면? 🤔

서비스_적용


HTTP/2 프로토콜을 사용하는 이유 🤔

최근 HTTP/3 프로토콜도 사용이 가능하지만 기본적으로 웹 푸쉬 알림은 HTTP/2 프로토콜을 주로 사용합니다. 그렇다면 HTTP/2 를 사용하는 이유가 무엇인지 알아보도록 하겠습니다.

HTTP/2 특징

1. 요청에 대한 병렬 처리

  • 기존 HTTP/1에서는 요청 순서대로 응답하는 방식을 사용
  • 순서대로 응답하는 방식은 앞의 응답이 지연되면 뒤에 있는 응답들도 같이 지연되는 문제 존재
  • HTTP/2부터 요청 순서에 상관없이 응답하기 때문에 더 빠른 처리가 가능

2. Binary Protocol

  • 기존 HTTP/1.1에서는 텍스트 기반 통신
  • HTTP/2 부터는 전송 데이터를 바이너리로 바꿔 통신
  • 텍스트에서 바이너리를 사용하게 되면서 공간 덜 차지
  • 패킷의 크기가 줄어들어 더 빠르고 효율적으로 데이터 전송이 가능해짐

3. Server Push

  • 클라이언트에서 요청이 있어야 서버가 행동하는 일반적인 HTTP 통신 구조
    ( 단방향 통신 : client → server )
    • 클라이언트 요청 없이는 서버 행동이 불가능, 수동적이었던 서버
  • 클라이언트 요청 없이도 서버에서 스스로 행동 가능 (능동적인 서버)

결론

  • 알림 기능을 위한 필수 기능인 Server Push가 HTTP/2 부터 지원한다.
  • HTTP/2를 사용할 경우, 병렬 처리나 Binary Protocol을 이용하여 빠르고 효율적인 데이터 전송이 가능하다.

알림 기능이 동작하는 방식에 대해 그림을 그려 이해하는 시간을 가졌습니다.
다음에는 FCM을 이용해 알림 기능을 구현한 내용으로 찾아오겠습니다! 👐

[참고자료1]
[참고자료2]

profile
생각하는 개발자가 되겠습니다 💡

0개의 댓글