SnapPress 2.0.1을 방금 심사에 제출했습니다. 이번 릴리스의 헤드라인은 새로운 기능이 아니라, 9개 언어에 걸친 App Store 메타데이터 전면 현지화와 그것을 유지하기 위한 기술적 배관입니다. 이 글은 그 배경 이야기입니다.
출발점
SnapPress는 2026년 3월에 출시했습니다. 메시지는 단순했습니다. WordPress에 사진을 한 장씩 30분 동안 올리는 짓을 그만두고, iPhone에서 곧장 미디어 라이브러리로 사진 20장을 10초 만에 보내자. 4월 말의 2.0 릴리스에서 프리미엄 티어, 평생 구매, 강화된 공유 익스텐션을 추가했습니다. 매출은 크지 않지만 실재했고, 대부분 일본 App Store에서 직접 구매한 일본인 WordPress 블로거였습니다.
예상 밖의 일
호주에서 두 건의 구매가 들어왔습니다. 광고 없음. 보도 없음. 아는 사람도 아니었습니다. 구매자들은 App Store 검색을 통해 스스로 SnapPress를 찾아냈습니다 — 지금 다시 보면 거의 현지화되어 있지 않았던 그 메타데이터를 통해서요.
그 순간 외부인의 시선으로 App Store Connect 대시보드를 다시 들여다봤습니다. 그리고 그날 남은 시간의 우선순위를 통째로 바꿔놓을 만한 것을 발견했습니다.
문제
App Store 부제목 필드 — 앱 이름 아래에 표시되는 30자짜리 줄, 검색 결과와 카테고리 탐색에 노출되는 그 자리 — 가 비어 있었습니다. 모든 로케일에서. App Store가 현지화 슬롯을 제공하는 9개 언어 전부에서요. 기존 사용자가 가장 많은 영어와 일본어 시장도 예외가 아니었습니다.
부제목은 App Store 검색 랭킹에서 가중치가 가장 높은 필드 중 하나입니다. Apple은 앱 이름에 준하는 인덱싱 가중치를 부여하고, 검색 사용자가 탭하기 전 가장 먼저 마주치는 보조 카피이기도 합니다. 비워둔다는 건 로케일당 30자의 키워드 부동산을 통째로 포기하는 것이고, 그게 9개 로케일에 곱해지고, 모든 의미 있는 검색 쿼리에 곱해진다는 뜻입니다.
키워드는 일부만 채워져 있었고 그마저도 영어와 일본어뿐, "bulk", "iPhone", "blogger" 같은 핵심 단어도 빠져 있었습니다. 설명도 영어와 일본어만. 프로모션 텍스트는 모든 로케일에서 공란. 모든 로케일에 빠짐없이 들어가 있던 유일한 항목은 — 아이러니하게도 — 이전에 한 번 작성해둔 릴리스 노트였습니다.
해결
일요일 오후 내내 작은 CLI 툴킷 두 개를 작성했습니다.
첫 번째는 App Store Connect API와 통신합니다. 모든 현지화의 현재 상태를 읽어오고, 새 앱 버전을 생성하고, appInfoLocalizations 엔드포인트로 부제목을 푸시하고, appStoreVersionLocalizations 엔드포인트로 키워드 / 설명 / 프로모션 텍스트 / 새로운 기능 / 지원 URL / 마케팅 URL을 푸시하고, 새로 아카이브한 빌드를 첨부합니다. 인증은 App Store Connect API 키 기반이라 사람이 중간에 끼어들 필요도, 흐름 도중에 2단계 인증이 끊어버릴 일도 없습니다.
두 번째는 Apple Search Ads Advanced API와 통신합니다. 같은 패턴입니다. ES256으로 서명한 JWT, OAuth 클라이언트 자격 증명 그랜트, X-AP-Context 헤더가 붙은 Bearer 토큰. 자격 증명은 1Password CLI를 통해 다루기 때문에 평문으로 디스크에 떨어지는 시크릿이 없습니다. 그 결과 "캠페인 만들기", "키워드 목록 조회", "어제자 리포트 가져오기"가 대시보드 클릭이 아니라 한 줄짜리 셸 명령이 됩니다.
9개 로케일 전체에 새 메타데이터를 푸시하는 데 걸린 총 실행 시간: 3분 미만. 신규 빌드의 바이너리 아카이브와 업로드까지 포함해도 약 10분. 2.0.1 릴리스 전체가 커맨드 라인에서 조립되고 제출되었습니다.
9개 언어로 들어간 것
30자 제한 안에 맞춘 새 부제목들:
- English: Bulk Upload to WordPress Media (영어: WordPress 미디어로 일괄 업로드)
- Japanese: WordPressに写真を一括アップロード (일본어: WordPress에 사진을 일괄 업로드)
- Spanish: Sube fotos a WordPress en masa (스페인어: WordPress에 사진을 대량으로 업로드)
- German: Foto-Upload für WordPress (독일어: WordPress용 사진 업로드)
- Portuguese (Brazil): Upload em massa para WordPress (브라질 포르투갈어: WordPress용 대량 업로드)
- French: Photos en masse vers WordPress (프랑스어: WordPress로 사진 대량 전송)
- Korean: 워드프레스 사진 일괄 업로드 (한국어: 워드프레스 사진 일괄 업로드)
- Italian: Foto in blocco su WordPress (이탈리아어: WordPress에 사진 일괄 업로드)
- Traditional Chinese: 批次上傳照片到 WordPress (번체 중국어: WordPress로 사진 일괄 업로드)
각 로케일에는 맞춤형 설명(영어와 유럽 언어는 약 1,400자, 일본어 / 한국어 / 중국어는 자연스럽게 압축됨), 시장별 검색 행태에 최적화한 100자 키워드 문자열, 현지 통화 가격을 인용한 프로모션 텍스트 블록, 다국어 출시를 알리는 '새로운 기능' 한 줄도 함께 들어갔습니다.
교훈
App Store용 앱을 만들고 있다면, 그리고 게시 중인 모든 로케일의 부제목 필드를 직접 확인해본 적이 없다면, 이 글을 그 알림으로 받아주세요. 확인하는 데 5분이면 충분하고, 비어 있는 부제목은 Apple이 낭비하도록 허락하는 가장 값싼 부동산입니다. 키워드, 프로모션 텍스트, 매 릴리스의 '새로운 기능' 문구도 마찬가지입니다.
또 하나의 교훈은, App Store Connect와 Apple Search Ads 둘 다 완전한 API를 제공하고 있고, 한 번만 인증 셋업을 끝내두면 웹 대시보드보다 운영이 압도적으로 빠르다는 것입니다. 1년에 몇 번 이상 릴리스를 한다면, API를 감싸는 100줄짜리 bash 스크립트가 릴리스마다 몇 시간을 절약해주고, 드롭다운 27개를 손으로 클릭할 때 슬그머니 끼어드는 '느리고 되돌리기는 가능한' 실수를 줄여줍니다.
다음에 할 일
Apple 심사는 24~48시간 정도 걸립니다. 2.0.1이 라이브가 되면, 1단계는 일본에서 작은 규모로 돌리는 Apple Search Ads 캠페인입니다. 월 예산 7,500엔, 설치당 비용 목표 약 250엔, "ワードプレス アプリ"와 "wordpress 写真 アップロード"부터 시작하는 일본어 키워드 10개. 목표는 규모가 아닙니다. 획득한 사용자당 실제 LTV와 ROAS 데이터를 얻어, 다음 예산 결정을 낙관이 아니라 숫자로 내리는 것입니다.
그 숫자가 잘 나오면, 같은 자동화 파이프라인이 캠페인을 미국으로, 그다음 ASO 트래픽이 유망해 보이는 두세 개 로케일로 확장합니다. 잘 나오지 않으면 예산을 멈추고, 스크린샷과 가격을 다시 들여다보고, 더 저렴한 입력값으로 실험을 계속합니다.
작은 제품을 혼자 운영하는 즐거운 부분은 이런 일을 하루 오후에 출시할 수 있다는 점입니다. 지루한 부분은 — 그리고 실제로 중요한 부분은 — 그다음 60일, 데이터가 들어오기 시작할 때 일어나는 일들입니다.