
왜 잠금화면이 문제인가
접종 관련 알림은 보통 세 갈래로 나갑니다. 앱 푸시, 병원 예약 시스템이 보내는 문자, 메신저 연동 알림입니다. 발송 주체가 서로 달라서 문구 정책이 한 곳에서 관리되지 않는 경우가 많습니다. 기획자는 '예약 확정'이라는 문구가 안전하다고 생각해도, 실제 제목에는 병원명과 질병명이 함께 들어가 있는 일이 자주 있습니다.
잠금화면 노출은 기기 소유자가 의도하지 않은 순간에 일어납니다. 책상에 놓인 기기, 충전 중인 기기, 가족이나 동료와 함께 쓰는 태블릿이 대표적입니다. 개인정보보호법상 건강에 관한 정보는 민감정보로 다루는 것이 일반적이므로, 법적 판단은 개인정보 담당 부서와 함께 확인하세요.
가상의 사례입니다. 어떤 예약 서비스가 「[○○내과] 인플루엔자 예방접종 예약이 확정되었습니다. 10월 22일 14시」라는 푸시를 보냈습니다. 사용자가 회의실에 기기를 올려 둔 채 자리를 비운 사이 알림이 잠금화면에 떠 있었고, 질병명과 병원명이 옆자리 동료에게 그대로 보였습니다. 문구 한 줄의 문제였지만, 설계 단계에서 알림 정책을 따로 정하지 않은 것이 원인이었습니다.

알림 문구 최소화: 서버에서 먼저 정합니다
원칙은 간단합니다. 잠금화면에 보이는 제목과 본문에는 질병명, 백신 종류, 병원명, 접종 차수를 넣지 않습니다. 대신 「예약 정보가 도착했습니다」처럼 행동을 유도하는 일반 문구를 쓰고, 상세 내용은 앱을 열고 인증한 뒤에만 보여 줍니다.
발송 전에 필드 단위로 점검하기
알림 페이로드를 제목(title), 본문(body), 부가 데이터(data), 딥링크 경로로 나눠 각각 확인하세요. 딥링크에 /vaccine/influenza/2차 같은 값이 있으면 알림 기록이나 기기 로그에 남을 수 있습니다. 경로에는 서버 내부의 불투명한 ID만 넣는 편이 안전합니다.
템플릿을 승인 목록으로 고정하기
문구를 기획, 마케팅, 개발이 각자 고치면 민감한 표현이 다시 들어옵니다. 알림 템플릿을 승인 목록으로 관리하고, 변수 치환 후 질병명 같은 항목이 남지 않는지 발송 전 검증 단계에서 막으세요. Android에서는 민감 알림을 비공개(VISIBILITY_PRIVATE)로 두고 publicVersion에 일반 문구를 넣으면 잠금화면 설정에 따라 일반 문구만 노출됩니다. iOS에서는 Notification Service Extension에서 본문을 치환하는 방식으로 같은 효과를 낼 수 있습니다.
미리보기 설정: Android와 iOS를 따로 봅니다
서버 문구를 고쳐도 기기 설정이 '내용 모두 표시'로 되어 있으면 앱이 보낸 내용이 그대로 나옵니다. 그래서 사용자 쪽 기본값도 함께 확인해야 합니다. 설정 위치는 Android는 '설정 › 알림' 아래 잠금화면 항목, iOS는 '설정 › 알림 › 미리보기 표시'입니다. 제조사별 UI에서는 메뉴 이름이 다를 수 있으니 기기마다 직접 확인하세요.
| 점검 항목 | Android | iOS |
|---|---|---|
| 잠금화면 기본 표시 | 민감한 알림 내용 숨김 등 옵션 확인, 제조사별 문구 상이 | 미리보기 표시: 항상 / 잠금 해제 시 / 없음 중 선택 |
| 앱별 제어 | 앱 알림 설정에서 잠금화면 표시 방식 개별 지정 | 앱 알림 설정에서 미리보기 개별 지정 |
| 앱이 할 수 있는 일 | 비공개 알림과 publicVersion으로 일반 문구 전달 | Notification Service Extension에서 본문 치환 |
| 실기기 확인 방법 | 기기를 잠그고 실제 알림을 받아 문구 기록 | 동일하게 잠금 상태에서 수신 후 기록 |
점검은 최소 두 대 이상에서 하세요. 최신 OS 기기와 이전 버전, 제조사 UI가 다른 기기를 섞어야 기본값 차이를 잡을 수 있습니다. 화면을 캡처해 두는 것보다 실제로 잠금 상태에서 알림을 받아 보고 문구를 기록하는 쪽이 정확합니다.

