레이블이 Android인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Android인 게시물을 표시합니다. 모든 게시물 표시

2026년 7월 17일 금요일

FCM 푸시 토큰의 갱신과 무효화를 관리하는 방법

발급된 토큰을 서버에 저장하고 갱신 시각과 실패 응답을 이용해 오래된 등록을 정리하는 수명 주기를 설명합니다. 이 주제를 이해할 때 첫 기준은 ‘현재 등록값’입니다. 앱 시작과 onNewToken에서 얻은 값을 서버에 올리되 사용자 계정 하나에 토큰 하나만 있다고 가정하지 않습니다. 한 사용자가 여러 설치를 가질 수 있습니다.

이 글의 범위
실제 경험이나 측정 결과를 가정하지 않고, 공식 문서로 확인 가능한 개념과 적용 순서를 일반 가이드로 설명합니다. 제품 버전과 서비스 정책은 바뀔 수 있으므로 적용 전 연결된 공식 문서를 다시 확인하세요.

먼저 구분할 핵심

FCM 등록 정보는 발급되는 순간보다 그 뒤의 갱신, 계정 연결, 실패 분류가 중요합니다. ‘현재 등록값’에서 시작해 ‘갱신 시각’와의 경계를 정하면 구현할 범위와 실패했을 때 확인할 지점을 구분하기 쉬워집니다.

FCM 푸시 토큰의 갱신과 무효화를 관리하는 방법 핵심 판단 흐름 설명용 개념도

그림 1. FCM 푸시 토큰의 갱신과 무효화를 관리하는 방법의 핵심 판단 순서를 정리한 설명용 개념도입니다. 실제 서비스 화면, 운영 로그 또는 측정 결과가 아닙니다.

토큰을 한 번 쓰는 값이 아닌 상태로 관리하기

현재 등록값

앱 시작과 onNewToken에서 얻은 값을 서버에 올리되 사용자 계정 하나에 토큰 하나만 있다고 가정하지 않습니다. 한 사용자가 여러 설치를 가질 수 있습니다.

갱신 시각

토큰 또는 설치 식별자를 저장할 때 마지막 확인 시각을 함께 기록합니다. 값이 같아도 앱이 정상적으로 다시 연결됐다는 신호가 됩니다.

계정 연결

로그인·로그아웃 시 설치 등록과 사용자 대상 발송의 관계를 갱신합니다. 로그아웃한 기기에 이전 사용자의 민감한 알림이 가지 않게 합니다.

실패 응답

서버 발송 결과에서 등록되지 않은 토큰으로 확인되면 비활성화하거나 삭제합니다. 모든 실패를 같은 재시도 큐로 보내지 않습니다.

장기 미사용

오래 확인되지 않은 등록은 별도 정책으로 정리하고 발송 대상과 성과 지표에서 분리합니다. 기준은 서비스의 사용 주기에 맞춥니다.

클라이언트와 서버를 연결하는 순서

  1. 설치 단위 등록 레코드에 사용자, 현재 값, 플랫폼, 갱신 시각을 둡니다.
  2. 앱 시작과 토큰 변경 콜백에서 최신 값을 멱등하게 업로드합니다.
  3. 로그인·로그아웃 때 사용자 연결만 안전하게 갱신합니다.
  4. 발송 결과를 성공·일시 실패·영구 무효로 분류합니다.
  5. 장기 미사용과 영구 무효 등록을 정기적으로 정리합니다.

푸시 누락을 키우는 운영 패턴

  • 최초 설치 때 받은 값만 영구 저장하기
  • 사용자 ID를 토큰의 유일한 키로 사용하기
  • 모든 발송 실패를 무제한 재시도하기
  • 디버그 로그에 전체 토큰과 사용자 정보를 그대로 남기기

적용 전 마지막 점검

확인 항목질문
첫 기준: 현재 등록값변경 전에 전제와 목적을 확인했는가?
분리 대상: 갱신 시각다른 책임과 섞이지 않게 경계를 정했는가?
피할 패턴: 최초 설치 때 받은 값만 영구 저장하기본문에서 경고한 패턴이 남아 있지 않은가?
오류와 복구정상 경로뿐 아니라 실패와 되돌리기도 확인했는가?

정리

FCM 등록 정보는 발급되는 순간보다 그 뒤의 갱신, 계정 연결, 실패 분류가 중요합니다. 설치 단위 레코드와 마지막 확인 시각을 관리하면 오래된 대상을 줄이고 실제 전달 상태를 더 정확히 해석할 수 있습니다.


참고한 공식 문서

