로브 (Lovv)

Local(소도시) + Vibe(분위기·감성), 또는 Voyage(항해·여행)를 뜻한다.

일반적인 Love와 달리 알파벳 v를 겹쳐 써서 트렌디한 스타트업이나 테크 서비스 같은 힙한 인상을 준다.

문서 버전: v3.0 — 관리자 MFA 범위·고위험 승인·admin_web 권한 승인 UX 정합화

문서 상태: 검토 중 (Review)

적용 범위: 로브 서비스 전체

1. 문서 개요

1.1 목적

본 문서는 로브(Lovv) 서비스의 아이디어 기획 단계에서 제품의 핵심 기능, API 연동 요구사항, 비기능 요구사항을 정의한다. 개발 착수 전 이해관계자 간 요구사항에 대한 공통 이해를 확보하는 것을 목적으로 한다.

1.2 범위

본 문서는 다음 범위를 포함한다.

docs/01_requirements/의 보조 Markdown은 요구사항 후보·근거 자료로 관리한다. 확정된 내용은 이 대표 문서의 기능 요구사항, 데이터 요구사항, 제약사항, 변경 이력에 통합하고, 아직 검토 단계인 내용은 P5 또는 향후 검토 후보로 유지한다.

1.3 용어 정의

용어정의
오버투어리즘특정 여행지에 관광객이 과도하게 집중되어 현지 생활환경·자연이 훼손되는 현상
소도시관광객 집중도가 낮고 로컬 경험이 풍부한 지방 도시 및 읍·면 단위 지역
테마소도시를 묶는 분류 축 — 초기 6개 테마(온천·휴양 / 바다·해안 / 역사·전통 / 미식·노포 / 자연·트레킹 / 예술·감성)와 공예·웰니스·액티비티 등 확장 테마
추천 진입점사용자가 테마를 먼저 고르지 않고 여행 시기(월), Wikipedia 기반 월별 날씨 경향, 지도 마커 클릭 등 결정 조건을 통해 추천을 시작하는 흐름
여정 (Route)사용자가 선택한 소도시 1곳을 대상으로 선택한 일정 유형(당일치기~2박3일)에 맞게 구성한 일별 세부 일정 단위
계절 적합도각 소도시가 봄·여름·가을·겨울 각 시기에 얼마나 적합한지 나타내는 점수
월별 날씨 경향Wikipedia에서 추출한 소도시별 1~12월 날씨 패턴 기반 추천용 정적 데이터. 맑음 적합도, 우천·폭설·장마·태풍 경향을 포함
RAG검색증강생성 — LLM이 답변 시 소도시 관련 지식 데이터를 검색해 근거로 활용, 환각을 방지하는 기법
멀티스텝 에이전트추천을 단일 호출이 아닌 "분류 → 검색 → 선정 → 일정 구성" 단계로 나눠 처리하는 LLM 파이프라인
추천 엔진사용자의 취향·시기·혼잡도를 입력받아 소도시 1곳의 집중 일정을 제안하는 RAG·에이전트 기반 시스템
드로어 (Drawer)하단에서 슬라이드업되는 상세 정보 패널 UI 컴포넌트
API 딥링크API 직접 호출 없이 외부 플랫폼(Kakao, Yahoo)의 검색·지도 페이지로 연결하는 URL
CORS 제약브라우저 보안 정책(Same-Origin Policy)으로 인해 외부 API를 클라이언트에서 직접 호출할 수 없는 제약

2. 이해관계자

최종 사용자
자유여행자 (FIT)
취향·시기·동행·이동 범위를 입력하고 소도시 집중 일정을 추천받는다. PoC/P1은 한국 강원·경북 소도시 여행자를 우선 대상으로 하며, 일본 여행자는 일본 데이터 수집 경로 복구 후 P5에서 재검토한다.
운영 사용자
지자체·관광 운영자
소도시 관광 집중도를 모니터링하고 수요 분산 전략을 검토한다.
내부 사용자
서비스 관리자
소도시·축제 데이터, 추천 정책, 공지사항을 관리한다.
연계 기관
공공 데이터 제공 기관
관광지·축제·교통 데이터를 API 형태로 제공하거나, 월별 날씨 경향처럼 공개 문서 기반 데이터를 제공한다 (한국관광공사·JNTO·Wikipedia 등).

2.1 역할 모델

이해관계자는 실제 서비스 권한 체계에서 다음 역할(Role)로 관리한다. 하나의 기관 또는 사용자가 여러 역할을 가질 수 있으며, MVP 단계에서는 조회·제안·승인·관리 권한을 중심으로 단순화한다.

Role ID역할주요 사용자인증주요 책임
R-USER일반 여행 사용자자유여행자(FIT)비로그인 또는 선택 로그인추천 요청, 추천 결과 조회, 지도·월별 날씨 경향·외부 링크 확인
R-LOCAL-OPERATOR관광 운영자지자체·관광 운영자로그인 필수담당 지역 운영 지표 조회, 지역 데이터 제안, 수요 분산 검토
R-ADMIN서비스 관리자내부 운영·기획 담당자로그인 필수데이터 승인, 추천 정책 관리, 공지 관리
R-SUPER-ADMIN최고 권한 관리자보안·권한 운영 책임자로그인 필수, 고위험 결정 시 최근 TOTP역할·지역 할당과 대량 게시 고위험 변경의 독립 승인·거절
R-DATA-PROVIDER데이터 제공 기관공공 데이터 제공 기관/API 제공자기관 인증 또는 API Key원천 데이터 제공, 갱신 상태 확인, 출처 정보 관리
R-SYSTEM시스템·외부 APIGoogle Maps, Kakao Maps, OpenRouteService, Yahoo Japan(P5 재검토), Wikipedia 추출 데이터 등시스템 키 또는 수집 설정외부 데이터 자동 조회, 동기화, 추천 결과 보강

2.2 권한 매트릭스

기능/데이터일반 여행 사용자관광 운영자서비스 관리자데이터 제공 기관시스템/API
추천 요청가능가능가능불가불가
추천 결과 조회가능가능가능제한적불가
지도·월별 날씨 경향·링크조회 가능조회 가능조회 가능불가조회·보강
소도시 데이터공개 범위 조회담당 지역 조회·제안전체 승인·수정제공 데이터 등록자동 갱신
축제·행사 데이터공개 범위 조회담당 지역 조회·제안전체 승인·수정제공 데이터 등록자동 갱신
추천 정책불가불가수정 가능불가적용
운영 지표불가 또는 요약담당 지역 조회전체 조회불가산출
대화 로그저장하지 않음불가불가불가처리 중 세션 범위
API Key불가불가관리 요청 가능기관 키 범위사용
공지사항조회제안 가능등록·수정·삭제불가불가

2.3 데이터 접근 범위

데이터 범위포함 데이터허용 역할
공개 데이터목적지 설명, 추천 이유, 지도 링크, 월별 날씨 경향, 외부 탐색 링크모든 사용자, 운영자, 관리자
담당 지역 데이터지역별 조회수, 혼잡도 요약, 데이터 제안 상태, 지역 운영 메모담당 관광 운영자, 관리자
내부 운영 데이터추천 정책, 데이터 검수 상태, API 연동 상태, 공지 운영 상태서비스 관리자, 제한된 운영자
민감 데이터API Key, 처리 중인 세션 데이터, 시스템 설정, 인증 정보API Key는 개발·운영 담당자와 시스템 역할로 제한하고, 대화 로그 전문은 저장 대상에서 제외한다. 운영 설정은 서비스 관리자와 시스템 역할로 제한

2.4 권한 원칙

권한 실패 처리:

비로그인 사용자가 관리자 기능에 접근하면 로그인 또는 접근 불가 안내를 표시한다.

담당 지역 외 데이터 접근, 승인 권한 없는 데이터 변경, API Key 미설정·만료 상황은 각각 접근 제한, 제안 상태 저장, 기본 정보 폴백으로 처리한다. API Key 미설정·만료 조치는 개발·운영 담당자가 수행한다.

2.5 후속 문서 반영

후속 문서반영 항목
사용자 시나리오 / 유저 스토리일반 여행 사용자, 관광 운영자, 관리자, 데이터 제공 기관의 대표 시나리오를 역할별로 분리한다.
화면 흐름 / 정보 구조공개 추천 화면과 운영자·관리자 화면의 접근 경로를 분리하고 권한 없는 진입 상태를 정의한다.
Agent 설계조건 분류, 검색, 후보 선정, 일정 구성, 검증·폴백 단계의 입력·출력과 도구 사용 기준을 정의한다.
데이터 취득 계획서소도시, 축제, 장소, Wikipedia 월별 날씨 경향 데이터의 수집 대상, 출처, 갱신 주기, 검증 기준을 정의한다.
데이터베이스 설계역할, 권한, 기관 소속, 담당 지역, 데이터 제안 상태, 승인 이력, 감사 로그 저장 후보를 검토한다.
API 명세서인증 필요 엔드포인트, 역할별 인가 조건, 401/403/키 만료 응답 형식을 정의한다.
테스트 계획서역할별 접근 제어, 담당 지역 제한, 제안·승인 분리, API Key 장애 폴백 테스트를 포함한다.

2.6 관리자 RBAC 권한 경계

로브 관리자 콘솔의 인증·인가 경계는 다음 원칙으로 고정한다. 대상 관리 역할은 서비스 관리자(R-ADMIN), 최고 권한 관리자(R-SUPER-ADMIN), 데이터 제공 기관(R-DATA-PROVIDER), 관광 운영자(R-LOCAL-OPERATOR)다.

2.7 관리자 권한 매트릭스 (RBAC)

Own은 본인 또는 소속 기관 소유 리소스, Assigned는 할당된 지역, All은 전역 범위를 의미하며, 범위 제한은 역할별로 따로 적용한다.

작업R-USERR-DATA-PROVIDERR-LOCAL-OPERATORR-ADMINR-SUPER-ADMIN
관리자 콘솔 세션 확인거부허용허용허용허용
관리자 MFA 등록·인증거부거부거부본인 계정본인 계정
데이터 제안 작성거부허용거부거부거부
제안 조회거부OwnAssigned 집계만AllAll
제안 수정·재제출거부Own거부거부거부
제안 상세 근거 조회거부Own거부AllAll
승인·수정 요청·반려거부거부거부All거부
처리 이력 조회거부Own 공개 이력Assigned 집계만AllAll
감사 로그 조회거부거부거부AllAll
운영 지표 조회거부거부AssignedAllAll
월간 여행지 후보·게시 상태 조회거부본인 제안 공개 상태Assigned 요약AllAll
월간 여행지 단건 게시·비노출·만료 처리거부거부거부All거부
게시 작업 재시도거부거부거부All거부
공지·추천 정책 변경거부거부거부All거부
고위험 변경 요청 생성·조회거부거부거부AllAll
고위험 변경 승인·거절·실행거부거부거부거부All, 자기 요청 거부
역할·지역 할당 직접 변경거부거부거부거부거부, 고위험 변경 절차만 허용
월간 여행지 10~100건 대량 게시거부거부거부요청만요청 또는 다른 요청자의 요청 결정·실행

R-SYSTEM(외부 API·시스템 역할)은 관리자 콘솔 인가 대상이 아니며 자동 데이터 조회·동기화에 한정한다.

2.8 관리자 콘솔 권한 승인 UX 원칙

