AI 기반 캠핑장 추천 플랫폼입니다. 사용자의 취향과 요구사항을 분석하여 한국 내 최적의 캠핑장을 추천합니다.
| 분류 | 기술 |
|---|---|
| 프레임워크 | Next.js 16, React 19, TypeScript 5 |
| 스타일링 | Tailwind CSS 4, PostCSS |
| AI | OpenAI API, Vercel AI SDK |
| 데이터베이스 | Vercel Postgres |
| 데이터 수집 | Cheerio (웹 스크래핑) |
| 스키마 검증 | Zod 4 |
| 패키지 매니저 | pnpm |
├── app/ # Next.js App Router
│ ├── page.tsx # 홈페이지 (히어로 + 인기 캠핑장)
│ ├── chat/ # AI 채팅 인터페이스
│ ├── questions/ # 질문 플로우 위저드
│ ├── results/ # 추천 결과 페이지
│ └── api/ # API 라우트
│ ├── chat/ # OpenAI 스트리밍 채팅
│ ├── db/ # 데이터베이스 설정
│ └── thankq/ # 땡큐캠핑 API 연동
├── components/ # 재사용 가능한 UI 컴포넌트
│ ├── home/ # 홈페이지 컴포넌트
│ ├── chat/ # 채팅 컴포넌트
│ ├── question-flow/ # 질문 위저드 컴포넌트
│ └── recommendation/ # 결과 표시 컴포넌트
├── lib/ # 비즈니스 로직
│ ├── data/ # 정적/동적 데이터
│ ├── services/ # 핵심 서비스
│ │ ├── recommendation.ts # 추천 점수 알고리즘
│ │ ├── thankq-api.ts # 땡큐캠핑 API
│ │ └── thankq-cache.ts # 캐시 관리
│ ├── db/ # 데이터베이스 레이어
│ └── types/ # TypeScript 타입 정의
└── public/ # 정적 파일
# 의존성 설치
pnpm install
프로젝트 루트에 .env.local 파일을 생성하세요:
# OpenAI API (필수)
OPENAI_API_KEY=sk-...
# Vercel Postgres (선택)
POSTGRES_PRISMA_URL=postgresql://...
POSTGRES_URL_NON_POOLING=postgresql://...
# 개발 서버 실행
pnpm dev
# 프로덕션 빌드
pnpm build
# 프로덕션 서버 시작
pnpm start
# 린트 검사
pnpm lint
개발 서버는 http://localhost:3000에서 실행됩니다.
12가지 요소를 분석하여 캠핑장을 추천합니다:
| 질문 | 가중치 | 설명 |
|---|---|---|
| 출발 위치 | 9 | 수도권, 충청도, 강원도 등 6개 지역 |
| 캠핑 경험 | 7 | 초보부터 전문가까지 4단계 |
| 목적 | 8 | 힐링, 액티비티, 가족, 커플, 단체, 풍경 |
| 계절 | 6 | 봄, 여름, 가을, 겨울 |
| 환경 | 10 | 산, 계곡, 해변, 호수, 숲 |
| 캠핑 스타일 | 8 | 오토, 글램핑, 카라반, 펜션, 백패킹 |
| 동반자 | 8 | 솔로, 커플, 가족, 친구, 반려동물 |
| 우선순위 | 9 | 뷰, 조용함, 시설, 접근성, 액티비티, 가격 |
| 예산 | 5 | 4단계 가격대 |
| 사이트 특성 | 6 | 넓은 사이트, 그늘, 프라이빗, 평지, 수변 |
| 필수 시설 | 6 | 샤워장, 화장실, 전기, 수도, 매점, Wi-Fi |
| 불호 요소 | 7 | 시끄러움, 혼잡함, 벌레, 화장실 거리, 비포장 |
| 엔드포인트 | 메서드 | 설명 |
|---|---|---|
/api/chat |
POST | AI 채팅 (스트리밍) |
/api/thankq/search?keyword= |
GET | 캠핑장 검색 |
/api/thankq/[campSeq] |
GET | 캠핑장 상세 정보 |
/api/db/setup |
GET | 데이터베이스 초기화 |
/api/db/migrate |
GET | 스키마 마이그레이션 |
Vercel에서 쉽게 배포할 수 있습니다:
이 프로젝트는 비공개 프로젝트입니다.