Skip to content

TripTalk/BE_SpringBoot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🌏 TripTalk - AI 기반 μ—¬ν–‰ κ³„νš ν”Œλž«νΌ

image

πŸ‘₯ νŒ€ 정보


🎯 ν”„λ‘œμ νŠΈ κ°œμš”

image

TripTalk은 μ‚¬μš©μžμ˜ μ—¬ν–‰ μŠ€νƒ€μΌκ³Ό μ„ ν˜Έλ„λ₯Ό 기반으둜 AIκ°€ 졜적의 μ—¬ν–‰ 일정을 μƒμ„±ν•΄μ£ΌλŠ” ν”Œλž«νΌμž…λ‹ˆλ‹€. FastAPI 기반 AI μ„œλ²„μ™€ μ—°λ™ν•˜μ—¬ 개인 λ§žμΆ€ν˜• μ—¬ν–‰ κ³„νšμ„ μ œκ³΅ν•˜λ©°, μ‹€μ‹œκ°„ ν•­κ³΅κΆŒ 및 μˆ™μ†Œ 정보λ₯Ό μ‘°νšŒν•˜μ—¬ νŽΈλ¦¬ν•œ μ—¬ν–‰ μ€€λΉ„λ₯Ό μ§€μ›ν•©λ‹ˆλ‹€.

핡심 κ°€μΉ˜

  • πŸ€– AI 맞좀 μΆ”μ²œ: μ‚¬μš©μž μ·¨ν–₯ 기반 μ—¬ν–‰ 일정 μžλ™ 생성
  • ✈️ μ‹€μ‹œκ°„ 정보: Amadeus API 연동 ν•­κ³΅κΆŒ 쑰회
  • πŸ—ΊοΈ μ»€μ„œ νŽ˜μ΄μ§•: λ¬΄ν•œ 슀크둀 λ°©μ‹μ˜ λΆ€λ“œλŸ¬μš΄ UX
  • πŸ” λ³΄μ•ˆ: JWT 기반 인증/인가 μ‹œμŠ€ν…œ

✨ μ£Όμš” κΈ°λŠ₯

1. πŸ” μ‚¬μš©μž 인증

  • νšŒμ›κ°€μž…/둜그인 (JWT Access & Refresh Token)
  • 토큰 μž¬λ°œκΈ‰ (Refresh Token 기반)
  • λ‘œκ·Έμ•„μ›ƒ (Refresh Token μ‚­μ œ)

2. πŸ“± 메인 ν™”λ©΄

  • μ—¬ν–‰ μΆ”μ²œ μΉ΄λ“œ 및 λ°°λ„ˆ
  • 인기 μ—¬ν–‰μ§€ μ†Œκ°œ (μ œμ£Όλ„, λΆ€μ‚°, 파리, λ‰΄μš• λ“±)
  • μΉ΄ν…Œκ³ λ¦¬λ³„ μ—¬ν–‰ μƒν’ˆ 탐색
  • AI μ—¬ν–‰ ν”Œλž˜λ„ˆ λ°”λ‘œκ°€κΈ°
image

3. πŸ—ΊοΈ AI μ—¬ν–‰ 일정 생성

  • FastAPI AI μ„œλ²„ 연동
    • μ—¬ν–‰ μŠ€νƒ€μΌ 뢄석 (μ²΄ν—˜Β·μ•‘ν‹°λΉ„ν‹°, μžμ—°, 힐링, 둜컬 λ“± 9κ°€μ§€)
    • λͺ©μ μ§€, κΈ°κ°„, μ˜ˆμ‚°, 동행인 기반 맞좀 일정 생성
  • 일정 μžλ™ μ €μž₯
    • 일별 상세 μŠ€μΌ€μ€„ (DailySchedule β†’ ScheduleItem)
    • κ΅ν†΅νŽΈ 정보 (좜발/κ·€ν™˜)
    • μˆ™μ†Œ 정보
    • μ—¬ν–‰ ν•˜μ΄λΌμ΄νŠΈ
