# ✈️ Travel Planner **스마트한 여행 계획 관리 시스템** 다중 사용자를 지원하는 현대적인 여행 계획 웹 애플리케이션입니다. 여행 일정 관리, 지도 통합, 공유 기능을 제공합니다. ## 🌟 주요 기능 ### 👥 멀티 사용자 시스템 - **사용자 인증**: JWT 기반 로그인/회원가입 - **관리자 시스템**: 사용자 및 시스템 관리 - **권한 관리**: 개인/공개 여행 계획 설정 ### 🗺️ 여행 계획 관리 - **다중 여행 관리**: 여러 여행 계획 동시 관리 - **템플릿 시스템**: 도시별 여행 템플릿 제공 - **일정 관리**: 날짜별 상세 일정 작성 - **장소 검색**: Google Places API 통합 ### 🔗 공유 및 협업 - **여행 공유**: 링크를 통한 여행 계획 공유 - **권한 설정**: 보기/편집/댓글 권한 제어 - **댓글 시스템**: 공유된 여행에 댓글 작성 ### 🗺️ 지도 통합 - **Google Maps**: 장소 검색 및 경로 최적화 - **Leaflet**: 오프라인 지도 지원 - **경로 계획**: 여행지 간 최적 경로 제안 ## 🚀 빠른 시작 ### Docker로 실행 (권장) ```bash # 저장소 클론 git clone cd travel-planner # Docker 환경 시작 ./docker-start.sh # 또는 수동 실행 docker-compose up -d ``` ### 로컬 개발 환경 ```bash # 의존성 설치 npm install # 개발 서버 시작 npm run dev # API 서버 시작 (별도 터미널) cd server npm install npm run dev ``` ## 🔧 환경 설정 ### 필수 환경 변수 ```env # 프론트엔드 (.env) VITE_API_URL=http://localhost:3001 VITE_GOOGLE_OAUTH_CLIENT_ID=your-google-oauth-client-id # 백엔드 (server/.env) DATABASE_URL=postgresql://user:password@localhost:5432/travel_planner JWT_SECRET=your-jwt-secret-key GOOGLE_MAPS_API_KEY=your-google-maps-api-key ``` ### 데이터베이스 설정 ```bash # PostgreSQL 설치 및 시작 brew install postgresql brew services start postgresql # 데이터베이스 생성 createdb travel_planner # 마이그레이션 실행 (자동) npm start # 서버 시작 시 자동 실행 ``` ## 📁 프로젝트 구조 ``` travel-planner/ ├── src/ # 프론트엔드 소스 │ ├── components/ # React 컴포넌트 │ ├── services/ # API 서비스 │ ├── types/ # TypeScript 타입 │ └── utils/ # 유틸리티 함수 ├── server/ # 백엔드 API │ ├── routes/ # API 라우트 │ ├── migrations/ # DB 마이그레이션 │ └── uploads/ # 파일 업로드 ├── docker/ # Docker 설정 └── docs/ # 문서 ``` ## 🛠️ 기술 스택 ### 프론트엔드 - **React 18** + **TypeScript** - **Vite** (빌드 도구) - **Tailwind CSS** (스타일링) - **React Router** (라우팅) - **Leaflet** + **Google Maps** (지도) ### 백엔드 - **Node.js** + **Express** - **PostgreSQL** (데이터베이스) - **JWT** (인증) - **Multer** (파일 업로드) ### 인프라 - **Docker** + **Docker Compose** - **Nginx** (프로덕션) ## 📊 API 문서 ### 인증 API ``` POST /api/auth/register # 회원가입 POST /api/auth/login # 로그인 GET /api/auth/verify # 토큰 검증 ``` ### 여행 계획 API ``` GET /api/travel-plans # 여행 목록 POST /api/travel-plans # 여행 생성 GET /api/travel-plans/:id # 여행 조회 PUT /api/travel-plans/:id # 여행 수정 DELETE /api/travel-plans/:id # 여행 삭제 ``` ### 공유 API ``` POST /api/share/create # 공유 링크 생성 GET /api/share/:code # 공유된 여행 조회 ``` ## 🔒 보안 - **JWT 토큰**: 안전한 사용자 인증 - **비밀번호 해시**: bcrypt 암호화 - **SQL 인젝션 방지**: 매개변수화된 쿼리 - **CORS 설정**: 허용된 도메인만 접근 ## 🌍 배포 ### Docker 배포 ```bash # 프로덕션 빌드 docker-compose -f docker-compose.prod.yml up -d ``` ### 수동 배포 ```bash # 프론트엔드 빌드 npm run build # 서버 시작 cd server npm start ``` ## 🤝 기여하기 1. Fork the repository 2. Create feature branch (`git checkout -b feature/amazing-feature`) 3. Commit changes (`git commit -m 'Add amazing feature'`) 4. Push to branch (`git push origin feature/amazing-feature`) 5. Open Pull Request ## 📝 라이선스 MIT License - 자세한 내용은 [LICENSE](LICENSE) 파일을 참조하세요. ## 📞 지원 - **이슈 리포트**: GitHub Issues - **문서**: [Wiki](../../wiki) - **FAQ**: [자주 묻는 질문](docs/FAQ.md) --- **Travel Planner** - 당신의 완벽한 여행을 계획하세요! ✈️🗺️