앱 내 재인증 조건
알림을 최소화해도 앱을 열면 접종 이력이 보입니다. 그래서 민감 화면의 진입 조건을 따로 둬야 합니다. 예를 들어 앱이 백그라운드로 간 뒤 일정 시간이 지나면 생체인증이나 PIN을 다시 요구하고, 접종 이력 상세 화면은 세션이 살아 있다는 이유만으로 열리지 않게 합니다. Android는 BiometricPrompt, iOS는 LocalAuthentication으로 구현하는 것이 일반적입니다.
화면 민감도로 재인증 기준 나누기
예약 목록은 세션만으로 열고, 접종 이력 상세와 증명서 발급은 재인증을 거치는 식으로 나눕니다. 백그라운드 복귀 허용 시간은 기획과 보안 담당이 함께 정하고, 그 값과 근거를 문서로 남기세요.
Android에서는 민감 화면에 FLAG_SECURE를 설정해 최근 앱 미리보기와 화면 캡처를 막을 수 있습니다. iOS에서는 앱 전환 시 보이는 스냅샷에서 민감 뷰를 가리는 처리를 넣는 것이 일반적입니다. 두 방식 모두 테스트 기기에서 실제 동작을 확인해야 합니다.
문자 메시지와 외부 채널
많은 병원이 예약 확인을 문자로 보냅니다. 이 경로는 앱 설정으로 통제할 수 없습니다. 문자 본문에는 최소한의 정보만 넣고, 상세 내용은 인증 후 확인하는 링크로 안내하세요. 링크 자체에 접종 정보가 드러나지 않도록 무작위 토큰을 쓰고, 유효 시간을 짧게 둡니다.
메신저 알림이나 이메일 연동도 같은 원칙을 적용합니다. 수신자 기기의 잠금화면은 우리가 제어할 수 없으므로, 질병명 같은 항목은 아예 발송하지 않는 것이 가장 확실합니다. 수신 동의 문서에 어떤 채널로 무엇이 발송되는지 명시되어 있는지도 함께 확인하세요.
바로 해 볼 순서
- 현재 발송 중인 알림 템플릿과 문자 본문을 모두 모아, 질병명·병원명·접종 차수가 들어 있는지 표로 정리합니다.
- 테스트 계정으로 예약 확정, 접종 완료, 취소 알림을 각각 발생시키고 Android와 iOS 잠금화면에서 실제 노출 문구를 기록합니다.
- 두 OS의 미리보기 기본값과 제조사 UI 차이를 확인하고, Android에는 비공개 버전을, iOS에는 본문 치환 로직을 적용합니다.
- 민감 화면 목록을 만들어 화면마다 재인증 조건과 백그라운드 복귀 시간을 정하고 구현합니다.
- 점검 결과를 ISMS-P 점검 기록으로 남기고, 릴리스 체크리스트에 알림 템플릿 재검증 항목을 추가합니다.
자주 묻는 질문
잠금화면 알림을 아예 끄게 하면 되지 않나요?
알림을 끄면 예약 변경이나 접종 완료 안내를 놓칠 수 있습니다. 기본값은 최소 노출로 두고, 사용자가 설정 화면에서 잠금화면 표시 여부를 고를 수 있게 하는 편이 현실적입니다.
사용자 기기 설정은 우리가 바꿀 수 없는데 책임이 있나요?
기기 설정은 사용자의 권한이지만, 서비스가 보내는 문구와 민감 화면을 보호하는 책임은 서비스에 있습니다. 기기 설정이 '내용 모두 표시'여도 앱이 질병명을 보내지 않으면 노출 위험은 크게 줄어듭니다.
예약 일정만 있는데도 점검이 필요한가요?
예약 일정이라도 병원명과 접종 종류가 함께 있으면 건강 정보로 볼 여지가 있습니다. 판단이 애매하면 개인정보 담당 부서와 함께 데이터 항목 기준으로 정리하세요.
정리
- 잠금화면 문구에는 질병명, 병원명, 접종 차수를 넣지 않습니다.
- Android와 iOS의 미리보기 기본값과 제조사 UI가 다르니 실기기로 확인합니다.
- 민감 화면은 재인증과 화면 보호로 한 번 더 막습니다.
오늘 할 일: 현재 발송 중인 알림 문구를 모두 모아, 질병명이 포함된 항목을 표로 정리하세요.
댓글