admin_web은 권한 승인 탭에서 pending 고위험 변경 요청을 로그인 직후 eager loading한다. 이 목록과 pending count badge는 MFA 없이 role union 권한만으로 표시하며, pending 건수가 50건 이상이면 50+로 표시한다.

3. 서비스 개요

3.1 서비스 소개

로브(Lovv)는 오버투어리즘 회피를 목적으로 한국의 비주류 소도시 1곳을 사용자의 취향과 여행 시기에 맞는 집중 일정으로 추천하는 대화형 챗봇 서비스다. 사용자가 자연어로 취향과 여행 시기를 입력하거나 지도에서 소도시 마커를 선택하면, 멀티스텝 에이전트가 조건을 테마 또는 추천 진입점으로 해석하고 RAG로 검색한 소도시 데이터에 근거하여 적합한 소도시 1곳과 일별 세부 일정을 추천 이유와 함께 제공한다. PoC/P1은 일본 데이터 수집 실패 리스크를 반영해 한국 강원·경북 소도시 데이터 기반 추천으로 고정하며, 한국 전국 확장은 P2로 둔다. 일본 소도시 추천(일본 데이터 기반 추천, 일본 현지 데이터/API 연동)은 수집 경로가 복구된 뒤 P5에서 재검토하며, 향후 일본 트랙을 운영할 때는 한국은 한국 소도시만, 일본은 일본 소도시만 추천하는 나라별 독립 트랙으로 운영한다.

서비스명 로브(Lovv)는 Local(소도시)과 Vibe(분위기·감성), 또는 Voyage(항해·여행)의 의미를 결합한 이름이다. 일반적인 Love와 달리 알파벳 v를 겹쳐 사용해 감성적인 여행 서비스이면서도 트렌디한 스타트업·테크 서비스의 인상을 전달한다.

추천 시 여행 시기(월)에 빛나는 소도시와 사용자가 포함을 선택한 축제·행사를 일정에 결합하며, 각 결과에는 Google Maps, Kakao Maps, OpenRouteService, Wikipedia 추출 월별 날씨 경향 데이터가 역할 분담하여 지도·장소 상세·이동 동선·월별 날씨 경향·링크 정보를 보완 제공한다. Yahoo Japan 등 일본 현지 플랫폼 API 연동은 P5 재검토 범위로 보류한다. 지역 문화 체험, 스키 액티비티 같은 P3~P4 확장 테마와 Wikipedia 기반 월별 날씨 경향을 기준으로 한 직접 질의형 추천도 같은 추천 엔진 안에서 처리한다. 별 관측, 치유·웰니스, 예산 역산 추천은 이번 프로젝트 대상에서 제외하고 향후 단계에서 검토한다.

3.2 핵심 가치 제안

가치 항목설명
소도시 집중 일정 추천기본·확장 테마와 사용자 조건에 맞는 소도시 1곳을 선정하고 당일치기~2박3일 일정을 설계해 제공
계절·축제 연동여행 시기에 빛나는 소도시와 사용자가 포함을 선택한 축제·행사를 일정에 결합
직접 질의형 추천사용자가 여행 시기(월)를 바로 말하면 테마 선택 없이 Wikipedia 기반 월별 날씨 경향이 좋은 소도시를 역으로 제안. 예산 역산은 향후 검토
지도 기반 진입메인 지도에서 국가·월·테마로 소도시를 필터링하고 마커 클릭으로 추천을 시작
개인화 루프온보딩 선호, 저장 일정, 북마크, 좋아요/싫어요 피드백, 외부 링크 클릭을 다음 추천 조건과 세션 내 후보 조정에 반영
혼잡 회피형 추천단순 인기순이 아닌 혼잡도 낮은 대체 여행지를 우선 추천
RAG 기반 정확성직접 구축한 소도시 데이터를 검색·근거로 활용해 환각 없는 사실 기반 추천
멀티스텝 에이전트분류→검색→선정→일정 구성을 단계별로 추론하여 추천 품질 확보
일본 트랙 (P5 재검토)한국 소도시 추천을 PoC/P1 핵심으로 제공하고, 일본 소도시 트랙은 데이터 수집 경로 복구 후 P5에서 재검토한다

3.3 타겟 사용자

구분설명
주 타겟국내외 여행을 즐기지만 혼잡한 인기 여행지를 피하고 싶은 20~40대 성인
부 타겟일본 여행 경험이 있어 도쿄·오사카 외 소도시를 탐색하는 여행자
공통 특성자연어 대화에 익숙하고, 스마트폰 중심의 여행 정보 탐색 습관 보유

3.4 서비스 흐름 요약

단계입력처리 / 출력
1진입 및 조건 파악온보딩 선호 프로필이 기본값으로 적용됨. 사용자는 지도 마커 클릭 또는 챗봇 대화로 진입하며 국가·여행 시기(월)·테마를 파악
2진입점 분류지도 마커 클릭(목적지+일정 유형+축제 포함 여부) 또는 챗봇 발화(테마·시기·월별 날씨 경향 직접 질의)로 분류
3RAG 검색·후보 선정테마+계절 적합도+Wikipedia 월별 날씨 경향 데이터를 기준으로 소도시 1곳을 선정
4일정 구성선택한 일정 유형(당일치기~2박3일) 기준 일별 세부 일정 생성. 각 날은 메인 관광지 1개와 서브 관광지로 구성하고, 식사는 별도 선택 슬롯으로 제공
5상세 정보 조회드로어 패널에서 지도·장소 정보·월별 날씨 경향·외부 링크 확인
6외부 연동숙소 검색 링크, Kakao 딥링크로 추가 정보 확인 (Yahoo Japan 등 일본 현지 딥링크는 P5 재검토 범위)

4. 기능 요구사항

본 섹션은 로브 서비스가 제공해야 하는 사용자 기능과 시스템 동작을 정의한다. 각 요구사항은 개발, 설계, 테스트에서 공통 기준으로 사용할 수 있도록 식별자, 적용 영역, 요구사항 내용, 비고로 구분한다.

기능 요구사항 표에서는 우선순위 컬럼을 제외한다. 실제 개발 우선순위는 별도 백로그에서 P1~P5 구간으로 산정한다.

4.1 공통 사용자 인터페이스

ID서비스/영역요구사항 내용비고
FR-COM-001공통 UI사용자는 자연어, 조건 입력, 선택형 칩 또는 필터를 통해 여행 조건을 입력할 수 있어야 한다.여행 조건 입력 통합
FR-COM-002공통 UI추천 결과는 카드, 표, 지도, 상세 패널 등 사용자가 비교 가능한 형태로 표시되어야 한다.결과 비교 가능성
FR-COM-003공통 UI서비스는 모바일과 데스크톱에서 핵심 탐색, 추천, 상세 확인 기능을 사용할 수 있는 반응형 화면을 제공해야 한다.접근성/호환성 연계
FR-COM-004다국어/국가 선택국가 또는 언어가 서비스 흐름에 영향을 주는 경우 사용자는 대상 국가와 표시 언어를 선택할 수 있어야 한다.PoC/P1은 한국 단일 국가 기준. 일본 등 다국가/다국어 확장은 P5 재검토 보류
FR-COM-005추천 실행 CTA필수 조건이 충족되면 사용자는 여행 일정 추천 받기 버튼을 눌러 추천 파이프라인을 실행할 수 있어야 한다. 필수 조건이 부족하면 버튼은 비활성화되거나 추가 질문을 유도해야 한다.추천 시작 버튼

4.2 추천·탐색 기능

ID서비스/영역요구사항 내용비고
FR-REC-001테마 추천시스템은 사용자 입력을 테마, 계절, 동행자, 지역, 혼잡 회피 선호 등 추천 조건으로 분류해야 한다.기존 테마 분류 통합
FR-REC-002대체 추천시스템은 혼잡도가 높거나 조건에 맞지 않는 대상 대신 대체 관광지, 축제, 방문 시간 또는 경로를 추천해야 한다.분산 추천 핵심
FR-REC-003추천 결과 구성 및 설명 가능성추천 결과에는 소도시명, 위치, 대표 이미지, 추천 이유, 일정 흐름 이유, 주요 태그, 숙소 검색 링크, 외부 탐색 링크가 포함되어야 한다. 추천 이유는 사용자 조건, 계절 적합도, 혼잡도, Wikipedia 월별 날씨 경향 중 2개 이상을 근거로 서술해야 한다.Explainability 4요소
FR-REC-004개인화시스템은 사용자 취향, 이동 조건, 일정 유형, 동행자 조건, 온보딩 선호 프로필, 북마크, 추천 피드백, 외부 링크 클릭을 반영해 추천 결과를 세션 단위로 조정해야 한다.서비스별 세부 조건 적용
FR-REC-005저장/비교사용자는 추천 소도시 일정 또는 축제 후보를 저장하거나 비교할 수 있어야 한다.일정 후보 관리
FR-REC-006추천 다시 받기사용자는 추천 결과 화면에서 추천 다시 받기 버튼을 눌러 현재 조건을 유지한 채 다른 소도시 또는 변형 일정을 다시 추천받을 수 있어야 한다. 시스템은 직전 추천과 동일한 결과를 반복하지 않거나, 동일 결과가 필요한 경우 그 사유를 설명해야 한다.결과 재생성
FR-STORE-001저장 데이터 범위시스템이 저장하는 사용자 데이터는 추천 결과로 생성된 여행 일정, 온보딩 응답, 추천 피드백(좋아요/싫어요), 북마크, 공개 일정 복제 이력, 외부 링크 클릭 이벤트로 한정한다. 대화 전문은 저장 대상에서 제외한다.저장 범위 제한
FR-STORE-002PoC 로컬 스토리지PoC 단계에서 사용자 일정, 선호, 피드백, 북마크 데이터는 브라우저 로컬 스토리지에 저장하며 서버 전송 없이 클라이언트에서 관리한다.PoC
FR-STORE-003Production 회원가입 기반 저장Production 단계에서 사용자는 회원가입 후 자신의 여행 일정, 선호, 피드백, 북마크, 공개 일정 복제 이력을 서버에 저장하고 마이페이지에서 조회할 수 있다.Production
FR-ONBOARD-001온보딩 질문사용자는 서비스 첫 진입 시 선호 여행 스타일을 파악하기 위한 온보딩 질문에 응답해야 한다. 온보딩은 건너뛸 수 없으며 이후 마이페이지에서 재응답할 수 있어야 한다.필수
FR-ONBOARD-002대도시-테마 매핑온보딩 질문은 한국 6개 대도시 스타일 보기를 제공하고, 각 선택지를 온천·휴양, 바다·해안, 역사·전통, 미식·노포, 자연·트레킹, 예술·감성 기본 테마와 매핑해야 한다.P1은 한국 6개 대도시 기준. 일본 대도시 매핑은 P5 재검토 보류
FR-ONBOARD-003온보딩 결과 반영시스템은 온보딩에서 수집한 선호 테마 프로필을 첫 번째 추천부터 기본 조건으로 적용해야 한다. 사용자가 대화 중 다른 조건을 명시하면 대화 조건을 우선 적용한다.추천 기본값
FR-PERS-001추천 피드백 UI사용자는 추천받은 각 소도시에 대해 좋아요 또는 싫어요를 선택할 수 있어야 한다. 선택 결과는 저장 데이터 범위에 따라 보관된다.개인화 입력
FR-PERS-002피드백 반영 추천시스템은 사용자가 싫어요를 선택한 소도시의 추천 우선도를 낮추고, 좋아요를 선택한 소도시의 테마 태그를 다음 추천의 가중치 조건으로 반영해야 한다.개인화 루프
FR-PERS-003북마크사용자는 소도시와 대도시를 북마크할 수 있어야 한다. 소도시 북마크는 선호 추론에, 대도시 북마크는 대도시 기준 주변 소도시 탐색과 비교에 활용한다.대도시 북마크는 대도시 자체 저장
FR-PERS-004공개 일정 복제 신호사용자가 공개 일정을 1탭 복제하거나 참고한 경우, 시스템은 해당 행동을 저장·재추천 전환 분석에 활용할 수 있어야 한다.KICK P2 설계
FR-PERS-005Cold Start시스템은 사용자 행동 데이터가 부족한 초기 상태에서 관광공사, 지자체, 공식 출처, 내부 검증 루트를 기반으로 초기 추천 후보를 구성해야 한다.신규 사용자 보완
FR-PERS-006세션 기반 개인화시스템은 온보딩 선호, 저장, 북마크, 좋아요/싫어요, 외부 링크 클릭, 현재 대화 조건을 다음 추천의 가중치 조건으로 반영해야 한다.점수 모델 고도화 전 단계
FR-MY-001마이페이지서비스는 사용자가 자신의 저장 일정, 선호, 피드백, 북마크, 공개 일정 복제 이력을 조회·관리할 수 있는 마이페이지를 제공해야 한다. PoC에서는 로컬 스토리지 기반, Production에서는 로그인 후 서버 기반으로 운영한다.저장 관리
FR-MY-002일정 목록 조회마이페이지에서 사용자는 이전에 저장한 여행 일정 목록을 조회하고 개별 일정의 상세 내용을 확인할 수 있어야 한다.Production 중심
FR-MY-003선호 재설정마이페이지에서 사용자는 온보딩 결과를 재응답해 선호 테마 프로필을 업데이트할 수 있어야 한다.Production 중심