image

4. πŸ“‹ μ—¬ν–‰ κ³„νš 관리 (μ €μž₯μ†Œ)

  • μƒνƒœλ³„ 쑰회
    • PLANNED (κ³„νš 쀑)
    • TRAVELED (μ—¬ν–‰ μ™„λ£Œ)
  • μ»€μ„œ 기반 λ¬΄ν•œμŠ€ν¬λ‘€ (νŽ˜μ΄μ§€ μ‚¬μ΄μ¦ˆ 5개)
  • μ—¬ν–‰ μƒνƒœ λ³€κ²½ (PLANNED β†’ TRAVELED)
  • μ—¬ν–‰ κ³„νš 상세 쑰회
    • 전체 일정, κ΅ν†΅νŽΈ, μˆ™μ†Œ, ν•˜μ΄λΌμ΄νŠΈ 포함
image

5. ✈️ ν•­κ³΅κΆŒ 쑰회

  • Amadeus API 연동
  • 인기 λ…Έμ„  μžλ™ 쑰회
    • κ΅­λ‚΄: κΉ€ν¬β†”μ œμ£Ό, 김포↔뢀산
    • 일본: μΈμ²œβ†”λ„μΏ„/μ˜€μ‚¬μΉ΄/ν›„μΏ μ˜€μΉ΄ λ“±
    • 기타: 방콕, 싱가포λ₯΄, 홍콩, λ‰΄μš•, 파리 λ“± 20개 λ…Έμ„ 
  • μ£Όκ°„ μŠ€μΌ€μ€„λŸ¬ (λ§€μ£Ό μ›”μš”μΌ μƒˆλ²½ 4μ‹œ μžλ™ μ—…λ°μ΄νŠΈ)
  • μ»€μ„œ 기반 λ¬΄ν•œμŠ€ν¬λ‘€ (νŽ˜μ΄μ§€ μ‚¬μ΄μ¦ˆ 10개)
  • ꡭ가별 λŒ€ν‘œ 이미지 λ§€ν•‘

6. 🏨 μˆ™μ†Œ μΆ”μ²œ

  • μΆ”μ²œ μˆ™μ†Œ 쑰회
    • 18개 λ„μ‹œ Γ— 3개 ν˜Έν…”
  • λ‹€μ–‘ν•œ 체크인/체크아웃 λ‚ μ§œ (였늘 +7~14일)
  • μ»€μ„œ 기반 λ¬΄ν•œμŠ€ν¬λ‘€ (νŽ˜μ΄μ§€ μ‚¬μ΄μ¦ˆ 10개)
image

7. 🌴 μ—¬ν–‰μ§€ μΆ”μ²œ

  • ν…Œλ§ˆλ³„ 쑰회
    • NATURE (μžμ—°)
    • SEA (λ°”λ‹€)
    • CULTURE (λ¬Έν™”)
    • HEALING (힐링)
    • HISTORY (역사)
  • μ»€μ„œ 기반 λ¬΄ν•œμŠ€ν¬λ‘€ (νŽ˜μ΄μ§€ μ‚¬μ΄μ¦ˆ 10개)
image

8. πŸ‘€ μ‚¬μš©μž 정보 관리

  • 개인 ν”„λ‘œν•„ 관리
  • μ—¬ν–‰ 톡계 (μ™„λ£Œν•œ μ—¬ν–‰, κ³„νš 쀑인 μ—¬ν–‰, 적립 포인트)
  • 뱃지 μ‹œμŠ€ν…œ (첫 μ—¬ν–‰, μ‹œκ°„ λ§ˆλ‹ˆμ•„, ν•œλ²ˆκ°€ λ“±)
  • 계정 μ„€μ • 및 κ°œμΈμ •λ³΄ λ³€κ²½
image

πŸ›  기술 μŠ€νƒ

