모두의포트폴리오
PE · FDE 직군을 위한 포트폴리오 밀키트
예전 판입니다 (1판)이 문서는 2026-08-02 에 새 판으로 개정됐습니다. 1주차에 함께 있던 추천 엔진과 카피 생성을 걷어내고, 사람이 화면에서 실험 겹침을 해소해야만 시작 버튼이 열리는 편성 화면 하나로 다시 썼습니다.최신 판 보기 →
경력화이트큐브 · [챌린저스] 프로덕트 엔지니어 (엔지니어링 기반 제품 성장)

현지 시장 데이터에서 잘 팔릴 상품과 카피를 근거와 함께 추천하는 도구

화이트큐브 공고에서 뽑은 세 가지 시그널.

화이트큐브는 일본·미국 시장의 뷰티 커머스 매출 데이터를 가진 곳이라, 현지 시장 데이터로 상품·카피를 추천하는 이 도구는 그 현지 판매 데이터가 있어야 추천을 검증한다.

01

폭발적 사업 확장

'습관앱에서 뷰티득템앱으로 폭발적 확장'. 어떤 상품이 현지에서 통하는지 데이터로 짚는 게 확장의 토대.

뷰티사업 확장매출
02

글로벌(일본/미국)

'일본 7개월 만에 월매출 7억'. 현지화 추천·카피가 글로벌 성장의 1주 단위.

글로벌일본미국
03

속도·실험 문화

'속도와 실험, 실패를 용인하는 문화'. 추천 가설을 빠르게 검증하는 도구가 잘 맞음.

속도실험프로덕트

포트폴리오 요약

현지(일본) 시장의 상품·리뷰 데이터를 받아 잘 팔릴 상품을 근거와 함께 추천하고, 현지화 카피를 제안하는 1주 포트폴리오.

고객 정의

화이트큐브 글로벌 PE. 현지에서 무엇이 통할지 사람이 감으로 고르던 일을, 데이터 추천 + 현지화 카피 도구로 옮기고 싶은 사람.

고민 지점

상품에 현지 리뷰·가격을 붙이면, 도구가 (a) 현지에서 잘 팔릴 상품을 근거와 함께 추천하고 (b) 현지화 카피를 제안한다.

주차별 일정

1주차여기까지로 완성

현지 상품 추천 + 카피 제안

현지 시장의 상품·리뷰 데이터를 받아 잘 팔릴 상품을 근거와 함께 추천하고 현지화 카피를 제안하는 동작하는 도구.

  1. 1일 · 현지 상품·리뷰 스키마 설계 + 추천 점수·현지화 카피 규칙 정의
  2. 2-3일 · 시장 데이터 ingest(Python) + 추천 점수 + 리뷰 임베딩 + Zod 검증
  3. 4일 · 현지 상품 추천 + 리뷰 근거 + 현지화 카피 생성
  4. 5일 · 추천 대시보드(React)추천 상품·근거·카피 한 화면
  5. 6일 · 일부러 만든 결측·미등록·표기 흔들림 상품 30종으로 추천이 안 깨지는지 점검 + 5% 사람 확인
  6. 7일 · 7일치 시연 영상 + 직접 만든 정답과 비교한 기준선여기까지가 1주차 완성품
2주차선택 성장

추천 적합도 검증

추천 상품의 실제 판매·전환으로 적합도를 재고, 카피 채택률을 보여주는 대시보드.

  1. 8-9일 · 추천 상품의 실제 판매·전환으로 적합도 측정 + 카피 채택률
  2. 10-11일 · 추천 가중치 튜닝 + 현지화 카피 톤 점검
3주차선택 성장

미국 시장 확장

같은 추천 코어를 미국 시장 데이터로 확장하고 카피를 다국어화하는 단계.

  1. 12-14일 · 미국 시장 데이터로 추천 코어 확장 + 카피 다국어화
  2. 15일 · 미국 확장 시연 + 3주 통합 영상

데모 · 측정 지표

01

현지 시장 데이터를 넣으면 추천 상품과 현지화 카피가 근거와 함께 나오는 걸 시연한다

02

추천 근거로 인용한 리뷰가 실제 리뷰에 존재하는 비율 100%

측정: 인용 일치 규칙, 표본: 추천 200건

03

일부러 만든 결측·미등록·표기 흔들림 상품 30종을 넣어도 추천이 멈추지 않고 처리되는 걸 시연한다

정직 경계선

진짜 성능 검증은 여기서 멈춘다

위 수치는 더미데이터 자가채점이며, 실제 추천 적합도는 화이트큐브 실데이터 + 실 검수자가 있어야 측정 가능. 이 포트폴리오는 그 검증을 바로 돌릴 수 있는 상태까지 만든다.

미리 알아둬야 할 것들