4.3 지도·위치·경로 기능

ID서비스/영역요구사항 내용비고
FR-MAP-001지도 표시추천 결과와 혼잡도 또는 목적지 위치는 지도 기반으로 표시되어야 한다.기존 지도 연동 통합
FR-MAP-002지도 플랫폼국내 목적지는 Google Maps와 Kakao Maps 링크 또는 탭을 제공해야 한다.P1은 한국 목적지(Google/Kakao) 기준. 일본 목적지 및 일본 현지 플랫폼 링크 분기는 P5 재검토 보류
FR-MAP-003경로/패스철도 기반 서비스는 출발지, 도착지, 패스권, 예상 비용을 비교해 최적 경로 또는 패스를 추천해야 한다.RailRoute 전용
FR-MAP-004상세 패널목적지 또는 추천 카드 선택 시 위치, Wikipedia 기반 월별 날씨 경향, 주변 명소, 외부 링크를 확인할 수 있는 상세 패널을 제공해야 한다. 월별 경향 외 날씨 데이터는 표시하지 않는다.드로어/상세 카드
FR-MAP-005메인 소도시 지도메인 페이지는 추천 대상 소도시의 위치를 마커로 표시한 지도를 제공해야 한다.P1은 한국 소도시 마커 기준. 일본 소도시 마커 및 한·일 구분 표시는 P5 재검토 보류
FR-MAP-006지도 필터메인 지도는 월(1~12월), 테마를 기준으로 소도시 마커를 필터링하는 기능을 제공해야 한다. 복수 조건 동시 적용이 가능해야 한다.P1은 월·테마 필터 기준. 국가(한국/일본) 필터는 일본 트랙 P5 재검토 시 적용
FR-MAP-007마커 클릭 여행 시작사용자가 지도 마커를 클릭하면 해당 소도시를 목적지로 설정하고, 지도 위에서 일정 유형을 선택한 뒤 축제·행사 포함 여부 확인을 거쳐 챗봇 추천 흐름을 시작해야 한다.지도 기반 추천 진입
FR-MAP-008일정 이동 동선 표시시스템은 추천 일정에 포함된 메인·서브 관광지 마커를 일정 순서대로 연결하고, OpenRouteService Directions API 기반 이동 경로를 지도 위에 폴리라인으로 표시할 수 있어야 한다. API 호출 실패 시 직선 연결 또는 장소 목록 중심 UI로 폴백해야 한다.ORS Directions
FR-MAP-009이동 시간·거리 비교시스템은 서브 관광지 후보를 제안하거나 일정 수정 후보를 비교할 때 OpenRouteService Matrix API로 후보 간 이동 시간·거리 정보를 계산할 수 있어야 한다. 이 값은 후보 정렬 보조 정보이며 단독 추천 근거로 사용하지 않는다.ORS Matrix
FR-MAP-010위치 반경 추천위치 반경 기반 추천은 PoC 상세 범위에서 제외하고 향후 확장 후보로 관리한다.향후 검토

4.4 RAG·챗봇·에이전트 기능

ID서비스/영역요구사항 내용비고
FR-RAG-001RAG 검색서비스는 실제 수집 데이터 또는 벡터화된 지식베이스를 근거로 추천과 답변을 생성해야 한다.환각 방지
FR-RAG-002멀티스텝 에이전트추천 파이프라인은 조건 분류, 데이터 검색, 후보 선정, 일정 구성, 검증 단계를 순차적으로 처리해야 한다.다단계 처리
FR-RAG-003대화형 Q&A추천 이후 사용자는 추가 질문을 할 수 있고, 시스템은 메타데이터와 추천 근거를 바탕으로 후속 답변을 제공해야 한다.후속 질의응답
FR-RAG-004폴백/검증각 에이전트 단계가 실패하거나 데이터 근거가 부족한 경우 재시도, 폴백 응답, 안내 메시지를 제공해야 한다.안정성
FR-RAG-005직접 질의 진입점시스템은 사용자가 테마를 고르지 않고 여행 시기(월)를 바로 입력해 해당 월의 Wikipedia 기반 날씨 경향이 좋은 소도시를 추천받을 수 있도록 지원해야 한다. 챗봇 진입 시 추천 생성 직전 축제·행사 포함 여부 확인 단계를 거친다.월별 날씨 경향 기반

4.5 외부 데이터/API 연동

ID서비스/영역요구사항 내용비고
FR-API-001공공/관광 데이터서비스는 관광지, 축제, 교통, 혼잡도 등 외부 데이터 소스를 연동하거나 수집할 수 있어야 한다. 월별 날씨 경향은 Wikipedia에서 추출·전처리한 정적 데이터로 관리한다.데이터 기반 서비스 공통
FR-API-002지도/장소 API지도와 장소 상세 정보는 외부 API 키 또는 공개 API 상태에 따라 연동되고, 미설정 시 안내 UI를 제공해야 한다. 월별 날씨 경향은 API 키 상태와 분리한다.API 키 설정 포함
FR-API-003데이터 최신성축제, 혼잡도, 촬영지, 상품 정보처럼 변경 가능성이 높은 데이터는 갱신 주기와 최신성 상태를 관리해야 한다.품질 기준
FR-API-004외부 링크추천 대상에는 지도, 블로그, 예약, 현지 플랫폼 등 사용자가 후속 행동을 할 수 있는 외부 링크를 제공해야 한다.예약/탐색 연결
FR-API-005애니메이션 성지 데이터시스템은 Anime Tourism 88, JNTO, KTO TourAPI, OSM, Wikidata, 지자체·공식 사이트 등에서 애니메이션 성지 후보와 장소 기본 정보를 수집·검증할 수 있어야 한다.일본 데이터 의존. 일본 데이터 수집 경로 복구 후 P5 재검토 보류
FR-API-006일본 현지 플랫폼일본 목적지에는 Yahoo Travel, じゃらん, 楽天トラベル, 食べログ 등 숙박·맛집·카페 탐색을 위한 외부 딥링크를 제공해야 한다.일본 현지 데이터/API 연동. P5 재검토 보류
FR-API-007Wikipedia 월별 날씨 경향 데이터Wikipedia에서 추출한 월별 날씨 경향 데이터는 추천 후보 스코어링, 계절 정합성 검증, 대체 일정 알림 팝업 분기에 사용한다. 월별 경향 외 날씨 데이터는 호출하거나 화면에 표시하지 않는다.출처 URL, 추출 기준일, 갱신 실패 안내 필요
FR-API-008OpenRouteService 경로 API서비스는 OpenRouteService Directions API를 사용해 일정 마커 간 경로 폴리라인, 이동 거리, 예상 이동 시간을 계산할 수 있어야 한다. API Key는 클라이언트에 노출하지 않고 백엔드 프록시 또는 서버 환경 변수에서 관리한다.지도 동선 표시
FR-API-009OpenRouteService Matrix API서비스는 OpenRouteService Matrix API를 사용해 후보 장소 간 이동 시간·거리 행렬을 계산할 수 있어야 한다. 호출량 제한과 실패 가능성을 고려해 캐시, 후보 수 제한, 폴백 UI를 적용해야 한다.후보 비교 보조
FR-API-010비용 추정 데이터교통, 숙박, 식비, 체험 비용 추정에 사용하는 외부 또는 내부 기준 데이터는 출처와 갱신 시점을 관리해야 한다.사용자 여행 예산 추천 근거
FR-STAY-001숙소 검색 링크 정책시스템은 추천 일정에서 숙소를 직접 추천하지 않는다. 대신 목적지와 일정 기간을 조합한 숙박 플랫폼 검색 링크를 제공해야 한다.직접 추천 제외
FR-STAY-002한국 숙소 검색 링크한국 목적지 추천 결과에는 야놀자, 여기어때, 네이버 호텔로 연결되는 목적지·날짜 기반 검색 딥링크를 포함해야 한다.한국 목적지

4.6 서비스별 세부 기능

우선순위 및 단계별 추진 범위

PoC 단계는 P1 구현을 핵심 범위로 한다. P2는 PoC에서 설계까지 완료하고, 일정 여유가 있을 경우 일부 구현한다. P3는 PoC에서 설계 산출물까지만 정리한다. P4는 Production 단계에서 구현한다. P5는 이번 프로젝트 대상에서 제외하고 향후 검토한다. P5 항목은 우선순위 및 단계별 추진 범위에만 기록하고, 아래 상세 기능 요구사항 표에서는 제외한다. P2 이상 기능은 핵심 AI 추천 경험(P1)이 완성된 이후 진입한다. P1 단계에서 recommendation flow, personalization, ranking, explainability가 충분히 검증되지 않으면 P2 구현을 시작하지 않는다.

우선순위기능 범위PoCProduction상태
P1한국 강원·경북 데이터 기반 혼잡 회피 대체 여행지 추천, 국내(한국) 축제 기반 여정 추천, Wikipedia 월별 날씨 경향 기반 추천 진입, 세션 기반 개인화구현고도화핵심
P2한국 전국 확장, KICK(유사 취향 공개 일정·1탭 복제)설계구현 검토선택 구현
P3K-Drama 촬영지 탐색, 철도 경로 기반 주변 관광지 안내, 지역 문화 체험 추천설계구현 검토설계
P4스키 액티비티 여행 추천정의Production 구현 검토Production
P5일본 데이터 기반 추천, 일본 현지 데이터/API 연동(일본어 검색 키워드 FR-JP-005, 애니메이션 성지순례 FR-ANIME-001~003, 일본 현지 탐색 링크 FR-API-006 포함), 별 관측 조건 기반 여행지 추천, 치유·웰니스 여정 추천, 예산 역산 추천제외검토제외

