lifecarelog
브랜딩·마케팅

LocaleShots 설계기: 스크린샷 현지화를 비동기 잡으로 만든 이유

1인 브랜드가 앱스토어 스크린샷 현지화를 비동기 잡으로 돌리는 이유를 상태 전이와 재시도 설계 중심으로 정리했어요.

6분 읽기

스토어 스크린샷은 1인 브랜드가 가진 거의 유일한 영업사원이에요. 설명 문구보다 먼저 눈에 들어오고, 언어가 안 맞으면 그 자리에서 이탈해요. 그래서 템플릿 한 장에 언어별 문구를 얹어 이미지를 찍어내는 LocaleShots라는 작은 도구를 만들었어요. 처음엔 버튼을 누르면 이미지가 바로 떨어지는 동기 방식이었어요.

동기 방식이 운영 리듬을 깨뜨렸어요

언어 5개에 화면 6장이면 한 번에 30장이에요. 장마다 폰트를 불러오고 렌더하고 업로드까지 해야 하죠. 직접 동기로 돌려 보니 요청 하나가 길어지고, 중간에 한 장이 실패하면 나머지까지 전부 다시 눌러야 했어요. 브라우저를 켜 두고 기다리는 시간이 고스란히 콘텐츠 운영 시간이었던 거예요. 마케팅 자산 생성은 걸어 두고 다른 일을 하는 리듬이어야 해요.

상태 전이는 잡을 잘게 쪼개는 데서 시작했어요

잡 단위를 "언어 1개 × 화면 1장"으로 잡았어요. 30장이면 30개의 작은 잡이 생기고, 각 잡은 대기 → 렌더링 → 업로드 → 완료 네 단계를 지나요. 실패는 별도 상태로 빠져요. 적용해 봤더니 독일어 한 장이 글자 넘침으로 실패해도 나머지 29장은 완료로 남았고, 어떤 언어의 몇 번째 화면이 비었는지 한눈에 보였어요.

대기렌더링업로드완료 (실패 시 재시도 큐로 이동)

재시도는 실패 원인부터 갈랐어요

실패를 두 종류로 나눴어요. 업로드 타임아웃이나 순간적인 네트워크 끊김처럼 다시 하면 되는 일시적 실패, 그리고 폰트 누락이나 번역 문구 공백처럼 사람이 고쳐야 하는 영구적 실패예요. 일시적 실패만 최대 3회 재시도하고 간격은 30초, 2분, 8분으로 벌렸어요. 영구적 실패는 즉시 실패 상태로 보내고 사유를 함께 저장해요.

한 가지 더 챙긴 게 멱등성이에요. 같은 잡이 두 번 실행돼도 "언어+화면+버전"으로 만든 키 덕분에 같은 파일을 덮어쓸 뿐 이미지가 두 장 생기지 않아요. 테스트해 보면 업로드 도중 네트워크를 끊어도 다음 날 아침엔 완료로 바뀌어 있어요.

1인 브랜드 운영에서 달라진 것

밤에 큐에 넣어 두고 아침에 10분 정도 검수하는 리듬이 생겼어요. 실패가 조용히 사라지지 않으니 특정 언어 이미지만 빠진 채 스토어에 올라가는 사고도 막을 수 있고요. 템플릿 하나로 전 언어를 찍으니 브랜드 톤이 흔들리지 않는 것도 덤이에요.

라이프케어로그처럼 플랜비·플랜씨 같은 앱을 혼자 여러 개 운영하면 앱 수에 언어 수가 곱해져요. 그 곱이 커질수록 사람이 할 일은 "큐에 넣기"와 "실패 사유 읽기" 두 가지로 줄어들어야 버틸 수 있어요.

  • 작은 단위 잡
  • 실패 원인 분리
  • 멱등 업로드
  • 아침 검수 리듬

기술적으로 거창한 건 없어요. 상태 테이블 하나와 워커 하나예요. 그래도 돌려 보니 기다리지 않아도 되는 구조가 곧 콘텐츠 운영 체력이더라고요. 다음엔 실패 사유 분류를 더 세분화해서 검수 시간을 더 줄여 볼 생각이에요.

#앱스토어 스크린샷#현지화#비동기 잡#1인 브랜드 운영

라이프케어로그 서비스가 궁금하신가요?

AI 기반 건강·일정·재활 관리 앱을 직접 써보세요.

서비스 살펴보기

관련 글

댓글

아직 댓글이 없어요. 첫 댓글을 남겨주세요.