경력·사례·글은 한국어 원문으로 제공됩니다.

← 모든 기록

노트 / 제품 개발

Trip 여행 안내 50곳 확대: 추천 로직과 콘텐츠 분리

기존 20곳에 30곳의 다섯 언어 안내를 더했다. 장소 연결과 원천 자료를 확인하고 운영에 반영했으며, 안내 확대와 추천 품질은 별개로 남겼다.

작업 2026.10

약 6분 소요2,611자

#추천받은 다음에 볼 정보

랜덤으로 여행지를 추천하는 Trip에서 장소를 고른 뒤 읽을 안내를 늘렸다. 기존 20곳에 30곳을 더해 총 50곳의 안내를 준비했다. 소개, 즐길 거리, 주소와 방문 전 확인사항, 공식 출처를 다섯 언어로 정리했다.

이때 50곳은 추천 후보의 개수가 아니었다. 상세 안내를 제공하는 장소의 수였다. 추천 후보 DB와 가중치는 그대로 두고, 추천 결과를 받은 뒤 참고할 내용을 보강했다.

안내가 늘었다는 사실을 추천 알고리즘이 좋아졌다는 성과로 쓰지 않으려면, 코드와 데이터의 변경 범위부터 나눠야 했다.

#이름이 같다고 연결하지 않았다

수집 자료를 서비스의 장소와 연결할 때 이름만 맞추지 않았다. 목적지 ID와 데이터셋 버전, 지역 코드와 좌표를 함께 확인했다. 개발과 운영의 연결 행이 따로 있어도 같은 장소는 한 곳으로 셌다.

원천은 한국관광공사 TourAPI 국문 관광정보 서비스의 KorService2/detailCommon2였다. TypeScript 수집 코드에서 TourAPI의 contentId·contentTypeId를 서비스의 destinationId·datasetVersion과 연결했다. 같은 이름의 장소를 찾는 검색 결과만으로 연결을 확정하지 않고, areaCode와 위도·경도도 함께 대조했다.

입력 대상과 응답은 Zod 스키마로 검사했다. 원천 ID의 중복, 한 목적지·데이터셋 조합의 중복 연결, 누락된 응답 필드를 걸러냈다. 형식을 통과해도 장소가 맞는지는 별도 문제여서 좌표와 연결 근거를 함께 남겼다.

실제 TourAPI 요청에서는 후보 42곳 중 36곳이 성공했고, 장소 연결이 맞지 않는 6곳은 보류했다. 그중 선정한 30곳은 다시 수집해 30/30 성공과 본문 변경 0곳을 확인했다. 후보 수집과 재수집을 합친 실제 호출은 72회였다.

응답을 받았다는 이유만으로 안내에 넣지 않았다. 다른 장소의 정보를 연결하면 응답 형식이 정상이어도 사용자에게는 잘못된 안내가 된다. 연결이 불확실한 후보는 확인될 때까지 제외했다.

#모은 자료와 공개 문구를 나눴다

수집한 원천 자료를 곧바로 사용자에게 보여주는 문구로 덮어쓰지 않았다. 원천의 고유번호와 출처, 수집일, 공급자가 표시한 수정일을 남겼다. 편집 대조 날짜도 따로 기록했다. 이 날짜가 사람의 승인일을 뜻하지는 않았다. 사람의 항목별 내용 검수와 전문 번역 검수는 별도 기록이 없었다.

파일도 역할을 나눴다. guide-collection-targets.json은 수집할 원천과 장소 연결을, 실행별 sources.json은 정규화한 수집 결과를 담았다. 화면에서 읽는 destination-guides.json은 편집한 다국어 안내였다. 수집 스크립트가 공개 안내와 그 reviewedAt을 곧바로 덮어쓰지 않게 했다.

연결값을 검토한 뒤 원천 ID나 장소 연결을 바꿔 놓고 예전 검토를 재사용하는 일도 막아야 했다. Node.js node:crypto의 SHA-256으로 원천 ID·콘텐츠 유형·정렬한 장소 연결값의 fingerprint를 만들고, 좌표 검토 기록의 값과 대조했다. 이는 연결 대상이 바뀌었는지 확인하는 장치다. 해시가 같다고 소개 문구나 번역이 정확하다는 뜻은 아니다.

재수집에서 차이가 생기면 먼저 비교할 수 있어야 했다. 오류나 누락이 생겼다고 기존 정상 안내를 지우거나 새 값으로 자동 교체하지 않도록 확인했다. 기존 20곳의 안내와 연결값은 이번 확대에서 유지했다.

운영시간과 요금처럼 바뀔 수 있는 내용을 확인 없이 확정적으로 넣지 않았다. 사진과 AI 안내 생성도 이번 작업에서 제외했다. 안내를 더 많이 만드는 일보다, 어느 자료를 보고 적었는지 남기는 일에 먼저 범위를 뒀다.

#운영 반영 뒤 확인한 것

운영 배포 승인 후 총 50곳·5개 언어 안내를 반영했다. 장소와 언어의 조합에 해당하는 API 250개를 확인했고, 결과 화면과 보관함도 살폈다. 검증용 한 건을 저장했다가 삭제해 원래 상태로 돌렸다.

결과 화면의 장소는 통제한 추천 응답을 재생해 선택했다. 안내 조회와 저장·보관함 조회·삭제는 실제 운영 요청이었지만, 그 화면에 나타난 추천값을 실제 추천 엔진의 산출 결과로 세지는 않았다.

배포 확인은 콘텐츠가 운영 API와 화면까지 전달됐는지 보는 일이었다. 250개 응답이 정상이라는 숫자로 모든 번역의 정확도나 현지 정보의 최신성을 증명할 수는 없다. 실제 여행자의 만족도나 추천 결과의 유용성도 측정하지 않았다.

이 글의 결과는 10월 20~21일 배포 기록에 한정한다. 이후 Trip 기능 개선이나 별도의 Trip Lab AI 실험을 이 릴리스의 성과에 합치지 않았다.

#다음 수정에서도 지킬 것

안내를 추가할 때는 기존 추천을 건드리지 않고도 할 일이 꽤 있었다. 같은 장소를 가리키는지 확인하고, 원천과 문구를 나누고, 실패하면 이전 자료를 유지하고, 운영에서 실제로 읽히는지 봐야 했다.

남은 과제는 번역과 현지 정보의 지속적인 검토다. 이번에 재수집한 내용이 같았다는 결과도 이후에 계속 같다는 뜻은 아니다. 다음 수정에서는 어떤 출처가 언제 바뀌었고, 그 차이를 어느 안내에 반영했는지 이어서 남길 생각이다.

작성 2026-11-03

Trip의 2026년 10월 20~21일 안내 확대·운영 배포 기록을 정리한 기록이다. 이번 작성에서 여행 정보를 재수집하거나 운영 API를 호출하지 않았다.