보조 요구사항 문서의 대표 문서 반영 기준은 다음과 같다.

분류보조 문서대표 문서 반영 방식
P1 핵심 추천supplemental/overturizim.md, supplemental/korea_japan.md, supplemental/weather_first.md혼잡 회피, 국내(한국) 축제, Wikipedia 월별 날씨 경향 기반 추천 요구사항으로 통합. 한일 양방향 축제 설계의 일본 축제 트랙은 P5 재검토로 보류
P2 선택 구현supplemental/priority_plan.md, supplemental/kick_summary.md한국 전국 확장과 KICK(유사 취향 공개 일정·1탭 복제) 설계 범위로 정리. 일본어 검색 키워드·일본 현지 탐색 링크는 P5로 이동
P3 설계supplemental/kdrama-pipeline.md, supplemental/trip_train.md, supplemental/craft_experience.md, supplemental/personalization.md, supplemental/lovv_agent_multiturn_context_spec.mdK-Drama 촬영지, 철도, 지역 문화 체험, 멀티턴 컨텍스트 요구사항으로 통합
P4 Productionsupplemental/seasonal_activity.md스키 액티비티 요구사항으로 통합
P5 향후 검토supplemental/japan_add_function.md, supplemental/animation.md, supplemental/astro_rag_proposal.md, supplemental/healing_wellness.md, supplemental/budget_first.md이번 프로젝트 상세 기능 요구사항에서는 제외하고 데이터 후보·제약사항에 향후 검토로 기록. 일본 데이터 기반 추천·일본 현지 데이터/API 연동(일본어 검색 키워드, 애니메이션 성지순례)은 일본 데이터 수집 경로 복구 후 재검토
우선순위 정리supplemental/priority_plan.mdP1~P5 단계별 추진 범위의 기준 자료로 반영

우선순위 기능 요구사항

ID서비스/영역요구사항 내용비고
FR-OTR-001오버투어리즘시스템은 관광지별 혼잡도를 조회하고 혼잡도가 높은 지역의 대체 관광지와 대체 방문 시간대를 추천해야 한다.혼잡도 기준과 대체지 선정 근거 필요
FR-OTR-002오버투어리즘운영자는 지역별 혼잡도, 추천 분산 결과, 데이터 수집 상태를 모니터링할 수 있어야 한다.운영 화면에서 지역·기간별 필터 필요
FR-FES-001국내 축제사용자는 날짜, 지역, 테마, 동행자 조건을 입력해 한국 축제를 추천받을 수 있어야 한다.P1은 한국 축제 기준. 국가·언어 선택을 포함한 일본 축제 추천은 P5 재검토 보류
FR-FES-002국내 축제축제 추천 결과에는 축제명, 기간, 지역, 추천 이유, 주변 관광 자원, 후속 질의응답 진입점을 포함해야 한다.축제 기간과 개최 상태 최신성 표시. 일본 축제 트랙은 P5 재검토 보류
FR-ENTRY-WEATHER-001월별 날씨 경향 기반 추천 진입점사용자는 테마를 고르지 않고 여행 시기(월)를 입력해 해당 월의 날씨 경향이 좋은 소도시를 추천받을 수 있어야 한다. 추천은 Wikipedia에서 추출한 월별 날씨 경향 데이터에 기반한다.weather-first, 월별 날씨 경향 기반
FR-ENTRY-WEATHER-002월별 날씨 경향 표시추천 결과 또는 목적지 상세에는 월별 날씨 경향, 추천 적기, 우천·폭설·장마·태풍 경향, 데이터 출처 URL과 추출 기준일을 표시해야 한다. 월별 경향 외 날씨 데이터는 표시하지 않는다.표시용 최신성
FR-ENTRY-WEATHER-003월별 기상 영향 알림 팝업추천 목적지가 해당 여행 월에 비·폭설·장마·태풍 등 여행 영향 경향이 있는 경우, 시스템은 기본 일정을 제시한 뒤 대체 일정 추가 여부를 알림 팝업으로 확인해야 한다. 사용자가 동의하면 동일 목적지의 실내·우천 적합 대체 일정을 추가하고, 거절하면 기본 일정을 유지한다.월별 날씨 경향 기반 팝업
FR-WEATHER-001Wikipedia 월별 날씨 경향 데이터시스템은 Wikipedia에서 추출한 소도시별 1~12월 날씨 경향(맑음 적합도, 우천·폭설·장마·태풍 경향)을 추천용 정적 데이터로 관리해야 한다.추천용
FR-WEATHER-002날씨 경향 기반 스코어링후보 선정 단계에서 월별 기상 영향 경향이 높은 목적지는 감점하고, 여행 시기와 날씨 경향이 맞는 목적지는 우선 추천해야 한다.ranking 연계
FR-WEATHER-003대체 일정 알림 팝업월별 날씨 경향상 비·폭설·장마·태풍 등 여행 영향 가능성이 높은 목적지는 대체 일정 추가 여부를 묻는 알림 팝업을 제공해야 한다.UI 분기
FR-TRIP-001일정 유형 선택사용자는 당일치기, 1박2일, 2박3일 중 하나의 일정 유형을 선택할 수 있어야 한다. P1 한국 추천에 적용하며, 일정 유형에 따라 일별 방문지 수와 밀도를 조정해야 한다.공통 일정 유형
FR-TRIP-002초기 일정 구성시스템은 소도시 선정 근거가 된 관광지 후보들만으로 전체 일정을 채우지 않아야 한다. 각 날은 1개의 메인 관광지와 복수의 서브 관광지로 구성한다.일정 다양성
FR-TRIP-003메인 관광지 선정메인 관광지는 소도시 선정 근거가 되었던 관광지 후보에서 우선 채워야 한다. 단, 사용자가 원하면 동일 테마를 유지하는 범위에서 교체할 수 있어야 한다.근거 관광지 활용
FR-TRIP-004서브 관광지 인출서브 관광지는 선정된 소도시의 DynamoDB 관광지 데이터에서 다시 인출해야 하며, 메인 관광지와 장소 타입이 과도하게 중복되지 않도록 균형을 고려해야 한다.장소 타입 균형
FR-TRIP-005일정 수정사용자는 자연어 변경 요청 또는 DB에서 조회된 관광지 목록 직접 선택으로 일정을 수정할 수 있어야 한다. 서브 관광지는 테마 고정 없이 자유롭게 지정할 수 있다.사용자 주도 수정
FR-TRIP-006식사 슬롯일정에는 관광지와 분리된 식사 슬롯을 제공해야 하며, 식당은 프론트엔드에서 제공하는 목록에서 사용자가 선택할 수 있어야 한다.프론트 구현 반영
FR-FEST-ENTRY-001축제·행사 포함 여부 확인시스템은 지도 마커 클릭과 챗봇 대화 두 진입점 모두에서 여행 일정 생성 직전 "현지 축제·행사를 일정에 포함할까요?"를 사용자에게 확인해야 한다. 선택 결과는 해당 세션의 추천 조건으로만 사용하며 장기 저장하지 않는다.추천 직전 확인
FR-KDRAMA-001미디어 촬영지·성지순례시스템은 한국 K-Drama 촬영지 데이터를 수집, 정제, 검증하고 장소별 메타데이터를 구조화해야 한다.수집 출처와 검증 상태 필수
FR-KDRAMA-002미디어 촬영지·성지순례K-Drama 촬영지 결과는 작품명, 위치, 검증 상태, 신뢰도, 태그, 참조 링크와 함께 소도시 여정 중심으로 탐색 가능해야 한다.작품·장소 매핑 근거 표시
FR-RAIL-001철도 경로 기반 주변 관광지 안내시스템은 철도 경로를 기준으로 이동 가능한 소도시와 경로 주변 관광지를 함께 안내해야 한다.출발지·이동시간·환승 난이도 반영
FR-RAIL-002철도 경로 기반 주변 관광지 안내철도 경로 추천 결과에는 주요 역, 환승, 소요 시간, 주변 관광지, 패스 활용 가능 여부를 함께 표시해야 한다.패스 적용 가능 구간과 주변 관광지 연결 기준 필요
FR-THEME-CRAFT-001지역 문화 체험 추천시스템은 공예, 차, 지역 요리, 전통문화, 농어촌 활동 등 지역 문화를 체험할 수 있는 소도시를 추천해야 한다.실내외 체험 모두 포함
FR-THEME-CRAFT-002지역 문화 체험 추천지역 문화 체험 추천 결과에는 체험 소요 시간, 난이도, 예약 필요 여부, 참여 방식, 우천 적합성을 표시해야 한다.체험 참여 조건 구분
FR-THEME-CRAFT-003지역 문화 체험 추천시스템은 지역 문화 체험과 주변 마을, 축제, 로컬 관광 자원을 하나의 여정으로 묶어 제안해야 한다.체험+주변 관광 결합
FR-THEME-ACTIVITY-001스키 액티비티 여행 추천시스템은 스키장 접근성, 적설·날씨 조건, 강습 가능 여부를 기준으로 겨울 액티비티 소도시를 추천해야 한다.계절축과 직접 연동
FR-THEME-ACTIVITY-002스키 액티비티 여행 추천스키 추천 결과에는 적합 시기, 날씨 조건, 난이도, 강습 가능 여부, 장비 대여 정보를 포함해야 한다.초보자 판단 정보
FR-THEME-ACTIVITY-003스키 액티비티 여행 추천시스템은 스키 액티비티와 주변 휴식, 온천, 식당 코스를 하나의 여정으로 결합해야 한다.활동+회복 결합

향후 검토 후보는 다음과 같이 관리한다. 이 항목은 이번 프로젝트의 상세 기능 요구사항 표에는 포함하지 않는다.

후보근거 보조 문서검토 조건
일본 데이터 기반 추천supplemental/korea_japan.md, supplemental/japan_add_function.md일본 소도시·축제·방문 통계·월별 날씨 경향의 수집 경로와 로컬 검증 산출물을 확보하고, 출처 정합성 기준을 충족한 뒤 한국 트랙과 동일한 나라별 독립 트랙으로 재승격 검토
일본 현지 데이터/API 연동supplemental/japan_add_function.mdYahoo Japan, じゃらん, 楽天トラベル, 食べログ 등 일본 현지 플랫폼 딥링크와 일본어 검색 키워드(FR-JP-005, 목적지별 최소 5개: 金沢 観光 / 金沢 モデルコース / 金沢 カフェ / 金沢 穴場 / 金沢 ひとり旅 기준)를 일본 데이터 수집 경로 복구 후 검토
애니메이션 성지순례supplemental/animation.md일본 데이터 수집 경로 복구 후, 작품-장소 관계 유형·공식성·신뢰도·근거 URL을 갖춘 일본 소도시 애니메이션 성지(FR-ANIME-001~003) 데이터를 확보한 뒤 검토
별 관측 조건 기반 여행지 추천supplemental/astro_rag_proposal.md광해, 월령, 구름량, 대기 안정도 데이터를 안정적으로 확보하고, 일반 소도시 추천과 별도 성공률 계산 기준을 정의한 뒤 검토
치유·웰니스 여정 추천supplemental/healing_wellness.md온천 테마와 중복되지 않는 회복 활동 데이터, 템플스테이·치유의숲 운영 정보, 한적함 지표를 확보한 뒤 검토
예산 역산 추천supplemental/budget_first.md교통·숙박·식비·액티비티 비용 추정치와 실시간 가격 미연동 제약을 명확히 한 뒤 검토

