플랜비 (PlanB) — 전국 AI 여행 플래너
말 한마디로 일정이 완성되고, 비·혼잡·동선이 바뀌면 즉시 Plan B를 냅니다
NaDa· 게스트2026년 8월 29일조회 0
story · how it was built
설명
무엇을 (문제·대상)
여행 계획이 무너지는 건 대개 계획을 못 세워서가 아니라, 비가 오거나 사람이 몰리거나 동선이 꼬였을 때 그 자리에서 다시 짜 줄 사람이 없어서입니다. 플랜비는 대화로 전국 여행 일정을 만들고, 변수가 생기면 검증된 대안으로 다시 짜 주는 AI 플래너입니다.
전국 17개 시도에서 동작하고, 좌표·주소를 검증한 장소가 11만 건 이상입니다.
주요 기능
- 대화형 일정 생성 — 「부산 2박 3일, 아이 둘, 차 없음」 같은 말로 시작합니다.
- Plan B 제안 — 예보·집중률·동선이 바뀌면 대안을 제시하고, before → after 를 한 화면에서 비교해 보여 줍니다.
- 근거 노출 — 왜 이 대안인지 예보·집중률 근거를 함께 보여 줍니다. 「비 예보엔 실내 대안」처럼 이유가 붙습니다.
- 실제 경로 — 출발지부터 카카오 지도·길찾기로 이어 붙입니다. 일정과 지도가 따로 놀지 않습니다.
- 신뢰 게이트 — 검증되지 않은 정보는 추정해서 채우지 않습니다. 모르는 것은 모른다고 답합니다.
어떻게 만들었는가 (과정·도구 활용)
한국관광공사 TourAPI 4종 · 기상청 예보 · 관광지 집중률 · 반려동물 동반여행 공공데이터를 카카오 지도·길찾기와 묶었습니다. 스택은 Next.js 16(App Router) · React 19 · Supabase · Vercel 입니다.
이 프로젝트에서 시간을 가장 많이 쓴 것은 기능이 아니라 검증 루프였습니다. 테스트를 4계층(순수 로직 · 네트워크 목 · DB 목 · 컴포넌트)으로 나누고 Playwright E2E 를 얹어, 전부 목과 자체 픽스처로만 돌게 만들었습니다. 덕분에 시크릿 없이 CI에서 push·PR마다 전량 실행됩니다.
배포는 일부러 수동입니다. git 자동 배포를 꺼 두고 CLI로만 프로덕션에 올립니다. 일일 배포 한도와 의도치 않은 배포를 막기 위해서입니다.
구조·실행 (짧게)
app/ 에 Next.js 앱(컴포넌트 · API 라우트 · lib · 테스트), .github/ 에 CI, docs/ 에 설계·인수인계. CI는 lint · tsc · vitest 잡과 build · e2e 잡 두 개로 나눠 돕니다.
한계·다음
- 실시간 혼잡은 집중률 지표 기반이라 현장 체감과 차이가 날 수 있습니다.
- 숙박·예약 연동은 없습니다. 일정과 동선까지가 범위입니다.
- 여행 도메인은 「그럴듯한 오답」이 나오기 가장 쉬운 곳이라, 새 기능보다 판정 근거를 좁히는 작업을 계속하고 있습니다.
journey · lessons
과정 · 배운 점
본문 = 무엇·기능·사용법. 여기 = 시간순 여정 + 다음에 남긴 교훈.
가장 많이 반복된 결함은 기능 버그가 아니라 판정선이었습니다. 부분일치로 지역을 판정하면 엉뚱한 지역이 걸리고, 클램프를 걸면 범위 밖 값이 「정상값」처럼 보이고, 굵은 분류가 구체적인 이름을 먹어 버립니다. 고칠 때마다 판정 자체가 새 결함을 만들었습니다.
「모름」을 「틀림」으로 처리하면 안 됩니다. 소스마다 다른 신호로 같은 것을 재면 있는 것을 없다고 세게 됩니다.
내 수정이 만든 결함은 아무도 안 재는 축에 숨습니다. 그래서 수정 후에 숫자가 하나도 안 바뀌면 층을 잘못 고친 것으로 보고 다시 봤습니다.
피드백 원함 · 개선 제안 · 질문 · 아이디어