본문 바로가기
공부

FCM 디바이스 토큰의 최대 길이

by 워냥 2025. 9. 14.

0. 들어가며

Firebase Cloud Messaging(FCM)을 사용하여 푸시 알림 기능을 구현하다 보면 한 번쯤 마주하는 질문이 있다.

FCM에서 발급하는 디바이스 토큰을 저장할 DB 컬럼의 길이는 얼마로 설정해야 하지?"

 

당연해 보이는 질문이지만 놀랍게도 Firebase 공식 문서 어디에서도 명확한 답을 찾을 수는 없다.

FCM 토큰의 길이 정보와 현실적인 해결책에 대해 조사한 결과를 정리해 보았다.


1. 공식 스펙이 없는 이유

FCM 공식 문서에서 토큰의 길이 스펙이 없는 것은 미래에 있을 변경에 대해 유연성을 확보하기 위한 의도적인 정책이다.

공식 문서에는 어떠한 패턴도 명시되어 있지 않으므로, 유효한 모든 문자열이 허용됩니다. 형식은 미래에 변경될 수 있으니, 특정 패턴으로 유효성을 검사하지 마십시오. 그렇게 할 경우 향후 앱이 중단될 수 있습니다.

Ref. Stack Overflow: What is the maximum length of an FCM registration ID token?

 

Firebase는 FCM 인프라가 변경될 때 토큰의 형식이나 길이를 자유롭게 업데이트할 수 있는 가능성을 열어두었다.

개발자가 특정 길이나 형식에 의존하여 시스템을 설계하면, 미래의 FCM 업데이트 시 장애로 이어질 수 있는 가능성을 경고하는 셈이다.


2. 4KB 제한의 오해와 진실

가끔 FCM 토큰의 최대 길이가 4KB(4096바이트)라는 내용을 볼 수 있다.

이것은 FCM의 페이로드 제한을 토큰 자체의 길이 제한으로 오해한 것이다.

알림 메시지(Notification messages)는 사용자에게 보이는 미리 정의된 키 값들을 포함합니다. 반면, 데이터 메시지(Data messages)는 개발자가 직접 정의한 키-값 쌍으로만 구성됩니다. 알림 메시지에는 선택적으로 데이터 페이로드를 포함시킬 수 있습니다. 두 메시지 유형 모두 최대 페이로드(전송 데이터) 크기는 4096바이트입니다...

Ref. FCM Documentation: FCM 메시지 정보

 

Firebase 공식 문서에서 언급하고 있는 "메시지 페이로드의 최대 크기는 4096바이트"라는 규칙은 알림 제목, 내용, 데이터 등을 포함한 전체 메시지의 크기 제한을 의미한다.

토큰 하나만의 길이에 대한 규칙이 아니기 때문에 이를 기준으로 삼는 것은 근거가 충분하지 않다.


3. 실제 데이터로 추론하기

공식적인 가이드라인이 없는 상황에서 우리가 의지할 수 있는 것은 실제 운영 환경에서 관측된 데이터다.

개발자들이 커뮤니티에 공유한 정보를 취합해 보면 보통 150자 ~ 170자라는 것을 알 수 있다.

 

- 163자: https://stackoverflow.com/questions/39959417/what-is-the-maximum-length-of-an-fcm-registration-id-token

- 152자: https://www.b4x.com/android/forum/threads/firebase-message-token.116000/

 

이 때문인지 FCM을 다루는 몇몇 라이브러리에서도 데이터베이스 컬럼 타입으로 VARCHAR(255)를 선택하는 것을 볼 수 있다.

(Ref. django-fcm, fcm-django)

최근에는 300자가 넘는 토큰을 보았다는 의견도 있어 VARCHAR(500) 이상으로 설정할 수도 있을 것 같다.


4. 결론

내용을 정리하면 다음과 같다.

 

  1. Firebase는 의도적으로 토큰의 스펙을 고정하지 않아 공식적인 토큰 최대 길이는 없다.
  2. 일반적으로 관측되는 길이는 150~170자이다.
  3. 보통 DB 컬럼 길이는 VARCHAR(255) 또는 VARCHAR(500) 이상으로 한다.

 

FCM 디바이스 토큰의 최대 길이에 대한 명확한 스펙은 앞으로도 제공되지 않을 가능성이 높다.

중요한 것은 Firebase가 토큰 길이를 명시하지 않고 있다는 사실을 인지하고, 변화 가능성을 신경 쓰며 주기적으로 모니터링하는 자세라고 생각한다.

'공부' 카테고리의 다른 글

Push 알림이 도착하는 과정  (0) 2025.09.04
SQLAlchemy와 Session  (0) 2025.05.05
FastAPI에서 다형성 요청 처리하기  (0) 2025.04.19
DELETE Method와 멱등성  (0) 2025.04.16
FastAPI에서 StreamingResponse 활용 시 DB 세션 관리  (0) 2025.03.30

댓글