4.7 운영·관리·검증 기능

ID서비스/영역요구사항 내용비고
FR-AUTH-001인증서비스는 관리자, 관광 운영자, 데이터 제공 기관 등 권한이 필요한 역할에 대해 로그인 기반 인증을 제공해야 한다.Production 운영 기능
FR-AUTH-002인가서비스는 역할별 권한에 따라 데이터 조회, 제안, 승인, 정책 관리 기능 접근을 제한해야 한다.권한 매트릭스 연계
FR-REVIEW-001데이터 제안관광 운영자와 데이터 제공 기관은 소도시·축제·행사 데이터를 제안하거나 제공할 수 있어야 한다.제안 상태 관리
FR-REVIEW-002데이터 검토서비스 관리자는 제안·제공된 데이터를 검토하고 승인, 반려, 수정 요청할 수 있어야 한다.승인 책임 분리
FR-REVIEW-003이력 관리시스템은 데이터 제안, 검토, 승인, 반려, 수정 요청 이력을 추적할 수 있어야 한다.감사 로그 후보
FR-OPS-001관리자운영자는 추천 정책, 노출 기준, 공지사항, 데이터 갱신 상태를 관리할 수 있어야 한다.운영 관리
FR-OPS-002검증추천 또는 데이터 파이프라인 결과에는 출처, 검증 상태, 실패 여부 또는 신뢰도 정보를 표시해야 한다.추적성/신뢰도
FR-OPS-003확장성서비스는 신규 지역, 축제, 관광 상품, 촬영지, 데이터 소스를 추가할 수 있는 구조를 가져야 한다.데이터 확장

4.8 추천 파이프라인 명세

각 단계별 입력·출력·판단 기준을 정의한다.

단계입력판단 기준출력
1. 조건 수집사용자 자연어, 국내 지역, 시기(월), 온보딩 선호 프로필, 북마크, 추천 피드백, 여행 일정 추천 받기 실행 이벤트필수 조건 충족 여부, 부족 조건 존재 여부구조화된 여행 조건 객체 또는 추가 질문
2. 테마·진입점 분류구조화된 조건LLM 분류 + 룰 기반 fallback테마 태그 + 진입점 유형
3. 후보 검색테마, 시기(월), 국내 지역RAG 유사도 점수, 계절 적합도후보 소도시 목록과 선정 근거 관광지 후보
4. 후보 필터링·순위후보 목록 + 혼잡도·Wikipedia 월별 날씨 경향·북마크·개인화 피드백 + 직전 추천 결과가중치 기반 스코어링, 세션 기반 가중치, 추천 다시 받기 요청 시 직전 후보 제외 또는 감점상위 1곳 선정
5. 일정 구성선정 소도시 1곳 + 일정 유형 + 축제 포함 여부 + 선정 근거 관광지 후보 + DynamoDB 관광지 목록일별 메인 관광지 1개, 서브 관광지, 장소 타입 균형, 식사 슬롯 분리1곳 일별 세부 일정 카드
6. Explainability 생성일정 + 사용자 조건 매칭 근거FR-REC-003 4요소 기준추천 이유 텍스트
7. 외부 정보 보강일정 카드지도·마커 간 이동 동선·Wikipedia 월별 날씨 경향·대체 일정 알림 팝업·숙소 링크최종 추천 결과

4.9 관리자 권한 및 RBAC 기능

본 절은 관리자 콘솔의 역할 기반 접근 제어(RBAC) 기능 요구사항을 정의한다. 권한 경계와 매트릭스는 2.6·2.7을 기준으로 하며, 인증 엔드포인트와 토큰·오류 응답 형식의 상세는 API 명세서에서 정의한다. 관리자 기능은 Production 운영 범위로 추진한다.

ID서비스/영역요구사항 내용비고
FR-ADMIN-001관리자 콘솔 인증 경계시스템은 R-ADMIN, R-SUPER-ADMIN, R-DATA-PROVIDER, R-LOCAL-OPERATOR 중 하나 이상의 활성 관리자 역할을 가진 사용자만 역할에 허용된 관리자 콘솔과 /admin 영역 API에 접근하도록 제한해야 한다. 관리자 역할이 없으면 거부한다.fail-closed
FR-ADMIN-002서버 측 인가 재검증시스템은 인증 이후에도 각 관리자 요청마다 역할과 리소스 범위를 서버 데이터로 재검증해야 하며, 요청 본문의 roles, regionIds, organizationId, reviewerId 등 권한·소유권 필드를 신뢰하지 않아야 한다.프론트 클레임 미신뢰
FR-ADMIN-003역할 Source of Truth시스템은 최종 권한을 서비스 DB의 활성 역할 할당으로 판단하고, 외부 인증 그룹(Cognito Group 등)은 보조 신호로만 사용해야 한다. 그룹이 있어도 활성 DB 할당이 없거나 정지 상태면 관리자 권한을 부여하지 않는다.권한 단일 출처
FR-ADMIN-004담당 지역 범위 제한시스템은 R-LOCAL-OPERATOR의 조회 범위를 활성 지역 할당이 있는 담당 지역(Assigned)으로 제한해야 한다. 할당 범위 밖 지역 요청은 빈 결과로 위장하지 않고 거부한다.region_id 기준
FR-ADMIN-005기관 소유 범위 제한시스템은 R-DATA-PROVIDER의 조회·수정 범위를 본인 또는 소속 기관이 제출한 제안(Own)으로 제한해야 한다. 다른 기관 제안, 내부 검토 메모, 전체 운영 지표는 제공하지 않는다.organization 기준
FR-ADMIN-006제안 검토·승인 권한시스템은 데이터 제안의 승인, 수정 요청, 반려 결정을 R-ADMIN에게만 허용해야 한다. R-DATA-PROVIDER와 R-LOCAL-OPERATOR는 제안을 직접 승인·반려할 수 없다.승인 책임 분리
FR-ADMIN-007데이터 제안–월간 여행지 게시 분리시스템은 데이터 제안 승인과 월간 여행지(이번 달 여행지) 게시를 분리해야 한다. 제안이 승인되어도 자동 게시하지 않으며, R-ADMIN만 월간 여행지 후보를 게시·비노출·만료·재검수 처리할 수 있다.승인≠게시
FR-ADMIN-008월간 여행지 유효기간·긴급 비노출시스템은 게시 유효기간이 지난 월간 여행지를 자동 추천과 일정 생성에서 제외하고, 축제 취소·휴장·교통 중단·안전 변경 시 정기 갱신을 기다리지 않고 비노출 또는 재검수 상태로 전환할 수 있어야 한다.운영 안전성
FR-ADMIN-009역할 조합·이해충돌시스템은 복수 역할 사용자의 권한을 역할별 허용 작업의 합집합으로 계산하되 범위 제한은 역할마다 따로 적용해야 하며, 제안 작성자 본인이 동일 제안을 검토(승인·반려)하는 것은 거부해야 한다.합집합 + 자기검토 금지
FR-ADMIN-010역할·지역 할당 관리시스템은 역할·지역 할당 변경을 고위험 변경 요청으로만 처리해야 한다. R-ADMIN 또는 R-SUPER-ADMIN이 요청하고, 요청자와 다른 R-SUPER-ADMIN 1명이 승인한 경우에만 실행하며 일반 역할 관리 API를 직접 노출하지 않는다.권한 관리 분리
FR-ADMIN-011공식 링크·제휴 링크 분리시스템은 공식 정보 이동(official_link_clicked)과 제휴·예약·검색 링크 이동(partner_link_clicked)을 이벤트·화면·리포트에서 분리해야 하며, B2G 공익 리포트에는 예약액·수수료·승인 GMV 등 재정 지표를 포함하지 않아야 한다. 목적지 선정·추천 순위·월간 노출에 제휴 수수료 지불 여부를 반영하지 않는다.공익/제휴 분리
FR-ADMIN-012지역 운영자 익명·집계 지표시스템은 R-LOCAL-OPERATOR와 기관 공유 리포트에 담당 지역 기준 익명·집계 데이터만 제공해야 한다. 개인 사용자 이벤트, 원시 로그, 세션 단위 행동 경로, 사용자 식별 정보는 제공하지 않으며, 최소 집단 크기 미만 통계는 숨김·병합·기간 확장 처리한다.프라이버시 보호
FR-ADMIN-013관리자 감사 로그시스템은 관리자 로그인·세션 갱신, 권한·범위 거부, 제안 상세 조회, 승인·수정 요청·반려, 월간 여행지 상태 변경, 게시 재시도, 공지·정책 변경과 고위험 요청 생성·승인·거절·역할·지역 변경 실행·대량 게시 실행을 성공·거부·실패 결과와 함께 감사 로그로 남겨야 한다. 성공한 고위험 변경의 상태 전이·실행과 감사 로그는 동일 트랜잭션에서 기록하며, 거부·실패 시도도 원장 변경 없이 별도 결과 행으로 남긴다. 토큰·쿠키·MFA 비밀값·민감 원본·전체 개인정보는 기록하지 않는다.C4 추적성
FR-ADMIN-014권한 오류 응답시스템은 관리자 권한 실패를 표준 오류 코드로 응답해야 한다(401 UNAUTHENTICATED/TOKEN_EXPIRED, 403 ADMIN_ACCESS_REQUIRED/ROLE_FORBIDDEN/SUPER_ADMIN_REQUIRED/REGION_SCOPE_FORBIDDEN/ORGANIZATION_SCOPE_FORBIDDEN/SELF_REVIEW_FORBIDDEN/ADMIN_MFA_REQUIRED/ADMIN_MFA_TOTP_REQUIRED/ADMIN_MFA_ENROLLMENT_REQUIRED, 404 NOT_FOUND, 409 ROLE_ASSIGNMENT_CONFLICT/INVALID_PROPOSAL_STATE/SELF_APPROVAL_FORBIDDEN, 429 ADMIN_MFA_LOCKED). 오류 메시지에 타 사용자 ID·기관명·지역 할당·리소스 존재 여부를 노출하지 않는다.API 명세 연계
FR-ADMIN-015단일 소도시 검수 원칙관리자 검수는 추천 요청 1건의 최종 목적지가 소도시 1곳인지 확인해야 하며, 공항·역·대도시 관문은 접근 안내에만 사용하고 추천 소도시의 일정 구성·성과 귀속에 포함하지 않아야 한다. 적합 소도시를 확정할 수 없으면 여러 도시를 섞어 승인하지 않고 추가 정보 요청 또는 추천 보류로 처리한다.단일 소도시 원칙
FR-ADMIN-016관리자 접근 재검토시스템 운영자는 활성 역할·지역 할당 전체를 분기마다 재검토하고 인사 이동·계약 종료·보안 사고 시 수시 재검토해야 한다. 최초 부여자와 다른 최종 확인자가 유지·축소·회수 여부를 승인하며, 불필요한 R-ADMIN·R-SUPER-ADMIN은 1영업일 이내 회수하고 권한 캐시·활성 세션을 무효화해야 한다. 검토 증적에는 토큰·쿠키·민감 원문을 포함하지 않는다.Access attestation
FR-ADMIN-017관리자 Step-up MFA시스템은 기존 로그인 경로를 변경하지 않고 고위험 요청 승인·거절 시점에만 관리자 도메인 MFA 등록과 최근 5분 이내 TOTP 세션을 요구해야 한다. 일반 admin 읽기·목록 경로, MFA 상태 조회, 고위험 요청 목록 조회·생성은 역할 인증만으로 접근 가능해야 한다. MFA 비밀값은 서버 측 암호화 저장소로 보호하고, TOTP 재사용·연속 실패·복구 코드 사용을 제한하며, MFA 등록·확인·인증·복구 시도를 감사 로그로 남겨야 한다. 복구 코드로 만든 세션은 고위험 요청 승인·거절에 사용할 수 없다.로그인 소유 경계 유지
FR-ADMIN-018고위험 변경 2인 승인시스템은 역할 부여·회수, 지역 부여·회수, 월간 여행지 10~100건 대량 게시를 pending 고위험 요청으로 등록해야 한다. 요청자와 다른 R-SUPER-ADMIN 1명이 승인하면 대상 변경과 감사 로그를 하나의 트랜잭션으로 실행하고 상태를 executed로 전환하며, 거절하면 사유와 함께 rejected로 전환해야 한다. 마지막 활성 R-SUPER-ADMIN 회수와 자기 요청 결정은 거부한다.C2 2인 통제
FR-ADMIN-019권한 승인 탭admin_web은 권한 승인 탭에서 pending 고위험 요청을 로그인 직후 eager loading하고, pending count가 50건 이상이면 50+ badge로 표시해야 한다. R-ADMIN은 목록 조회·요청 생성만 가능하고 승인·거절 버튼을 보지 않으며, R-SUPER-ADMIN은 승인·거절 클릭 시점에 backend 403 응답을 기준으로 TOTP MFA 모달을 표시해야 한다. approve/reject 요청 본문에는 TOTP code를 포함하지 않는다.admin_web UX 정합화

