Private deployment · Case study only

Multi-store commerce operations

iap-
multitool

서로 다른 앱 스토어의 인앱 상품과 지역 가격, 현지화 작업을 한 화면에서 검토하고 실행할 수 있도록 만든 독립 운영 도구입니다.

RoleProduct design · Full-stack implementation
FocusCross-store workflow · Bulk safety · Resilience
AvailabilityPrivate tool — no public demo

같은 상품을 다루지만
운영 방식은 달랐습니다.

스토어마다 상품 구조, 가격 체계와 현지화 흐름이 달라 동일한 출시 작업도 화면을 오가며 다시 확인해야 했습니다.

목표는 차이를 숨기는 것이 아니라, 각 스토어의 규칙을 유지하면서 공통 작업 순서와 안전 장치를 제공하는 것이었습니다.

두 스토어를 잇는
하나의 작업 흐름

01

불러오기

상품 상태를 점진적으로 불러오고, 이미 확인한 정보는 재사용해 대기와 중복 작업을 줄입니다.

02

비교하기

상품, 지역 가격과 현지화 정보를 같은 작업 문맥에서 확인하되 스토어별 차이는 명확히 유지합니다.

03

검토하기

일괄 변경은 바로 적용하지 않고 먼저 대상과 변경 내용을 확인할 수 있는 검토 단계를 거칩니다.

04

적용하기

작업은 중단과 재개를 고려해 처리하고, 일부 실패가 전체 진행 상황을 지우지 않도록 결과를 분리합니다.

운영자가 통제하는
상품 관리

Catalog

상품 생성과 조회

두 스토어의 상품을 전환해 확인하고 필요한 상품을 같은 도구 안에서 준비합니다.

Pricing

지역 가격 관리

기준 가격과 스토어별 가격 체계를 존중하면서 여러 판매 지역의 가격을 일관되게 검토합니다.

Localization

현지화 정보 정리

상품 표시 정보를 언어별로 관리해 반복 입력과 누락을 줄이는 작업 흐름을 제공합니다.

Bulk safety

미리보기 후 일괄 적용

대량 변경은 적용 전 검토, 진행 상태, 중단 가능한 처리를 통해 실수의 범위를 제한합니다.

스토어 차이를
어댑터 안에 격리했습니다.

브라우저의 공통 작업 모델과 각 스토어 API 사이에 변환 계층을 둡니다. 상품·가격·현지화 형식은 스토어별로 해석하되, 미리보기·실행·결과 기록은 하나의 안전한 파이프라인을 공유합니다.

합성 흐름스토어 API → 어댑터 → 공통 모델 → 검토 → 실행 결과
01 · sourceStore A / Store B상품, 지역 가격, 현지화와 상태를 각 플랫폼 규칙에 맞게 읽습니다.
02 · fetchfetchCatalogPage()커서와 페이지 단위를 따르고 변경 여부를 먼저 가볍게 확인합니다.
03 · adaptnormalizeProduct()가격 단위, 지역, 언어와 상태를 공통 작업 모델로 변환합니다.
04 · cache상품 캐시 · 동기화 메타안정 필드 해시와 상품 키로 변경분을 식별해 반복 조회를 줄입니다.
05 · previewvalidateDraft()CSV 또는 화면 입력을 검증해 생성·변경·제외 대상을 먼저 보여 줍니다.
06 · applyrecordItemResult()행별 성공과 실패를 보존하고 성공 항목만 캐시에 반영합니다.

Example 01 · Catalog

상품 목록을 새로 고친 경우

  1. 먼저 원격 상품 키 목록과 로컬 캐시를 비교합니다.
  2. 변화가 없으면 캐시를 즉시 반환합니다.
  3. 추가·삭제가 있으면 바뀐 상품만 묶음 단위로 가져옵니다.
  4. 전체 조회가 필요한 경우에도 페이지별 진행 상태를 유지합니다.

Example 02 · Pricing