Backend

  • Language: Java 21
  • Framework: Spring Boot 3.5.6
  • ORM: Spring Data JPA (Hibernate 6.6.29)
  • Database: MySQL 8.0 (AWS RDS)
  • Security: Spring Security + JWT (jjwt 0.12.3)
  • API Docs: Swagger (SpringDoc OpenAPI 2.7.0)
  • Build Tool: Gradle 8.x

External APIs

  • Amadeus API: μ‹€μ‹œκ°„ ν•­κ³΅κΆŒ 정보 쑰회
  • FastAPI: AI 기반 μ—¬ν–‰ 일정 생성 μ„œλ²„

Deployment

  • Server: AWS EC2
  • Database: AWS RDS (MySQL)
  • Container: Docker

πŸ— μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Client    β”‚ ───> β”‚  Spring Boot β”‚ ───> β”‚   MySQL     β”‚
β”‚  (Mobile)   β”‚      β”‚  (REST API)  β”‚      β”‚   (RDS)     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                            β”‚
                            β”œβ”€β”€β”€β”€β”€β”€> FastAPI (AI μ„œλ²„)
                            β”‚
                            └──────> Amadeus API (ν•­κ³΅κΆŒ)

계측 ꡬ쑰 (Layered Architecture)

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚         Controller Layer             β”‚  ← REST API μ—”λ“œν¬μΈνŠΈ
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚          Service Layer               β”‚  ← λΉ„μ¦ˆλ‹ˆμŠ€ 둜직
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚        Converter Layer               β”‚  ← DTO ↔ Entity λ³€ν™˜
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚       Repository Layer               β”‚  ← DB μ ‘κ·Ό (JPA)
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ—‚ ERD

image

πŸ“‘ API λͺ…μ„Έ

Base URL

http://54.180.99.252:8080

Swagger UI

http://52.78.55.147:8080/swagger-ui/index.html#/

πŸš€ μ„€μΉ˜ 및 μ‹€ν–‰

μš”κ΅¬μ‚¬ν•­

  • Java 21
  • MySQL 8.0
  • Gradle 8.x

1. ν”„λ‘œμ νŠΈ 클둠

git clone https://github.com/your-repo/triptalk.git
cd triptalk

2. λ°μ΄ν„°λ² μ΄μŠ€ μ„€μ •

CREATE DATABASE triptalk_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

3. ν™˜κ²½ λ³€μˆ˜ μ„€μ • (application.yml)

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/triptalk_db
    username: your-username
    password: your-password

jwt:
  secret: your-jwt-secret-key-at-least-32-characters
  access-token-expiration: 3600000  # 1μ‹œκ°„
  refresh-token-expiration: 1209600000  # 2μ£Ό

amadeus:
  api-key: your-amadeus-api-key
  api-secret: your-amadeus-api-secret

4. λΉŒλ“œ 및 μ‹€ν–‰

# λΉŒλ“œ
./gradlew clean build

# μ‹€ν–‰
./gradlew bootRun

# λ˜λŠ” JAR 파일 μ‹€ν–‰
java -jar build/libs/triptalk-0.0.1-SNAPSHOT.jar

🐳 Docker μ‹€ν–‰

Docker Compose

docker-compose up -d

πŸ“¦ 배포

AWS EC2 배포

배포 ν™˜κ²½


πŸ”§ μ£Όμš” 기술적 νŠΉμ§•

1. μ»€μ„œ 기반 νŽ˜μ΄μ§• (Cursor-based Pagination)

  • Offset 방식 λŒ€λΉ„ λŒ€μš©λŸ‰ 데이터 처리 μ„±λŠ₯ 우수
  • μ‹€μ‹œκ°„ 데이터 변경에도 μ•ˆμ •μ 
  • λ¬΄ν•œ 슀크둀 UX μ΅œμ ν™”

2. JWT 인증/인가

  • Access Token (1μ‹œκ°„) + Refresh Token (2μ£Ό)
  • Stateless 인증 방식
  • Spring Security FilterChain 적용