WorkManager와 앱 내부 타이머를 구분해서 쓰는 방법

즉시성 중심의 화면 타이머와 조건 충족 후 보장 실행되는 지속 작업을 목적에 맞게 나누는 기준을 설명합니다. 여러 선택지를 한 번에 적용하기보다 ‘앱 내부 타이머’부터 확인합니다. 화면의 카운트다운이나 짧은 폴링처럼 프로세스가 살아 있는 동안의 즉시성이 목적입니다. 앱이 중단되면 계속 실행된다고 가정하지 않습니다.

이 글의 범위
실제 경험이나 측정 결과를 가정하지 않고, 공식 문서로 확인 가능한 개념과 적용 순서를 일반 가이드로 설명합니다. 제품 버전과 서비스 정책은 바뀔 수 있으므로 적용 전 연결된 공식 문서를 다시 확인하세요.

처음 확인할 경계

앱 타이머는 살아 있는 화면의 시간 흐름을, WorkManager는 제약 속에서도 완료해야 하는 일을 다룹니다. ‘앱 내부 타이머’에서 시작해 ‘WorkManager’와의 경계를 정하면 구현할 범위와 실패했을 때 확인할 지점을 구분하기 쉬워집니다.

운영 단계에서 자주 생기는 오해

  • setInterval이 백그라운드에서도 같은 주기로 실행된다고 믿기
  • WorkManager로 초 단위 알람을 구현하기
  • 재시도마다 같은 데이터를 중복 전송하기
  • 작업 성공과 서버가 실제 반영한 결과를 구분하지 않기

WorkManager와 앱 내부 타이머를 구분해서 쓰는 방법 핵심 판단 흐름 설명용 개념도

그림 1. WorkManager와 앱 내부 타이머를 구분해서 쓰는 방법의 핵심 판단 순서를 정리한 설명용 개념도입니다. 실제 서비스 화면, 운영 로그 또는 측정 결과가 아닙니다.

작업 방식을 선택하는 순서

  1. 작업이 화면과 함께 끝나도 되는지 판단합니다.
  2. 정확한 시각과 최종 완료 중 무엇이 더 중요한지 구분합니다.
  3. 필요한 네트워크·전원 조건과 중복 실행 비용을 적습니다.
  4. 재실행 가능한 단위로 쪼개고 고유 작업 이름을 정합니다.
  5. 프로세스 종료와 네트워크 전환을 포함해 테스트합니다.

실행 목적부터 구분하는 기준

앱 내부 타이머

화면의 카운트다운이나 짧은 폴링처럼 프로세스가 살아 있는 동안의 즉시성이 목적입니다. 앱이 중단되면 계속 실행된다고 가정하지 않습니다.

WorkManager

앱이 종료되거나 기기가 재시작돼도 조건이 충족될 때 완료해야 하는 지속 작업에 사용합니다. 실행 시각의 초 단위 정확성을 보장하는 도구는 아닙니다.

제약 조건

네트워크, 충전, 저장 공간 같은 조건을 선언해 불가능한 상황에서 반복 실패하지 않게 합니다.

멱등성과 재시도

작업이 다시 실행돼도 같은 결과가 되게 설계하고 일시 오류에만 제한된 백오프를 적용합니다.

관찰 가능한 결과

작업 ID와 상태, 마지막 오류를 기록해 UI와 운영 로그에서 완료·실패·취소를 구분합니다.

실제 적용과 설명을 대조하기

확인 항목질문
첫 기준: 앱 내부 타이머변경 전에 전제와 목적을 확인했는가?
분리 대상: WorkManager다른 책임과 섞이지 않게 경계를 정했는가?
피할 패턴: setInterval이 백그라운드에서도 같은 주기로 실행된다고 믿기본문에서 경고한 패턴이 남아 있지 않은가?
오류와 복구정상 경로뿐 아니라 실패와 되돌리기도 확인했는가?

적용 순서 요약

앱 타이머는 살아 있는 화면의 시간 흐름을, WorkManager는 제약 속에서도 완료해야 하는 일을 다룹니다. 실행 정확도와 완료 보장, 재시도 비용을 먼저 구분하면 적절한 도구를 선택하고 실패를 추적하기 쉬워집니다.


참고한 공식 문서

화면 꺼짐 방지와 Foreground Service를 구분하는 기준

Keep Screen On과 WakeLock, Foreground Service가 해결하는 문제가 어떻게 다른지 Android 운영 기준으로 설명합니다. 복잡한 기능 이름보다 먼저 확인할 것은 ‘Keep Screen On’입니다. 사용자가 화면을 보며 작업하는 동안 디스플레이가 꺼지지 않게 하는 UI 요구입니다. 필요한 화면의 생명주기에 맞춰 플래그를 설정하고 해제합니다.

