Skip to content

Latest commit

 

History

History
225 lines (174 loc) · 15.5 KB

File metadata and controls

225 lines (174 loc) · 15.5 KB

🌍 T-log : AI 기반 동행 여행 플랫폼

🎬 시연 영상

T-log 시연 영상

👆 썸네일을 클릭하면 YouTube에서 시청하실 수 있습니다.

🐾 마스코트 티로

🧭 프로젝트 개요

T-log는 MBTI 및 성향 분석 기반으로 AI를 활용해 최적의 여행 동행을 매칭하고, 여행 일정과 후기를 공유할 수 있는 플랫폼입니다.

👥 팀원

이름 역할
임규리 -
배호빈 -

💡 주요 기능 (Key Factors)

기능 설명
🔍 MBTI & 태그 기반 동행 추천 사용자의 MBTI 및 여행 태그 기반으로 ChatGPT가 어울리는 동행 일정 자동 추천
📝 후기 자동 요약 여행 후 작성된 후기를 AI가 자동 요약
🧾 성향 테스트 기능 간단한 테스트로 본인의 여행 MBTI 성향 및 추천 여행 스타일 제공
🛡️ 신고 시스템 사용자 안전을 위한 기능 제공 및 관리자 권한 기능 구현
✍️ 질문 게시판 & 관리자 답변 사용자 질문 등록 및 관리자 전용 답변 기능
📅 일정 공유 및 복사 기능 공유된 일정을 복사하여 개인 일정으로 활용 가능

🧠 AI 활용 기술

구분 내용
🤖 AI 동행 추천 Spring AI + ChatGPT를 이용해 사용자 성향 기반 동행 구인글 추천
✍️ 후기 분석 사용자 후기 자동 요약

🛠️ 기술 스택

구분 사용 기술 / 도구 설명
🧩 백엔드 Spring Boot, Spring Security, Spring AI, MyBatis API 서버, 보안 인증, AI 통합, DB 매핑
🔐 인증 및 보안 JWT (JJWT), Redis AccessToken/RefreshToken 관리
🧠 AI 연동 Spring AI, OpenAI (ChatGPT) 후기 요약, 동행 추천, 감성 태그 생성
💾 데이터베이스 MySQL 사용자, 여행 일정, 후기 등 저장
🌐 프론트엔드 Vue.js, Vite, Vuetify SPA 개발, 빠른 빌드, UI 프레임워크
🗺️ 지도 API Kakao Map API 마커 기반 관광지 시각화
☁️ 클라우드 AWS S3, Spring Cloud AWS 이미지 업로드 및 자동 설정
✉️ 이메일 전송 JavaMailSender (spring-boot-starter-mail) 비밀번호 찾기 등 메일 기능
📄 JSON 처리 Gson REST 통신 및 AI 응답 처리
🧰 기타 유틸 Lombok, Validation (Jakarta) 코드 간결화 및 DTO 검증, 서버사이드 렌더링 일부

📝 ERD

⚙️ Architecture

✅ API 명세 정리 (EnjoyTrip 프로젝트)

📌 공통 형식

  • Base URL: /api
  • 인증: @AuthenticationPrincipal 사용 시 로그인 필요
  • 관리자 권한 필요: @PreAuthorize("hasRole('ADMIN')")

1. 🔐 인증 (AuthController)

메서드 URL 설명 인증 요청 바디 응답 바디
POST /auth/login 로그인 LoginRequest RefreshTokenResponse
POST /auth/refresh AccessToken 재발급 RefreshTokenRequest RefreshTokenResponse
POST /auth/logout 로그아웃 (Redis RT 삭제) 없음 없음 (204)

2. 👤 사용자 (UserController)

메서드 URL 설명 인증 요청 바디 응답 바디
POST /users 회원가입 SignupRequest UserProfileResponse
GET /users/email-exists 이메일 사용 가능 여부 확인 없음 (쿼리: email) Boolean
GET /users/me 내 프로필 조회 없음 UserProfileResponse
PUT /users/me 내 프로필 수정 UpdateProfileRequest UserProfileResponse
PUT /users/me/password 내 비밀번호 변경 ChangePasswordRequest 없음 (204)
DELETE /users/me 회원 탈퇴 (soft delete) 없음 없음 (204)
POST /users/forgot-password 임시 비밀번호 전송 ForgotPasswordRequest 없음 (204)
POST /users/oauth OAuth 사용자 추가 정보 저장 UpdateProfileRequest UserProfileResponse
GET /users/{id} 특정 사용자 조회 (관리자) 없음 UserDto
GET /users 사용자 목록 (관리자, 페이징) 쿼리: page/size UserListResponse
PUT /users/{id}/status 사용자 상태 변경 (관리자) StatusUpdateRequest 없음 (204)
PUT /users/{id}/score 사용자 점수 조정 (관리자) ScoreAdjustRequest 없음 (204)

3. 🌐 동행 모집 (CompanionController & CompanionApplicantController)

메서드 URL 설명 인증
POST /companions 동행 모집 글 생성
GET /companions 동행 목록 조회 (MBTI, 성별 등 필터링 가능)
GET /companions/me 내가 작성한 동행 글 목록 조회
GET /companions/{id} 동행 상세 조회
PUT /companions/{id} 동행 모집 글 수정
DELETE /companions/{id} 동행 모집 글 삭제
POST /companions/{id}/applicants 동행 신청
GET /companions/{id}/applicants 신청자 목록 조회 (작성자 전용)
GET /companions/{id}/applicants/accepted 수락된 신청자 목록 조회
GET /companions/{id}/applicants/status 현재 사용자 신청 상태 조회
PATCH /companions/{id}/applicants/{applicantId} 신청 상태 변경 (수락/거절, 작성자 전용)
DELETE /companions/{id}/applicants/{applicantId} 신청 철회
GET /companions/{id}/applicants/me/applied 내가 신청한 동행 글 목록 조회

4. 🗓️ 일정 관리 (PlanController)

메서드 URL 설명 인증
GET /plans 내 일정 목록 조회
GET /plans/{id} 내 일정 상세 조회
POST /plans 일정 생성
PUT /plans/{id} 일정 수정
DELETE /plans/{id} 일정 삭제
PATCH /plans/{id}/share 공유 상태 설정 (true/false)
POST /plans/{id}/copy 공유된 일정 복사
GET /plans/shared 인기 공유 일정 목록 조회
POST /plans/{id}/details 세부 일정 추가
PUT /plans/{id}/details/{detailId} 세부 일정 수정
DELETE /plans/{id}/details/{detailId} 세부 일정 삭제

5. 📍 관광지 (TripController)

메서드 URL 설명
GET /trips/sidos 시/도 목록 조회
GET /trips/guguns/{sidoCode} 시군구 목록 조회 (시도 기반)
GET /trips/contentTypes 관광 타입 목록 조회
GET /trips/allTrips/{lat}/{lng} 반경 5km 이내 관광지 전체 조회
GET /trips/siGunGu/{sidoCode}/{gugunCode} 시도 + 시군구 기반 관광지 조회
GET /trips/contentType/{sido}/{gugun}/{type} 시군구 + 관광 타입별 관광지 조회
GET /trips/allContentType/{type}/{lat}/{lng} 관광 타입 + 반경 5km 이내 관광지 조회
GET /trips/tripDetail/{no} 특정 여행지 상세 + 날씨 정보 조회
GET /trips/search?keyword=foo Trie 기반 관광지 이름 검색

6. 🏷️ 해시태그 (HashtagController)

메서드 URL 설명 인증 응답 바디
GET /hashtags 카테고리별로 그룹화된 해시태그 목록 List

7. 📝 리뷰 (ReviewController)

메서드 URL 설명 인증
POST /reviews/places 장소 후기 작성 (파일 포함)
PUT /reviews/places/{id} 장소 후기 수정
DELETE /reviews/places/{id} 장소 후기 삭제
GET /reviews/places/attraction/{id} 특정 관광지의 후기 목록 + 요약
GET /reviews/places/{id} 단일 장소 후기 상세 조회
POST /reviews/places/{id}/likes 장소 후기 좋아요 토글
GET /reviews/places/me 내 장소 후기 목록 조회
POST /reviews/companions 동행 후기 작성
PUT /reviews/companions/{id} 동행 후기 수정
DELETE /reviews/companions/{id} 동행 후기 삭제
GET /reviews/companions/users/{userId} 특정 사용자가 받은 동행 후기
GET /reviews/companions/written/me 내가 작성한 동행 후기 목록
GET /review-tags/{reviewId} 특정 후기의 해시태그 조회
POST /review-tags 후기 해시태그 저장

8. 🚨 신고 (ReportController)

메서드 URL 설명 인증
POST /reports 신고 생성
GET /reports 전체 신고 목록 조회 (옵션: 상태 필터링) ✅ (ADMIN)
GET /reports/{id} 단일 신고 상세 조회 ✅ (ADMIN)
DELETE /reports/{id} 신고 삭제 (Soft Delete) ✅ (ADMIN)
PATCH /reports/{id}/reject 신고 거절 처리 ✅ (ADMIN)
GET /reports/check 사용자의 신고 여부 확인 (중복 방지용)
GET /reports/users 사용자 대상 신고 목록 조회 ✅ (ADMIN)
PATCH /reports/users/{id}/accept 사용자 신고 수락 + 정지기간 부여 ✅ (ADMIN)
GET /reports/reviews 후기 신고 목록 조회 ✅ (ADMIN)
PATCH /reports/reviews/{id}/accept 후기 신고 수락 (soft delete) ✅ (ADMIN)
GET /reports/companions 동행글 신고 목록 조회 ✅ (ADMIN)
PATCH /reports/companions/{id}/accept 동행글 신고 수락 (soft delete) ✅ (ADMIN)

9. 파일 업로드 (FileUploadController)

메서드 URL 설명 인증
POST /upload/profile 프로필 이미지 업로드

10. 질문 & 답변 (QuestionController)

메서드 URL 설명 인증
POST /questions 질문 작성
PUT /questions/{id} 질문 수정 (본인만 가능)
DELETE /questions/{id} 질문 삭제 (본인 or 관리자)
GET /questions/{id} 단일 질문 상세 조회
GET /questions 전체 질문 목록 (답변 여부 필터)
GET /questions/me 내가 작성한 질문 목록
POST /questions/{id}/answers 질문에 대한 답변 작성 ✅ (ADMIN)
PUT /questions/answers/{id} 답변 수정 (작성 관리자만 가능) ✅ (ADMIN)
DELETE /questions/answers/{id} 답변 삭제 (작성 관리자만 가능) ✅ (ADMIN)
GET /questions/answers/{id} 단일 답변 상세 조회