3. Converter νŒ¨ν„΄

  • DTO ↔ Entity λ³€ν™˜ 둜직 뢄리
  • Service 계측 κ°„κ²°ν™”
  • μž¬μ‚¬μš©μ„± 및 μœ μ§€λ³΄μˆ˜μ„± ν–₯상

4. Enum λ§€ν•‘

  • μ—¬ν–‰ μŠ€νƒ€μΌ ν•œκΈ€ λ¬Έμžμ—΄ β†’ Enum μžλ™ λ³€ν™˜
  • DB μ •κ·œν™” 및 νƒ€μž… μ•ˆμ •μ„± 확보

5. Amadeus API 연동

  • μ‹€μ‹œκ°„ ν•­κ³΅κΆŒ 가격 쑰회
  • μ£Όκ°„ μŠ€μΌ€μ€„λŸ¬ μžλ™ μ—…λ°μ΄νŠΈ
  • ν™˜μœ¨ μžλ™ λ³€ν™˜ (EUR/USD β†’ KRW)

πŸ“‚ ν”„λ‘œμ νŠΈ ꡬ쑰

src/main/java/com/example/triptalk/
β”œβ”€β”€ domain/
β”‚   β”œβ”€β”€ user/
β”‚   β”‚   β”œβ”€β”€ controller/    # μ‚¬μš©μž κ΄€λ ¨ API
β”‚   β”‚   β”œβ”€β”€ service/       # μ‚¬μš©μž λΉ„μ¦ˆλ‹ˆμŠ€ 둜직
β”‚   β”‚   β”œβ”€β”€ repository/    # μ‚¬μš©μž DB μ ‘κ·Ό
β”‚   β”‚   β”œβ”€β”€ entity/        # User, RefreshToken μ—”ν‹°ν‹°
β”‚   β”‚   └── dto/           # μš”μ²­/응닡 DTO
β”‚   β”‚
β”‚   β”œβ”€β”€ tripPlan/
β”‚   β”‚   β”œβ”€β”€ controller/    # μ—¬ν–‰ κ³„νš, ν•­κ³΅κΆŒ, μˆ™μ†Œ API
β”‚   β”‚   β”œβ”€β”€ service/       # μ—¬ν–‰ κ³„νš 생성/관리 둜직
β”‚   β”‚   β”œβ”€β”€ converter/     # DTO ↔ Entity λ³€ν™˜
β”‚   β”‚   β”œβ”€β”€ repository/    # JPA Repository
β”‚   β”‚   β”œβ”€β”€ entity/        # TripPlan, DailySchedule λ“±
β”‚   β”‚   β”œβ”€β”€ dto/           # Request/Response DTO
β”‚   β”‚   β”œβ”€β”€ enums/         # TravelStyle, TripStatus
β”‚   β”‚   β”œβ”€β”€ scheduler/     # ν•­κ³΅κΆŒ μžλ™ μ—…λ°μ΄νŠΈ
β”‚   β”‚   └── util/          # κ΅­κ°€ 이미지 λ§€ν•‘
β”‚   β”‚
β”‚   └── tripPlace/
β”‚       β”œβ”€β”€ controller/    # μ—¬ν–‰μ§€ μΆ”μ²œ API
β”‚       β”œβ”€β”€ service/       # μ—¬ν–‰μ§€ 쑰회 둜직
β”‚       β”œβ”€β”€ repository/    # μ—¬ν–‰μ§€ DB μ ‘κ·Ό
β”‚       └── entity/        # TripPlace μ—”ν‹°ν‹°
β”‚
β”œβ”€β”€ global/
β”‚   β”œβ”€β”€ apiPayload/        # 곡톡 응닡 포맷
β”‚   β”œβ”€β”€ config/            # Security, Swagger μ„€μ •
β”‚   └── security/          # JWT 인증/인가
β”‚
└── TriptalkApplication.java

🌟 TripTalkκ³Ό ν•¨κ»˜ μ™„λ²½ν•œ 여행을 κ³„νšν•˜μ„Έμš”!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •