EEltaCrew
블로그

데이터 보안 양식, 선언 0 인 앱이 적발되기 시작했다: 앱 21개 전수 감사와 CSV·API 로 고치는 법

게시 2026-09-16실측 기준 2026-09-15읽는 시간 약 3분elta · EltaCrew

사용자가 손으로 입력한 남의 전화번호도 구글 기준 "전화번호 수집" 이었습니다. 거부를 한 번 받고 앱 21개의 데이터 보안 선언을 소스와 대조하니 11개가 어긋나 있었고, 그중 3개는 선언이 아예 0 이었습니다. 광고만 쓰는 앱도 선언 0 이면 안 되는 이유와, 5단계 마법사 대신 CSV 와 API 로 고치는 방법을 씁니다.

거부 한 번

2026년 9월 초, 반려동물 앱 업데이트가 데이터 보안 양식 불일치로 거부됐습니다. 앱에 병원 전화번호를 적어 두는 칸이 있는데, 양식에 전화번호 수집을 선언하지 않았다는 이유였습니다. READ_PHONE_STATE 권한도 없고 기기 번호도 아니고 사용자가 손으로 입력한 남의 번호인데도, 구글 기준으로는 전화번호 수집입니다.

거부 상태에서는 다른 변경도 같이 묶입니다. 그 앱의 스토어 등록정보 수정 3건이 데이터 보안 거부 때문에 함께 제출 대기로 멈춰 있었습니다. 거부 통보를 받으면 게시 개요에서 대기 중인 변경사항 수를 반드시 확인해야 합니다.

21개 전수 감사

한 앱이 이러면 나머지도 의심해야 합니다. 앱 21개의 현재 선언을 콘솔에서 CSV 로 내보내고, 각 앱의 소스(권한, SDK, 입력 칸)와 대조했습니다. 어긋난 앱이 11개였습니다.

선언 0 인 3개는 광고만 쓰는 앱이라 "수집하는 게 없다"고 여겼던 것입니다. 틀렸습니다. AdMob SDK 는 대략적인 위치(IP), 앱 상호작용, 기기·기타 ID 를 수집하고 광고 목적으로 공유합니다. 광고만 쓰는 앱도 이 3종은 선언해야 합니다. 새 앱을 등록할 때 이 3종을 빼먹으면 선언 0 상태로 라이브됩니다.

실제로 감사 당일 저녁, 선언 0 이던 앱 하나에 「기기 또는 기타 ID 미선언」 정책 메일이 왔습니다. 기한은 2주였습니다. 적발은 시작됐고, 나머지 두 앱도 시간 문제입니다.

5단계 마법사 대신 CSV

콘솔의 데이터 보안 마법사는 5단계를 클릭으로 훑어야 하고 앱이 21개면 하루가 갑니다. 상단에 「CSV 파일로 내보내기 / CSV 에서 가져오기」 버튼이 있습니다.

  1. 내보내기: 현재 선언 전체가 CSV 로 나옵니다(앱 하나에 782행 × 5열). 이게 변경 전 백업이 됩니다.
  2. 필요한 행의 Response value 만 채웁니다.
  3. 가져오기 → 검토 → 저장 → 게시 개요에서 제출.

전화번호 하나를 추가하는 데 필요한 행은 5개입니다. 기존 이름(PSL_NAME) 행과 같은 패턴을 따라가면 됩니다.

PSL_DATA_TYPES_PERSONAL | PSL_PHONE | true
PSL_DATA_USAGE_RESPONSES:PSL_PHONE:PSL_DATA_USAGE_COLLECTION_AND_SHARING | PSL_DATA_USAGE_ONLY_COLLECTED | true
PSL_DATA_USAGE_RESPONSES:PSL_PHONE:PSL_DATA_USAGE_EPHEMERAL | | false
PSL_DATA_USAGE_RESPONSES:PSL_PHONE:DATA_USAGE_USER_CONTROL | PSL_DATA_USAGE_USER_CONTROL_OPTIONAL | true
PSL_DATA_USAGE_RESPONSES:PSL_PHONE:DATA_USAGE_COLLECTION_PURPOSE | PSL_APP_FUNCTIONALITY | true

CSV 는 BOM 없이 CRLF 로 저장합니다. 마법사 4단계 표의 버튼 라벨이 「미응답 … 질문」이어도 상태 셀이 「완료됨」이면 채워진 것입니다. 라벨에 속아 다시 채우지 않습니다.

쓰기는 API 로도 된다

처음엔 API 가 없다고 적었다가 정정했습니다. Android Publisher API 에 applications.dataSafety(packageName, body={"safetyLabels": <CSV 전체 문자열>}) 가 있습니다. 내보낸 CSV 를 고쳐서 이 엔드포인트로 보내면 콘솔에서 마법사를 열 필요가 없습니다. 내보내기 API 는 없어서 백업은 콘솔에서 받습니다. 21개 앱의 패치를 JSON 하나로 정리해 두고, 계정 사정으로 출시가 풀리는 시점에 전 앱 업데이트와 같이 적용할 예정입니다.

정리

Google Play데이터 보안정책Play Console

함께 읽기

R8 을 켜고 빌드는 통과했는데 앱이 깨졌다: 15개 앱에서 실제로 걸린 런타임 함정 5가지Play 의 2027년 코드 최적화 요건에 맞춰 앱 15개에 R8 을 켰습니다. 빌드는 전부 통과했지만 7개 중 2개가 실행 중에 깨졌습니다. Gson 역직렬화, getIdentifier 리소스 조회, Room _Impl, 디버그 빌드의 무효화 등 크래시 로그에 안 잡히는 유형을 정리합니다.판매자 계정 하나 켰다가 앱 21개 출시가 전부 막혔다: 한국 개인 개발자와 Play Console 「추가 정보 필요」후원용 인앱 상품을 테스트하려고 판매자 계정을 만든 직후, Play Console 이 사업자 등록 번호·통신판매업 신고번호를 요구하며 전 앱의 출시를 막았습니다. 상품을 지워도, 지급 계좌를 지워도 풀리지 않았고 지원팀의 최종 답은 "되돌릴 수 없다" 였습니다. 개인 개발자가 이 함정을 피하는 방법을 씁니다.Play 검색 1위 앱의 제목은 검색어 문자열 그대로다: 가운뎃점 하나가 검색 매칭을 통째로 죽인 이야기한국 Play 검색 결과 157개 검색어를 실측해 보니, 1위 앱은 예외 없이 제목에 그 검색어를 띄어쓰기까지 그대로 넣고 있었습니다. 우리 앱은 예쁘게 쓰려고 넣은 가운뎃점(·) 때문에 QR 검색어에 한 번도 안 걸리고 있었습니다. 13개 앱 제목을 바꾼 근거를 씁니다.