🍎 iOS 푸시 알림(APNs) 구성 및 실무 정리
iOS에서 푸시 알림 기능을 구현할 때 반드시 알아야 할 것이 Apple Push Notification service(APNs)입니다. APNs는 Apple이 제공하는 공식 푸시 알림 서비스로, 서버에서 iOS 디바이스로 푸시 메시지를 전달하는 역할을 합니다. 앱이 백그라운드에 있거나 꺼져 있어도 알림을 받을 수 있도록 해주는 중요한 메커니즘입니다.
1. APNs 작동 방식
iOS 앱이 설치되고 실행되면, APNs에 등록 요청을 보내고 디바이스 토큰(Device Token)을 발급받습니다. 이 토큰은 iOS 기기를 식별하는 유일한 키이며, 서버는 이 토큰을 저장한 뒤 푸시 전송에 활용합니다.
푸시 전송 과정은 아래와 같습니다:
- 클라이언트 앱이 디바이스 토큰을 APNs로부터 수신
- 앱 서버에 디바이스 토큰 전달 및 저장
- 앱 서버에서 푸시 전송 조건이 만족되면, APNs에 HTTP/2 API 요청
- APNs가 해당 디바이스로 푸시 메시지 전송
2. 인증 방식
서버가 APNs에 푸시 메시지를 보내려면 신뢰할 수 있는 인증 수단이 필요합니다. 크게 두 가지 방식이 있으며, 실무에서는 프로젝트나 서버 구성에 따라 선택됩니다.
① 인증서 방식 (PEM/P12)
- Apple Developer Center에서 앱용 인증서를 발급
- 다운로드한 .p12 파일을
openssl
을 이용해 .pem 파일로 변환 - 해당 인증서를 서버에서 사용해 푸시 메시지 서명 및 전송
- 단점: 인증서 유효기간이 있어 갱신 필요, 개발용/배포용 인증서를 구분해야 함
② JWT 기반 Key 방식 (신규 방식)
- Apple Developer Center에서 Auth Key (.p8), Key ID, Team ID를 발급
- JWT 토큰을 생성해 Authorization Header에 포함하여 전송
- 장점: 유효기간이 없어 지속적으로 사용 가능, 설정 간편
3. 개발용 vs 운영용 구분
iOS의 푸시 인증서는 Sandbox(개발용)과 Production(운영용)이 명확하게 구분되어야 합니다. 이 두 환경을 혼용하면 특정 디바이스에서 푸시가 오지 않거나, 예기치 않은 오류가 발생할 수 있습니다.
항목 | 개발용(Sandbox) | 운영용(Production) |
---|---|---|
서버 주소 | api.sandbox.push.apple.com | api.push.apple.com |
디바이스 토큰 | 개발 빌드에서 발급 | 배포 빌드에서 발급 |
인증서 | 개발용 인증서(.pem) | 배포용 인증서(.pem) |
실제 운영 서버에서 개발용 인증서를 사용할 경우, 디바이스에서 배포 빌드 앱을 실행하고 있다면 푸시 수신이 불가능합니다. 이로 인해 사용자 일부는 푸시를 정상 수신하지만, 다수 사용자에게 푸시가 전달되지 않는 문제가 발생할 수 있습니다.
4. 실무에서 경험한 문제와 해결
운영 서버에 연결된 푸시 인증서가 개발용(sandbox) 인증서로 구성되어 있었으며, 이로 인해 일부 사용자에게 푸시가 누락되는 현상이 있었습니다. 인증서를 확인해보니 경로에 _dev.pem
으로 명시되어 있었고, 실제 운영용 인증서(_dist.pem
)가 주석 처리되어 있었습니다.
이후 운영 인증서 갱신한 뒤, 서버 설정을 수정하고 푸시 연동 테스트를 통해 정상 수신됨을 확인하였습니다.
5. 인증서 관리 팁
- 인증서 유효기간 확인 명령어:
openssl x509 -in apns_cert.pem -text -noout
- P12 → PEM 변환:
openssl pkcs12 -in cert.p12 -out cert.pem -clcerts -nodes
- 개발/운영 환경 구분 시, config에서
env()
함수로 환경에 따라 pem 경로를 분리 설정
6. 마무리
iOS 푸시 알림 시스템은 한 번 구성해 두면 오랜 기간 수정 없이 운용할 수 있지만, 인증서 만료, 운영/개발 환경 혼동, 잘못된 디바이스 토큰 등으로 인해 문제가 발생하기 쉽습니다.
푸시 관련 이슈가 생겼을 때는 다음을 체크하는 것이 좋습니다:
- 현재 서버에서 참조 중인 인증서가 운영용인지 확인
- 디바이스에서 받은 토큰이 개발용인지 운영용인지 확인
- 실제 APNs 요청과 응답 로그 확인 (status code, error message)
앞으로는 인증서 기반 방식보다 JWT 기반 인증 키 방식으로의 전환을 고려해보는 것도 좋은 선택입니다.
관련 내용
'개발 일지' 카테고리의 다른 글
📱 iOS 푸시 알림 오류 해결기 (APNs 인증서 문제) (0) | 2025.05.27 |
---|