이 글의 범위
실제 경험이나 측정 결과를 가정하지 않고, 공식 문서로 확인 가능한 개념과 적용 순서를 일반 가이드로 설명합니다. 제품 버전과 서비스 정책은 바뀔 수 있으므로 적용 전 연결된 공식 문서를 다시 확인하세요.

판단의 출발점

Keep Screen On, WakeLock, Foreground Service는 이름이 비슷한 지속성 문제를 다루지만 보호하는 대상과 정책이 다릅니다. ‘Keep Screen On’에서 시작해 ‘WakeLock’와의 경계를 정하면 구현할 범위와 실패했을 때 확인할 지점을 구분하기 쉬워집니다.

세 기능이 해결하는 서로 다른 문제

Keep Screen On

사용자가 화면을 보며 작업하는 동안 디스플레이가 꺼지지 않게 하는 UI 요구입니다. 필요한 화면의 생명주기에 맞춰 플래그를 설정하고 해제합니다.

WakeLock

화면과 별개로 CPU 등 특정 전원 상태를 잠시 유지하는 저수준 수단입니다. 범위를 최소화하고 반드시 해제 경로를 둬야 합니다.

Foreground Service

사용자가 인지해야 하는 장기 실행 작업을 알림과 함께 수행하는 서비스입니다. 플랫폼이 허용한 유형과 시작 조건을 따라야 합니다.

WorkManager

즉시 계속 실행보다 조건이 충족될 때 결국 끝나야 하는 지속 작업에 적합합니다. 재시도와 시스템 스케줄링을 활용합니다.

사용자 통제

장기 작업은 진행 상태와 중지 방법을 제공하고 배터리 영향이 기능 가치에 비례하는지 검토해야 합니다.

화면 꺼짐 방지와 Foreground Service를 구분하는 기준 핵심 판단 흐름 설명용 개념도

그림 1. 화면 꺼짐 방지와 Foreground Service를 구분하는 기준의 핵심 판단 순서를 정리한 설명용 개념도입니다. 실제 서비스 화면, 운영 로그 또는 측정 결과가 아닙니다.

같은 해결책처럼 쓰면 생기는 문제

  • 화면 꺼짐 방지를 위해 Foreground Service를 시작하기
  • 서비스가 있으면 CPU가 항상 깨어 있다고 가정하기
  • WakeLock을 획득하고 예외 경로에서 해제하지 않기
  • 사용자가 모르는 장기 작업을 알림 없이 지속하기

필요한 API를 고르는 질문 순서

  1. 사용자가 지금 화면을 보고 있어야 하는 기능인지 묻습니다.
  2. 화면이 없어도 즉시 계속 실행돼야 하는 사용자 인지 작업인지 확인합니다.
  3. 지연돼도 결국 완료되면 되는 작업은 WorkManager를 검토합니다.
  4. WakeLock이 필요하면 가장 짧은 범위와 타임아웃을 정의합니다.
  5. 화면 종료·앱 전환·재부팅·배터리 제한 조건에서 실제 동작을 테스트합니다.

운영 전 빠른 점검

확인 항목질문
첫 기준: Keep Screen On변경 전에 전제와 목적을 확인했는가?
분리 대상: WakeLock다른 책임과 섞이지 않게 경계를 정했는가?
피할 패턴: 화면 꺼짐 방지를 위해 Foreground Service를 시작하기본문에서 경고한 패턴이 남아 있지 않은가?
오류와 복구정상 경로뿐 아니라 실패와 되돌리기도 확인했는가?

마무리

Keep Screen On, WakeLock, Foreground Service는 이름이 비슷한 지속성 문제를 다루지만 보호하는 대상과 정책이 다릅니다. 사용자 화면, 즉시 실행, 완료 보장 중 무엇이 필요한지 먼저 정하면 과도한 배터리 사용과 정책 위험을 줄일 수 있습니다.


참고한 공식 문서

데이터 디렉터리 페이지를 저가치 콘텐츠로 만들지 않는 법

시설명과 주소 나열을 넘어 선택 기준과 비교, 데이터 한계와 확인일을 제공하는 리포트형 편집 방법을 설명합니다. 설정부터 시작하기 전에 ‘명확한 질문’을 분리해서 봐야 합니다. 지역 시설 전체를 보여 주는 이유를 사용자의 질문으로 바꿉니다. 예를...