Product Engineer: 클릭 몇 번으로 여행 상품 5,000개를 만들다
PEPE 세션 6 — T&A(투어&액티비티) Experience팀 김제림님
마이리얼트립에는 전 세계 연동사로부터 들어오는 수만 개의 여행 상품이 있습니다. 하지만 이 상품들을 실제 판매 가능한 형태로 등록하는 과정은 놀라울 만큼 수작업이었습니다. 상품 하나에 수십 분, 하루에 최대 20개가 한계였고, 미등록 상품 대기열은 계속 늘어가고 있었습니다.
여섯 번째 PEPE 세션에서는 T&A Experience팀의 프로덕트 엔지니어(PE) 김제림님이 이 과정을 AI로 자동화한 이야기를 공유했습니다. 상품 하나를 만드는 데 30초, 하루 등록 가능한 상품 수는 5,000개 이상. 처음에는 단순한 스크립트로 시작한 프로젝트가 어떻게 여기까지 왔을까요?
쌓여가는 대기열, 하루 20개의 한계
기존 상품 등록 프로세스에는 명확한 병목이 있었습니다. 공급사로부터 상품 정보를 수동으로 가져와야 했고, 그 정보를 바탕으로 상세 페이지 HTML을 직접 제작해야 했습니다. 표준 카테고리와 노출 카테고리도 일일이 분류해야 했고, 이후 상품 등록과 검수까지 거쳐야 했습니다. 상품 하나당 수십 분이 소요됐고, 하루 최대 등록 가능 상품은 약 20개. 미등록 상품은 대기열에 계속 쌓여가고 있었습니다.
제림님의 목표는 명확했습니다.
“여러 연동사들을 단순히 마우스 클릭 몇 번으로 상품이 원클릭 자동화되는 게 목표였습니다.”
프로젝트는 크게 두 가지 과제로 나뉘었습니다. 첫 번째는 연동사의 상품 ID만 입력하면 마이리얼트립 상품으로 자동 전환하는 ‘상품 자동 등록’. 두 번째는 텍스트로만 나열되어 있던 기존 상품 정보를 여행자에게 매력적으로 보이도록 꾸미는 ‘상세 페이지 데코레이션’이었습니다.
수동 등록 vs AI 자동 등록: 하루 20개가 5,000개가 되다
실제 결과물을 비교하면 차이가 뚜렷합니다. 수동 등록된 상품은 텍스트가 나열되어 있고 이미지 배치도 없었습니다. 상품 소개뿐 아니라 미팅 장소, 취소·환불 규정, 포함·불포함 사항까지 고려하면 상품 하나에 들어가는 시간은 적지 않았습니다.
AI 자동 등록은 30초 만에 매거진 스타일의 상세 페이지를 생성합니다. 이미지가 자동으로 배치되고, 매력적인 문구가 들어가며, 옵션·캘린더·대표 이미지까지 갱신해 실제 온세일까지 자동으로 진행됩니다.

달라진 것은 속도만이 아닙니다. 기존에는 담당자마다 작성 스타일이 달라 상품별 품질 편차가 불가피했지만, 이제는 모든 상품이 일관된 레이아웃과 톤으로 만들어집니다. 텍스트만 나열되어 있던 상세 페이지에 이미지가 자동 배치되고, 수기로 투입되던 인력도 대폭 줄어 담당자는 등록 작업 대신 상품 기획과 품질 관리에 집중할 수 있게 됐습니다.
“기존에 하루 약 20개 등록되던 상품이 5,000개 혹은 그 이상 자동 등록될 수 있게 되었고, 수십 분 걸리던 게 30초가 되었습니다. 코드로 무한히 확장 가능한 구조가 되었습니다.”

AI에게 맡긴 세 가지 핵심 역할
이 시스템에서 AI는 세 가지 핵심 역할을 수행합니다.
첫 번째는 번역입니다. 연동사에서 제공하는 데이터는 영어, 중국어, 일본어 등 다양한 언어로 되어 있습니다. 이를 한국어로 바꾸되, 단순 직역이 아니라 여행자의 관심을 끄는 문구로 변환합니다.
“‘Interlaken’이라고 되어 있으면 단순히 직역하는 게 아니라, ‘해발 3,454미터 융프라우 정상 단일 투어’처럼 매력적인 제목을 만들어냅니다.”
두 번째는 상세 페이지 HTML 자동 생성입니다. AI가 연동사의 응답 데이터를 분석해 11가지 컬러 테마 중 적절한 것을 선택하고, 두 가지 레이아웃 중 하나를 고릅니다. 이미지 수에 따라 섹션 수를 자동 조절하고, 다크 모드·라이트 모드를 지원하며, 모바일 환경에 맞춘 문장 길이 최적화도 함께 이루어집니다. 단조로운 하나의 템플릿이 아니라 상품 특성에 맞는 다양한 조합이 가능하도록 설계됐습니다.
“실제 상세 페이지에 ‘파리의 심장에서 펼쳐지는 미지의 밤을 상상해 보세요’ 같은 문구가 자동으로 들어갑니다. 단조로운 색상 하나가 아니라 다양한 테마로 만들 수 있도록 했습니다.”
세 번째는 카테고리 자동 분류입니다. 표준 카테고리와 노출 카테고리 두 가지를 AI가 자동으로 분류합니다. 표준 카테고리의 경우 T&A API에서 허용된 카테고리 트리를 가져와 시스템 프롬프트에 주입하고, 노출 카테고리는 연동사가 제공하는 위도·경도를 기반으로 리전 매처 API와 매핑 테이블을 거쳐 후보 목록을 추린 뒤 AI가 최종 선택합니다.
“상품에서 카테고리는 되게 중요한 역할을 합니다. 예를 들어 ‘인터라켄 패러글라이딩’을 넣으면 AI가 ‘액티비티 > 패러글라이딩’으로 매칭합니다.”
잘 팔리는 상품 50개가 AI의 교본이 되다
AI의 결과물 품질을 어떻게 관리하느냐는 질문에, 제림님은 퓨샷 러닝(few-shot learning)을 핵심 전략으로 꼽았습니다. 실제 잘 팔리는 상품 50~60개의 상세 페이지와 제목을 JSON 데이터로 만들어 AI에게 예시로 제공하는 방식입니다.
어떤 예시를 선택하느냐도 중요했습니다. 국가, 카테고리, 대륙, 판매량 등의 기준으로 스코어를 매겨, 등록하려는 상품과 가장 유사한 맥락의 예시를 AI 프롬프트에 넣어 응답 품질을 높였습니다.
연동사별 맞춤 컨텍스트도 이 시스템의 특징입니다. 큰 틀은 동일하지만 세부 디테일이 다릅니다. GYG는 전 세계 대상 티켓·투어를 판매하기 때문에 “미코노스 슈퍼 파라다이스 해변” 같은 제목이 나오고, 재팬티켓은 일본 미식 중심이라 “야키니쿠 · 니쿠야노꼬 · 도시명” 형태에 메뉴가 포함된 상세 페이지가 생성됩니다. 같은 자동화 시스템이지만, 연동사의 성격에 따라 결과물의 톤과 구성이 달라지는 구조입니다.

비용을 줄이고, 확장은 쉽게
대량 등록을 앞두고 비용 최적화도 중요한 과제였습니다. 기존 프로세스에서는 상품 하나를 만드는 데 약 200원이 소요됐는데, 2만~3만 개 이상을 등록해야 하는 상황에서는 무시할 수 없는 규모였습니다.
제림님은 변하지 않는 스타일 레퍼런스와 규칙은 시스템 프롬프트에 넣어 캐시 재사용을 극대화하고, 상품별로 달라지는 정보만 개별 요청으로 전달하는 구조를 도입했습니다. 향후 아키텍처가 개선되면 비용을 더 줄일 수 있는 배치 API 도입도 고려하고 있습니다.
아키텍처 측면에서는 전략 패턴(Strategy Pattern)을 적용했습니다. 연동사가 추가될 때 전략 하나만 구현하면 되는 구조입니다. 상품 자동화 API를 호출하면 Redis 큐에 저장되고, 배치가 주기적으로 컨슈밍하면서 워커가 병렬로 처리한 뒤, 결과를 수집해 Slack으로 성공·실패 및 비용 리포트를 보내는 흐름입니다.
스크립트에서 시작해, 플랫폼이 되다
이 프로젝트는 약 한 달 반에 걸쳐 완성됐습니다. 처음부터 이 규모를 계획한 것은 아니었습니다.
“처음에는 단순하게 스크립트 같은 걸로 자동 등록을 하려 했었거든요. 점차 커지다 보니까 이렇게 기능으로 된 것 같습니다.”
현재는 대량 등록이 완료된 1단계입니다. 2단계에서는 연동사 확장, 매니저 대시보드 고도화, 검색 노출 최적화, 비용 절감을 계획하고 있습니다. 3단계에서는 연동 상품뿐 아니라 입점 상품에도 적용할 수 있는, 지금보다 훨씬 고도화된 상세 페이지를 준비하고 있습니다.
수십 분이 걸리던 일이 30초가 됐고, 하루 20개가 한계이던 등록이 5,000개 이상으로 늘었습니다. 하지만 제림님에게 이 프로젝트의 의미는 효율화를 넘어섭니다. 필요에 따라 시작한 스크립트가 플랫폼이 되었고, 그 플랫폼 위에서 더 나은 여행 상품 경험을 계속 쌓아갈 수 있는 구조가 만들어졌다는 것. 다음 단계 역시, 같은 방식으로 만들어갈 계획입니다.
*마이리얼트립의 PEPE(Product Engineer Possibility Exchange)는 PE(Product Engineer)들이 “어디까지 시도했는지, 어디서 막혔는지”를 결과보다 과정으로 나누는 사내 세션입니다.