5. API 연동 요구사항

각 플랫폼 API는 역할을 분담하여 지도, 장소, 마커 간 이동 동선, 외부 탐색 링크를 보완 제공한다.

월별 날씨 경향은 API 호출 대상이 아니라 Wikipedia에서 추출·전처리한 추천용 정적 데이터로 관리한다.

클라이언트 측 직접 호출이 불가한 REST API는 딥링크 또는 백엔드 프록시로 대체한다.

G
Google Maps Platform
장소 상세 · 사진 · 주변 명소 (전 지역)

역할: 플랫폼 공통 지도 + Places API로 실시간 장소 정보

상태: ✓ 클라이언트 직접 연동

K
Kakao Maps
카카오 지도 · 주변 맛집·숙박 (국내 전용)

역할: 카카오 지도 SDK + Local REST API (맛집 검색)

상태: △ SDK + REST Key 선택

ORS
OpenRouteService
마커 간 이동 경로 · 시간 · 거리 계산

역할: Directions API로 일정 마커 간 경로 폴리라인을 계산하고, Matrix API로 후보 장소 간 이동 시간·거리 비교를 보조

상태: △ 백엔드 프록시 또는 서버 환경 변수 기반 연동

Y
Yahoo Japan
일본 여행 · 숙박 · 맛집 (일본 전용)

역할: Yahoo Travel · じゃらん · 食べログ 딥링크

상태: P5 재검토 보류

5.1 Google Maps Platform

항목내용
역할장소 상세 정보, 지도 표시, 주변 명소 검색 (전 지역 공통)
사용 APIMaps JavaScript API, Places API — Text Search / Find Place / Get Details / Nearby Search
연동 방식JavaScript SDK — 클라이언트 직접 호출 가능
필수 키Google Cloud API Key (Maps JS API + Places API 활성화 필요)
제공 데이터리뷰 수, 사진(최대 4장), 운영시간, 현재 영업 여부, 공식 사이트, 주변 명소(반경 3km)
적용 국가국내 소도시 우선. 일본 소도시는 P5 재검토
CORS 제약없음 — SDK 방식으로 브라우저에서 직접 사용 가능

5.2 Kakao Maps

항목내용
역할국내 소도시 카카오 지도 표시, 주변 맛집·카페·숙박 검색
사용 APIKakao Maps JavaScript SDK (지도), Kakao Local REST API (주변 검색)
연동 방식JavaScript SDK (지도): 클라이언트 직접 / Local REST: REST Key 필요
필수 키Kakao JavaScript App Key (지도 필수), Kakao REST API Key (로컬 검색, 선택)
제공 데이터카카오 지도, 주변 맛집/카페/숙박 검색 결과, 장소 URL
적용 국가국내 소도시 전용
CORS 제약Maps SDK: 없음 / Local REST: 등록 도메인 한정 (로컬 파일 환경 제약) → 오류 시 딥링크 대체

5.3 OpenRouteService

항목내용
역할일정 마커 간 이동 경로 표시, 후보 장소 간 이동 시간·거리 비교
사용 APIDirections API, Matrix API
연동 방식백엔드 프록시 또는 서버 환경 변수 기반 호출. 응답의 geometry/polyline과 duration/distance를 프론트 지도 레이어에 전달
필수 키OpenRouteService API Key
제공 데이터경로 geometry, 총 거리, 예상 이동 시간, 후보 지점 간 시간·거리 행렬
적용 국가PoC/P1은 한국 강원·경북 일정 동선 표시 기준. 일본 트랙은 P5 재검토
제약사항호출량 제한, 지점 수 제한, 네트워크 실패를 고려해 후보 수 제한, 캐시, 직선 연결 또는 목록 중심 폴백 UI를 적용한다. 지도 렌더링 자체는 Google Maps 또는 Kakao Maps가 담당한다.

5.4 Yahoo Japan (P5 재검토)

⚠ Yahoo Japan Maps JS SDK 지원 중단:

Yahoo Japan Maps JavaScript SDK(Yjans)가 서비스 종료되어 일본 소도시 지도는 Google Maps API로 대체 제공한다. Yahoo Japan REST API는 CORS 제한으로 클라이언트 직접 호출이 불가하며, 일본 데이터 수집 경로 복구 전까지 PoC/P1 기능 요구사항에서 제외한다.

항목내용
역할일본 소도시 여행 정보, 숙박·음식점 플랫폼 딥링크 제공
사용 APIYahoo Japan Local Search REST API (향후), じゃらん/食べログ/楽天トラベル 딥링크 (현재)
연동 방식P5 재검토: 딥링크 URL 제공 또는 백엔드 프록시를 통한 REST API 연동
필수 키Yahoo Japan App ID (향후 적용 예정, 현재 입력 항목만 준비)
제공 데이터Yahoo Japan Maps 링크, Yahoo Travel 링크, じゃらん, 食べログ, 楽天トラベル 링크
추가 딥링크一休, Booking.com, Agoda, Google Hotels, Retty, Hot Pepper, Instagram 해시태그 검색 링크
적용 국가일본 소도시 전용(P5 재검토)
지도 대체Yahoo Japan Maps JS SDK 지원 중단 → Google Maps 대체 제공

5.5 API 연동 현황 요약

플랫폼역할 특화지도 SDKREST API현재 상태
Google Maps장소 상세·사진·주변 명소✓ 지원✓ 지원클라이언트 직접 연동
Kakao Maps맛집·카페·숙박 검색✓ 지원△ 조건부SDK + REST Key 선택
OpenRouteService마커 간 경로·시간·거리—△ Key 필요백엔드 프록시 권장
Yahoo Japan일본 여행·숙박·맛집✗ SDK 중단✗ CORSP5 재검토

6. 비기능 요구사항

6.1 성능

ID요구사항 내용비고
NFR-001챗봇 응답은 사용자 입력 후 1.5초 이내에 시작되어야 한다—
NFR-001B멀티스텝 에이전트 전체 처리(분류→검색→선정→일정 구성)는 8초 이내를 목표로 한다단계별 병렬화 고려
NFR-001CRAG 벡터 검색은 1초 이내에 결과를 반환해야 한다—
NFR-002지도 초기 렌더링은 SDK 로드 완료 후 2초 이내에 완료되어야 한다—
NFR-003Google Places API 호출은 결과 수신까지 3초 이내를 목표로 한다—
NFR-004Wikipedia 월별 날씨 경향 데이터 조회는 2초 이내를 목표로 한다사전 적재·캐시 활용
NFR-005API 타임아웃 시 오류 메시지를 표시하고 기본 정보로 폴백한다폴백 UI 필수

6.2 보안

ID요구사항 내용비고
NFR-010API 키는 클라이언트 로컬 스토리지에 저장하며 외부 서버로 전송하지 않는다데모 환경 기준
NFR-011서비스 배포 시 API 키는 이 서비스를 개발·운영하는 백엔드/운영 개발자가 환경 변수 또는 서버 사이드에서 관리한다배포 환경 적용
NFR-012Google API 키에 HTTP Referer 제한을 설정하여 무단 사용을 방지한다—
NFR-013사용자 대화 로그(채팅 내용 전문)는 저장하지 않으며, 서버나 외부 저장소로 전송하지 않는다. 단, 추천으로 생성된 여행 일정, 사용자가 명시적으로 표현한 선호(온보딩 답변, 좋아요/싫어요, 북마크), 공개 일정 복제 이력은 PoC 단계에서는 브라우저 로컬 스토리지에, Production 단계에서는 로그인 사용자 계정에 저장할 수 있다.저장 대상 분리
NFR-014현재 위치는 사용자의 명시적 동의가 있거나 사용자가 기준 위치를 직접 입력한 경우에만 추천 반경 계산에 사용한다. 위치 데이터는 추천 요청 처리 목적에 한정한다.위치 정보 최소화
NFR-015사용자는 저장 일정, 북마크, 추천 피드백, 공개 일정 복제 이력 데이터를 조회하고 삭제할 수 있어야 한다.사용자 통제권
NFR-016관리자 콘솔과 /admin 영역 API는 인증·역할·범위를 확인할 수 없으면 fail-closed로 거부해야 한다.관리자 인증
NFR-017서비스 토큰의 역할·기관·지역 클레임은 서버가 DB 활성 할당으로 계산해 발급하며, 클라이언트가 전달한 권한 필드는 신뢰하지 않는다.토큰 무결성
NFR-018역할 할당을 정지하면 신규 토큰·세션 갱신에서 관리자 권한이 즉시 제거되어야 하며, 기존 access token은 최대 15분 TTL까지만 유효하다. 즉시 회수가 필요하면 active-session 검증 또는 denylist를 사용한다.권한 회수
NFR-019관리자 프론트는 승인된 고정 origin만 credentialed CORS로 허용하고 wildcard origin을 허용하지 않으며, Mock SSO·역할 선택 UI는 개발 모드 전용으로 운영 빌드에서 제거·비활성화한다.관리자 CORS

6.3 호환성 및 접근성

ID요구사항 내용비고
NFR-020Chrome, Safari, Edge 최신 버전에서 정상 동작해야 한다—
NFR-021모바일(iOS/Android) 브라우저에서 사용 가능해야 한다반응형 레이아웃
NFR-022화면 너비 375px 이상에서 주요 기능이 모두 사용 가능해야 한다iPhone SE 기준
NFR-023다크 모드를 지원해야 한다—