이건 고객·실데이터 없이 혼자 만든 포트폴리오라 모든 수치는 합성 데이터 자가채점이다. 면접에서 '데모 동작 + 실검증 준비 상태'로 솔직히 설명하는 게 오히려 신뢰를 준다

정답을 내가 만들었으니 잘 맞는 게 당연. 그래서 결측·경계·미등록·표기 흔들림 케이스를 더미에 일부러 섞어 쉬운 문제만 푸는 게 아님을 보여준다

현지 편향: 리뷰 많은 상품이 과대 추천될 수 있어 reviews_local 보정·신상품 노출 규칙을 둔다

실제 도입 시 달라지는 것: 실 현지 선호·가격·언어가 더미와 다르므로 추천 기준·카피 톤을 실데이터로 맞춰야 한다(도입 단계 과제)

더미 데이터

① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.

local_productsTABLE· 12 rows

현지 시장 상품·리뷰를 묶어 추천 입력으로 쓴다

② local_products.seed.json 다운로드
① 인라인 샘플 (프리뷰 5 / 12)
product_idname_rawproduct_keymarketprice_localreviews_localrating
P900OO세럼(구명)—JP—0—
P901상품0pr_0JP1,2000—
P902베스트셀러pr_2JP2,00099,9995
P903미등록상품—US9.9932
P000상품0pr_0JP1,000103.5
③ 증강 프롬프트 (본인 LLM 에 붙여서 N 배 늘리기)
z.object({ product_id: z.string(), name_raw: z.string(), product_key: z.string().nullable(), market: z.string(), price_local: z.number().nullable(), reviews_local: z.number(), rating: z.number().nullable() }). 쉬운 데이터만 만들지 말 것. 다음 하드 케이스를 의도적으로 섞어라: price_local/rating null(미수집), reviews_local 0(신상품)·극단, product_key null 미등록, name_raw 표기 흔들림(구명/별칭), market 혼재(JP/US). 형식 깨뜨리기 시도 3건도 별도로.
schema (3 층의 단일 출처)
z.object({ product_id: z.string(), name_raw: z.string(), product_key: z.string().nullable(), market: z.string(), price_local: z.number().nullable(), reviews_local: z.number(), rating: z.number().nullable() })

기술 상세 · 아키텍처·운영·출력 스키마

기술 스택 매핑
Python시장 데이터 ingest + 추천 + eval
TypeScript추천 렌더 + Zod 런타임 검증
React추천 대시보드
Next.js웹 앱 셸
FastAPI추천 API(`POST /recommend`)
PostgreSQL상품·리뷰 단일 진실원
LLM 선택
model
규칙·임베딩 추천 + Claude Sonnet(현지화 카피 생성·추천 설명)
prompt
현지 시장 컨텍스트 주입 + 리뷰 근거 인용 강제 + 카피 schema 강제 + 단정 가드
rationale
추천 점수는 판매·리뷰 데이터, 카피·설명만 LLM. 현지 언어 톤이 중요해 Sonnet.
결정 게이트
1주차 끝1주차 완성품이 자동으로 도는가. 여기까지가 그 자체로 제출 가능한 완성품.

✓ pass → 그대로 멈춰도 완성품. 더 키우려면 2주차(추천 적합도 검증)로.

2주차 끝추천 적합도 검증 결과가 나오는가.

✓ pass → 여기서 멈춰도 완결. 더 키우려면 3주차(미국 시장 확장)로.

재사용 레이어 · 코어 70% / 도메인 30%
core (재사용 가능)
  • 상품·리뷰 ingest + 추천 점수 엔진
  • 리뷰 근거 인용 + 카피 생성기
  • Zod 스키마 강제 검증
  • 추천 대시보드(React)
  • 5% 인간 spot-check 샘플러
domain (교체 대상)
  • 현지 시장 상품·리뷰 스키마
  • 뷰티 도메인 카피 가이드
  • 시장별 가격·선호 기준
출력 스키마 · reco_output

현지 상품 추천 + 카피

schema (JSON Schema)
z.object({ product_id: z.string(), score: z.number(), reasons: z.array(z.object({ metric: z.string(), value: z.number() })), copy_local: z.string(), note: z.string() })
모범 출력 (3)
[
  {
    "product_id": "P010",
    "score": 0.85,
    "reasons": [
      {
        "metric": "reviews_local",
        "value": 60
      }
    ],
    "copy_local": "今だけ、毎日のスキンケアを格上げ",
    "note": ""
  },
  {
    "product_id": "P901",
    "score": 0.4,
    "reasons": [],
    "copy_local": "新登場",
    "note": "신상품. 데이터 부족"
  },
  {
    "product_id": "P900",
    "score": 0.2,
    "reasons": [],
    "copy_local": "-",
    "note": "가격·평점 결측. 확인 필요"
  }
]
검증 노트 (자동 vs 수동)

reasons 정합성·인용 존재는 자동 검증, copy_local 품질·현지성은 사람/judge 검증.