합성 상품 B의 지역 가격을 만든 경우

  1. 표시 가격을 정밀한 최소 단위 값으로 정규화합니다.
  2. 스토어가 요구하는 판매 지역과 가격 체계를 확인합니다.
  3. 템플릿 또는 스토어 가격 지점을 각 지역 payload로 변환합니다.
  4. 누락 지역·통화·가격 단계 오류는 적용 전에 차단합니다.

Example 03 · Localization

여러 언어의 표시 정보를 준비한 경우

  1. 열 이름과 언어 태그를 공통 locale 모델로 해석합니다.
  2. 상품별 제목·설명 길이와 필수값을 검사합니다.
  3. 스토어 어댑터가 플랫폼별 현지화 요청으로 변환합니다.
  4. 언어별 결과를 나눠 표시해 누락 항목만 다시 처리합니다.

Example 04 · Bulk apply

합성 CSV 세 행을 적용한 경우

  1. 미리보기에서 유효·경고·제외 행을 먼저 확정합니다.
  2. 확정된 작업만 작은 묶음으로 실행합니다.
  3. 두 번째 행이 실패해도 첫 번째 성공 결과는 보존합니다.
  4. 세 번째 행을 계속 처리하고 재시도 대상을 별도로 반환합니다.

캐시는 빠르게,
스토어 규칙은 엄격하게

Catalog cache

로컬 상품 스냅샷

공통 상품 JSON과 안정 필드 해시를 로컬 DB에 저장합니다. 동적으로 바뀌는 메타데이터는 비교에서 제외해 불필요한 전체 갱신을 줄입니다.

Sync metadata

동기화 상태

스토어별 마지막 동기화와 보조 메타를 상품 본문과 분리합니다. 최초에는 전체 조회하고 이후에는 상품 키 차이로 증분 갱신을 판단합니다.

Upsert

항목 단위 반영

생성·수정 성공 항목은 즉시 upsert하고 원격에서 사라진 항목은 명시적으로 제거합니다. 부분 실패가 전체 캐시를 되돌리지 않습니다.

Schema guard

캐시 스키마 관리

시작 시 필요한 구조를 확인하고 오래된 캐시 형식은 재구성합니다. 캐시는 원격 스토어의 원본이 아니라 다시 만들 수 있는 읽기 가속 계층입니다.

상품 조회

두 스토어의 페이지네이션과 상세 조회 방식을 각각 따릅니다. 가벼운 키 비교 후 필요한 상세만 가져오고 요청 묶음 사이에 속도를 제어합니다.

cursor · pagination · incremental fetch
가격 변환

한 스토어는 지역별 통화와 최소 단위 가격, 다른 스토어는 판매 지역 기반 가격 지점을 사용합니다. 공통 UI 값은 어댑터에서 각 계약으로 변환합니다.

decimal normalization · region map · price point
현지화 반영

언어별 제목과 설명을 공통 모델로 검증한 뒤 플랫폼별 리소스로 나눠 요청합니다. 상품 생성과 현지화 실패를 같은 성공으로 취급하지 않습니다.

locale map · field validation · per-locale result
대량 작업

입력 파싱과 적용을 분리하고, 미리보기에서 만들어진 작업 계획만 실행합니다. 오류는 항목 단위로 수집해 나머지 작업을 계속할 수 있습니다.

parse · preview · bounded batch · result ledger

만들어진 변화

화면 전환 감소

스토어별 콘솔을 오가며 같은 상품을 다시 찾는 작업을 하나의 운영 흐름으로 모았습니다.

가격 운영의 일관성

지역 가격과 스토어별 규칙을 공통 검토 단계에서 비교해 누락 가능성을 낮췄습니다.

안전한 일괄 작업

미리보기와 적용을 분리해 대량 변경도 확인 가능한 작은 단계로 처리하게 했습니다.

회복 가능한 처리

느린 조회나 일부 실패가 전체 작업을 처음부터 다시 시작하게 하지 않도록 진행 결과를 보존했습니다.