7. 데이터 요구사항

7.1 필요 데이터 항목

본 절은 저장 구조 설계가 아니라, 로브 서비스가 추천·설명·검증을 수행하기 위해 확보해야 하는 데이터의 종류를 정의한다.

데이터 구분필요 내용
목적지 기본 정보소도시명, 국가, 지역, 대표 설명, 주요 이미지, 위치 좌표, 접근 방법
테마 분류 정보초기 6개 테마와 공예·웰니스·액티비티 등 확장 테마 관련 태그
계절·시기 정보월별 또는 계절별 추천 적합도, 방문하기 좋은 시기, 비추천 시기와 그 사유
축제·행사 정보행사명, 개최 지역, 개최 시기, 간단 설명, 공식 또는 참고 링크
혼잡도·대체지 정보혼잡 가능성이 높은 관광지, 대체 방문지, 대체 시간대, 분산 추천 사유
지도·장소 정보Google Maps, Kakao Maps, Yahoo Japan 등 외부 플랫폼에서 확인 가능한 지도, 장소 상세, 후속 탐색 링크
Wikipedia 월별 날씨 경향 정보 (추천용)소도시별 1~12월 날씨 경향(맑음 적합도, 우천·폭설·장마·태풍 경향), 출처 URL, 추출 기준일
추천 근거 정보추천 이유, 사용자 조건과의 매칭 근거, 참고 출처, 검증 상태, 신뢰도 표시 정보
온보딩 선호 정보사용자가 선택한 대도시 스타일, 매핑된 기본 테마, 선호 테마 프로필, 재응답 이력
저장 일정·피드백 정보저장된 추천 일정, 일정 유형, 좋아요/싫어요 피드백, 피드백 대상 소도시와 테마 태그
일정 구성 후보 데이터소도시 선정 근거 관광지 후보, DynamoDB에서 재인출한 서브 관광지 후보, 장소 타입, 테마 태그, 식사 슬롯 후보
추천 실행 이벤트추천 요청 시각, 입력 조건, 진입 방식, 필수 조건 충족 여부
재추천 이벤트직전 추천 결과, 재추천 요청 시각, 유지 조건, 변경 조건, 제외 또는 감점 후보
북마크 데이터소도시 북마크, 대도시 북마크, 저장 시각, 국가, 지역, 목적지 ID
Cold Start 기준 데이터관광공사·지자체 추천 루트, 여행 유튜버 루트, 내부 검증 루트, 출처 URL, 신뢰도
세션 개인화 데이터북마크, 좋아요/싫어요, 목적지 태그, 외부 링크 클릭, 공개 일정 복제 이력
애니메이션 성지 정보 (P5 재검토 보류)작품명, 장소명, 도시/지역, 국가, 작품과의 관계, 공식 배경지 여부, 작가 고향, 공식 콜라보, 팬 성지 여부, 분위기 유사 태그, 근거 URL, 신뢰도, 방문 가능 여부, 장소 유형 — 일본 데이터 수집 경로 복구 후 확보
일본 목적지 특화 정보 (P5 재검토 보류)일본어 명칭, 도도부현, 지역권, 여행 스타일 태그, 추천·비추천 계절, 주요 도시 기준 이동시간, 환승 횟수, 가까운 공항, 뚜벅이 가능 여부, JR/지역 교통패스, 일본어 검색 키워드 — 일본 데이터 수집 경로 복구 후 확보
일본 현지 탐색 링크 (P5 재검토 보류)Yahoo Travel, じゃらん, 楽天トラベル, 一休, Booking.com, Agoda, Google Hotels, 食べログ, Retty, Hot Pepper, Google Maps, Instagram 해시태그 검색 링크 — 일본 데이터 수집 경로 복구 후 확보
지역 문화 체험 정보체험 유형, 체험 시간, 난이도, 예약 필요 여부, 참여 방식, 우천 적합성, 주변 마을·축제 연계 정보
사계절 액티비티 정보액티비티 종류, 적합 계절·시기, 눈·파도·수온·월별 날씨 조건, 난이도, 강습 가능 여부, 장비 대여 정보, 주변 휴식 코스
대체 일정 정보Wikipedia 월별 날씨 경향에 따른 실내·우천 적합 대체 일정, 대체 일정 제공 조건, 알림 팝업 표시 여부
외부 행동 링크지도 열기, 공식 관광 정보, 예약, 교통, 숙박, 맛집, 현지 플랫폼으로 이어지는 링크
별 관측 후보 데이터광해 등급, 월령, 구름량, 대기 안정도, 투명도, 관측 시설·예약 링크 등 향후 검토 후보 데이터
치유·웰니스 후보 데이터회복 활동 유형, 한적함·저자극 정도, 온천·숲 치유·템플스테이·명상 운영 정보 등 향후 검토 후보 데이터
예산 역산 후보 데이터교통비, 숙박비, 식비, 액티비티 비용 추정치 등 향후 검토 후보 데이터
역할 할당 데이터사용자 ID, 역할 코드, 소속 기관 ID, 할당 상태(active/suspended/revoked), 효력 기간(valid_from/valid_until), 부여자 ID
지역 할당 데이터사용자 ID, 표준 지역 ID(region_id), 담당 기관 ID, 할당 상태, 효력 기간, 부여자 ID
월간 여행지 운영 데이터소도시 ID, 지역 ID, 근거 제안 ID(nullable), 노출 기준 월, 테마 코드, 공식 출처명·링크·최종 확인일, 게시 유효기간, 게시 상태(candidate/scheduled/published/hidden/expired/rejected), 게시 처리자·시각
관리자 감사 로그 데이터발생 시각, 행위자 ID, 세션 ID, 역할·기관·지역 스냅샷, 작업, 리소스 유형·ID, 처리 결과, 사유 코드, 요청 ID, 변경 전·후 허용 요약(토큰·민감 정보 제외)
공식·제휴 링크 이벤트 데이터공식 정보 이동(official_link_clicked)과 제휴·예약·검색 링크 이동(partner_link_clicked)을 분리 기록한 이벤트. B2G 리포트에서 재정 지표와 합산하지 않음

7.2 데이터 품질 기준

품질 기준요구사항
지역 커버리지PoC/P1은 한국 강원·경북 소도시 데이터를 우선 확보하고, 한국 전국 확장은 P2로 둔다. 일본 소도시 데이터는 수집 경로 복구 후 P5에서 재검토하며, 향후 일본 트랙을 운영할 때는 국가별 추천 흐름을 독립적으로 운영한다.
테마 커버리지각 테마별로 추천 후보를 구성할 수 있을 만큼 충분한 목적지와 설명 데이터를 확보해야 한다.
최신성축제, 영업 정보, 혼잡도처럼 변동성이 높은 데이터는 갱신 시점 또는 유효 기간을 함께 관리해야 한다. 월별 날씨 경향은 Wikipedia 추출 기준일과 출처 URL을 함께 관리해야 한다.
출처 추적성추천 결과에 사용된 주요 데이터는 사용자가 신뢰할 수 있도록 출처 또는 확인 가능한 링크를 제공해야 한다.
설명 가능성추천 결과는 단순 목록이 아니라 사용자 조건과 어떤 데이터가 매칭되었는지 설명할 수 있어야 한다.
결측 대응필수 데이터가 부족한 목적지는 추천에서 제외하거나, 부족한 정보와 대체 안내를 명확히 표시해야 한다.
국가별 분리한국 여행 요청에는 한국 소도시 데이터만 사용한다. 일본 여행 요청에 일본 소도시 데이터만 사용하는 분리 원칙은 일본 트랙 P5 재검토 시 적용한다.

정의 범위:

본 문서는 어떤 데이터가 필요한지를 정의한다.

테이블 구조, 컬렉션 구조, 인덱스, 저장소 선택 등 저장 구조 설계는 별도 설계 문서에서 다룬다.

8. 제약사항 및 가정

8.1 기술적 제약사항

일본 데이터 수집 실패:

일본 소도시·축제·방문 통계·월별 날씨 경향 데이터의 수집 경로 확보와 로컬 검증에 실패하여, 일본 추천 트랙은 후보·축제·방문 통계·날씨 검증 근거가 부족하다. 이에 따라 PoC/P1은 한국 강원·경북 데이터 기반 추천으로 고정하고, 한국 전국 확장은 P2로 둔다. 일본 데이터 기반 추천과 일본 현지 데이터/API 연동(Yahoo Japan·じゃらん 등 현지 플랫폼, 일본어 검색 키워드, 애니메이션 성지순례)은 최하위 우선순위인 P5 재검토 범위로 보류한다. 일본 데이터는 수집 경로와 출처 정합성 기준, 로컬 검증 산출물이 확보되기 전까지 추천 근거로 사용하지 않는다. 수집 경로가 복구되면 한국 트랙과 동일한 나라별 독립 트랙 기준으로 재승격을 검토한다.

Yahoo Japan Maps SDK 지원 중단 (일본 트랙 P5 재검토 시 적용):

Yahoo Japan Maps JavaScript SDK(Yjans)가 지원 중단되어, 향후 일본 트랙을 재개할 경우 일본 소도시 지도는 Google Maps API로 대체 제공한다.

Yahoo Japan REST API CORS:

Local Search 등 REST API는 CORS 제한이 있다. 향후 백엔드 프록시 서버를 통해 연동한다. App ID는 향후 사용을 위해 입력 항목만 준비한다.

Kakao REST API 도메인 제약:

로컬 파일 환경( file:// )에서는 CORS 정책으로 Kakao Local REST API 호출이 제한될 수 있다. 등록된 도메인 환경에서 정상 동작한다.

Google Places API 과금:

Places API는 무료 한도 초과 시 과금이 발생한다. 서비스 규모에 따른 비용 산정이 필요하다.

8.2 가정사항

9. 예산안·인력 분배·개발 기한

본 섹션은 로브 서비스의 MVP 개발을 위한 예산, 수행 인력, 개발 기간을 정의한다. 금액과 일정은 요구사항 정의 단계의 기준값이며, 외부 API 사용량, 데이터 확보 범위, Production 전환 승인 여부에 따라 조정될 수 있다.

9.1 예산 산정 기준

구분산정 기준비용 유형
초기 구축비기획, UI/UX, 프론트엔드, 백엔드, 데이터 구축, QA 등 개발 착수부터 최종 정리까지 필요한 일회성 작업 비용고정비 또는 인건비
사용량 기반 비용AWS, Runpod, OpenAPI, 외부 지도 API처럼 호출량, 저장량, 실행 시간에 따라 달라지는 비용변동비
운영비배포 이후 모니터링, 장애 대응, 데이터 갱신, API Key 관리에 필요한 반복 비용월 운영비
미정 항목인건비, 외부 API 호출량, 데이터 확보 범위가 확정되지 않은 항목은 TBD 로 표시하고 상세 설계 후 확정한다.추후 산정

9.2 예산안

예산 구분예산포함 항목반영 방향비고
기획·PMTBD요구사항 정리, 일정 관리, 이해관계자 조율문서화 및 일정 관리 비용으로 분리인건비 산정 필요
UI/UXTBD화면 설계, 사용자 흐름, 디자인 시스템데모와 MVP 범위를 구분인건비 산정 필요
프론트엔드TBD챗봇 UI, 지도, 결과 화면, 반응형 구현사용자-facing 개발 비용으로 분리인건비 산정 필요
백엔드/APITBDRAG 파이프라인, 외부 API 프록시, 인증·인가서버 구현 및 API 연동 비용으로 분리인건비 산정 필요
데이터 구축TBD소도시, 축제, 장소, 출처 데이터 정리초기 구축과 정기 갱신 비용 구분데이터 범위 확정 후 산정
AI 실행 (Runpod)$300GPU 실행, 모델 서빙, 배치 작업AI 실행 사용량 기반 변동비로 정의Runpod 사용량 기준 관리
LLM/API 사용 (OpenAPI)$300LLM API, 임베딩, 벡터 검색LLM·임베딩 사용량 기반 변동비로 정의OpenAPI 사용량 기준 관리
외부 APITBDGoogle Maps, Kakao Maps, OpenRouteService 등무료 한도와 과금 전환 조건 명시호출량 확정 후 산정
인프라300,000원AWS 호스팅, DB, 스토리지, 모니터링MVP와 운영 전환 비용 분리AWS 예산
QA/검증TBD기능 테스트, 접근 제어, 데이터 품질 검증릴리스 전 필수 검증 비용으로 정의인건비 산정 필요
운영·유지보수TBD장애 대응, 데이터 갱신, API Key 관리월별 운영 비용으로 정의운영 범위 확정 후 산정
확정 예산 합계300,000원 + $600AWS 300,000원, Runpod $300, OpenAPI $300통화별 확정 예산 합계원화와 달러 예산을 분리 관리

9.3 인력 역할 정의

역할주요 책임MVP 기준 투입
PM/기획범위 관리, 요구사항 정리, 일정·리스크 관리1명
UI/UX 디자이너사용자 흐름, 화면 설계, 디자인 가이드1명
프론트엔드 개발자챗봇 UI, 추천 결과, 지도·월별 날씨 경향 화면 구현1~2명
백엔드 개발자API, 인증·인가, 외부 API 프록시, API Key 환경 변수 관리, 운영 기능1~2명
AI/RAG 엔지니어추천 파이프라인, RAG, 프롬프트, 평가 기준1명
데이터 담당자목적지·축제 데이터 수집, 정제, 출처 관리1명
QA 담당자테스트 계획, 기능 검증, 권한·데이터 품질 검증0.5~1명
운영 담당자배포, 모니터링, API Key 교체·만료 대응, 장애 대응0.5~1명

역할 구분:

본 절의 PM, 개발자, QA 등은 프로젝트 수행 인력 역할이며, 2. 이해관계자의 R-USER, R-LOCAL-OPERATOR, R-ADMIN 등 서비스 권한 Role ID와 구분한다.

9.4 단계별 인력 분배

구분기간핵심 투입보조 투입목표
M1 PoC 완료2026-05-22 ~ 2026-06-12PM/기획, 데이터, DB, AI/RAG, 백엔드, 프론트엔드, UI/UXQA요구사항·WBS·기획서·데이터 수집·DB 설계·데이터 조회·AI 전처리·모델·시스템 아키텍처·화면/UX 기초 설계 완료
M2 중간 발표2026-06-13 ~ 2026-06-16PM/기획, UI/UX, 프론트엔드, AI/RAG백엔드, QA화면설계서 확정·시스템 구성도·중간 발표 PT·발표 QA 완료
M3 Production2026-06-17 ~ 2026-07-16프론트엔드, 백엔드, AI/RAG, 인프라, QAPM/기획, 데이터, 운영 담당자LLM 서비스·RAG 파이프라인·AWS 배포·실서비스화·통합 테스트·최종 산출물 제출 완료

9.5 개발 기한 및 마일스톤

9.5.1 마일스톤 요약

마일스톤마감일범위주요 산출물
M1 PoC 완료2026-06-12Sprint 1~3요구사항 정의서, WBS, 프로젝트 기획서, 수집 데이터, DB 설계문서, 데이터 조회 프로그램, AI 전처리·학습 결과, 시스템 아키텍처, 화면/UX 기초 설계
M2 중간 발표2026-06-16Sprint 4화면설계서 확정본, 시스템 구성도, 중간 발표 PT, 중간 발표 QA
M3 Production2026-07-16Sprint 5~9LLM 활용 소프트웨어, AWS 배포 환경, LLM 연동 웹앱, 테스트 계획·결과 보고서, 웹 테스트 보고서, 최종 발표 PT, 시연 영상, 소스코드, 최종 제출물

9.5.2 스프린트별 개발 기한

Sprint기간마일스톤주요 목표
Sprint 12026-05-22 ~ 2026-05-31M1요구사항 정의서, WBS, 협업 환경, 프로젝트 기획·명세 초안
Sprint 22026-06-01 ~ 2026-06-07M1기획서, 데이터 수집, DB 설계, 데이터 조회 프로그램, Agent·Backend 기반 작업
Sprint 32026-06-08 ~ 2026-06-12M1AI 전처리·학습·모델, RAG 검증, 시스템 아키텍처, 화면/UX 기초 설계, PoC 완료
Sprint 42026-06-13 ~ 2026-06-16M2화면설계서 확정본, 시스템 구성도, 중간 발표 PT, 발표 QA
Sprint 52026-06-17 ~ 2026-06-21M3LLM 선정, RAG 파이프라인, 프롬프트 최적화, 핵심 웹앱 기능 구현
Sprint 62026-06-22 ~ 2026-06-28M3AWS 배포 환경, LLM 연동 웹앱 실서비스화, 운영·관리 기능 구현, 단위 테스트
Sprint 72026-06-29 ~ 2026-07-05M3테스트 계획서, 통합 테스트, 모델링 테스트 보고서
Sprint 82026-07-06 ~ 2026-07-12M3웹 테스트 보고서, 최종 발표 PT, 시연 영상, 소스코드 정리, 운영 가이드
Sprint 92026-07-13 ~ 2026-07-16M3최종 발표·시연, 데모 QA, 피드백 반영, 산출물 최종 제출

9.6 예산·인력·일정 관리 원칙

10. 변경 이력

버전날짜작성자변경 내용
v3.02026-07-02Codex관리자 MFA 필수 범위를 고위험 승인·거절 시점으로 정정하고 admin_web 권한 승인 탭, pending badge, decision-time TOTP 모달 요구사항 추가
v2.92026-06-30CodexR-SUPER-ADMIN 역할 모델, 역할·지역·대량 게시 고위험 변경 2인 승인, 최근 TOTP 재인증, C4 감사 로그 커버리지 요구사항 추가
v2.82026-06-30Codex기존 로그인 경로를 변경하지 않는 관리자 Step-up MFA 요구사항과 권한 매트릭스 행 추가
v2.72026-06-30Codex분기별 관리자 역할·지역 접근 재검토, 독립 확인, 회수 기한, 캐시·세션 무효화 요구사항 추가
v2.62026-06-30Codex관리자 권한 매트릭스에 감사 로그 조회 행을 추가해 관리자 콘솔 audit 탭 권한과 정합화
v2.52026-06-30Codex관리자 권한 오류 응답의 401 코드명을 API 명세와 동일하게 UNAUTHENTICATED로 통일
v2.42026-06-25Codex날씨 정책 확정: Wikipedia 추출 월별 날씨 경향 데이터와 월별 기상 영향 발생 시 대체 일정 추가 알림 팝업 요구사항 반영
v2.32026-06-25Codex지도 마커 간 이동 동선 표시 요구사항 추가: OpenRouteService Directions API 기반 경로 폴리라인, Matrix API 기반 후보 장소 간 이동 시간·거리 비교, API Key 백엔드 관리와 폴백 UI 기준 반영
v2.22026-06-25Codex최종 기획서 기준으로 요구사항 범위를 재정렬: PoC/P1을 한국 강원·경북, 일정 길이를 당일치기~2박3일로 고정하고 위치 반경·즉흥 일정 조정·개인화 랭킹을 핵심 범위에서 제외. 메인 관광지·서브 관광지·식사 슬롯·사용자 일정 수정 원칙을 추가
v2.12026-06-25로브 기획팀관리자 RBAC 명세 반영: §2.6 RBAC 권한 경계와 §2.7 관리자 권한 매트릭스, §4.9 관리자 권한 및 RBAC 기능(FR-ADMIN-001~015), 관리자 인증·토큰·회수·CORS 비기능 요구사항(NFR-016~019), 역할·지역·월간 여행지·감사 로그·공식/제휴 링크 분리 데이터 항목 추가
v2.02026-06-25로브 기획팀일본 데이터 수집 실패 리스크를 반영해 프로젝트 기획서(00_project_plan v0.11)와 동기화. 일본 데이터 기반 추천·일본 현지 데이터/API 연동(일본어 검색 키워드 FR-JP-005, 애니메이션 성지순례 FR-ANIME-001~003, 일본 현지 탐색 링크 FR-API-006)을 최하위 우선순위 P5 재검토 범위로 강등하고, PoC/P1을 한국 강원·경북 데이터 기반 추천으로 고정, 한국 전국 확장을 P2로 정리. 양국 공통 FR의 일본 부분을 P5 보류로 표기하고 §8에 일본 데이터 수집 실패 제약 추가
v1.92026-06-23로브 기획팀01 요구사항 보조 문서 백업·인덱스화, P1~P5 보조 문서 반영 기준, P5 향후 검토 후보, 별 관측 후보 데이터, 대표 문서 동기화 기준 반영
v1.82026-06-01로브 기획팀여행 일정 추천 받기 CTA와 추천 다시 받기 요구사항, 재추천 이벤트 데이터 정의 추가
v1.72026-06-01로브 기획팀GitHub Projects Lovv WBS 기준으로 개발 기한, M1/M2/M3 마일스톤, Sprint 1~9 일정, Production 종료일을 정합화
v1.62026-06-01로브 기획팀개인화 확장 요구사항 반영: 북마크, 방문 기록, cold start, 소도시 랭킹, PoC ML 랭킹, Production 개인화 데이터 누적, 개인화 랭킹 1차 운영, 위치 반경 추천, 여행 중 즉흥 일정 조정 추가
v1.52026-05-29로브 기획팀개인화 온보딩, 지도 마커 진입, 소도시 1곳 집중 일정, 월별 날씨 경향 기반 추천, 숙소 검색 링크 정책, 추천 파이프라인 명세 반영
v1.4.22026-05-27로브 기획팀인프라 300,000원 예산을 복원하고 Runpod AI 실행 $300, OpenAPI LLM/API $300으로 달러 예산 분리
v1.42026-05-27로브 기획팀Runpod $300과 OpenAPI $300을 AI 실행·LLM 통합 예산으로 관리하도록 예산안과 관리 원칙 수정
v1.32026-05-27로브 기획팀지역 문화 체험, 치유·웰니스, 사계절 액티비티 확장 테마와 예산 역산·날씨 기반 직접 질의 진입점 반영
v1.22026-05-27로브 기획팀예산안, 인력 분배, 개발 기한 섹션 추가. PoC/Production 일정 기준 반영
v1.12026-05-26로브 기획팀6개 테마 여정 추천 도입, 계절·축제 연동 추가, RAG·멀티스텝 에이전트 기반으로 추천 엔진 정의 (규칙기반→RAG 전환), 소도시 필요 데이터 항목에 테마·계절·축제·추천 근거 정보 추가
v1.02026-05-26로브 기획팀최초 작성 — 기능 요구사항, API 연동 명세, 비기능 요구사항 초안