λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Backend

[패캠] 패슀트캠퍼슀Xμ•Όλ†€μž: 토이 ν”„λ‘œμ νŠΈ 2단계

728x90

πŸ–₯ ν”„λ‘œμ νŠΈ κ°œμš”

  1. ν”„λ‘œμ νŠΈ 주제 : μ—¬ν–‰ 여정을 기둝과 κ΄€λ¦¬ν•˜λŠ” SNS μ„œλΉ„μŠ€ 2단계
  2. ν”„λ‘œμ νŠΈ κΈ°κ°„ : 10μ›” 23일(μ›”) ~ 10μ›” 27일(금) + 주말
  3. μ£Όμš” λͺ©ν‘œ : Spring Boot, DB 섀계, DB νŠΈλžœμž­μ…˜, RESTful API 섀계

πŸ‘¨‍πŸ‘¦‍πŸ‘¦ νŒ€ μ†Œκ°œ

πŸ‘€ μ‘°μž₯

이름 μ—­ν• 
μ •ν˜œλ―Ό κΉƒν—ˆλΈŒ ν”„λ‘œμ νŠΈ ꡬ성, AWS RDS μ„€μ •, μ—¬ν–‰ 및 μ—¬μ • Delete

πŸ‘₯‍ νŒ€μ›

이름 μ—­ν• 
김동쀀 Swagger μ„€μ •, μ—¬ν–‰ Create
κΉ€μˆ˜λΉˆ PR ν…œν”Œλ¦Ώ μ„€μ •, μ—¬μ • Create
μ „μœ λ¦Ό μ—¬ν–‰ Read, μ—¬μ • Update, μ—¬μ • Delete
차동민 μ—¬ν–‰ Update

βš™οΈ Project Settings

  1. Java 버전 : 17
  2. λΉŒλ“œ & λΉŒλ“œ 도ꡬ : Gradle
  3. Git 브랜치 μ „λž΅ : Feature Branch → Develop Branch → Main Branch

πŸ› οΈ Tech Stacks

  1. Framework : SpringBoot
  2. Database 및 ORM μ„€μ • : MySQL, JPA
  3. Database 배포 : Amazon RDS
  4. API λ¬Έμ„œν™” μ„€μ • : Swagger
  5. API μš”μ²­ ν…ŒμŠ€νŠΈ 도ꡬ : Postman

⭐ GitHub Issue 및 Project ν™œμš©

 

πŸ“Œ 사전 곡톡 ν˜‘μ˜ 사항

μ»¨λ²€μ…˜

  1. μ½”λ“œ μ»¨λ²€μ…˜ : Google Java μ»¨λ²€μ…˜ 적용

    https://programmer-ririhan.tistory.com/337
  2. 컀밋 μ»¨λ²€μ…˜ : κ³΅ν†΅λœ 컀밋 ν…œν”Œλ¦Ώ μ‚¬μš©

    https://kdjun97.github.io/git-github/commit-convention/
  3. PR μ»¨λ²€μ…˜ : κ³΅ν†΅λœ PR ν…œν”Œλ¦Ώ μ‚¬μš©

    https://github.com/FC-BE-ToyProject-Team3/KDT_Y_BE_Toy_Project2/blob/main/.github/pull_request_template.md

개발

  1. RFP 달성λͺ©ν‘œμ—λŠ” '일정 정보에 μœ„μΉ˜ 정보λ₯Ό 확인 및 μΆ”κ°€ν•˜λŠ” 곡톡 μœ ν‹Έλ¦¬ν‹° 클래슀λ₯Ό 제곡'ν•˜λΌκ³  λͺ…μ‹œλ˜μ–΄ μžˆμ§€λ§Œ, 각 Domain(Trip, Itinerary)에 이미 μ—¬μ • 별 μœ„μΉ˜μ •λ³΄(Place name)λ₯Ό 확인 및 μΆ”κ°€ν•  수 μžˆλŠ” κΈ°λŠ₯이 κ΅¬ν˜„λ˜μ–΄ 있기 λ•Œλ¬Έμ— 곡톡 μœ ν‹Έλ¦¬ν‹° ν΄λž˜μŠ€λŠ” μ •μ˜ν•˜μ§€ μ•ŠμŒ

    → μ—¬ν–‰ 쑰회 κΈ°λŠ₯을 톡해 각 여행에 μ†ν•΄μžˆλŠ” μ—¬μ •μ˜ μœ„μΉ˜μ •λ³΄(Place name)λ₯Ό μ‘°νšŒν•  수 있음.

    → μ—¬μ • μˆ˜μ • κΈ°λŠ₯을 톡해 각 μ—¬μ • 별 IDλ₯Ό μ‹λ³„μžλ‘œ μ‚¬μš©ν•˜μ—¬ νŠΉμ • 여정에 λŒ€ν•œ μœ„μΉ˜μ •λ³΄(Place name)λ₯Ό μˆ˜μ •ν•  수 있음.
  2. 각 Domain 별 Entity ν΄λž˜μŠ€μ— μ •μ˜λ˜μ–΄ μžˆλŠ” SetterλŠ” μˆ˜μ • κΈ°λŠ₯μ‹œμ—λ§Œ μ‚¬μš©ν•œλ‹€.

πŸ“Œ 개발 κΈ°λŠ₯ 및 API 섀계

Swagger Link : http://localhost:8080/swagger-ui/index.html

API μ„€κ³„μ„œ Link : https://gifted-feet-c42.notion.site/API-e9ea4d0ca8124b3db1144520489c76bf

1. μ—¬ν–‰ 등둝

  1. νšŒμ›μ€ μ—¬λŸ¬ μ—¬ν–‰ 기둝을 μ €μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  2. βœ”οΈ μ—¬ν–‰ 일정을 기둝해야 ν•©λ‹ˆλ‹€. λ³Έ ν”„λ‘œμ νŠΈμ—μ„œλŠ” νšŒμ›μ€ κ³ λ €ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  3. μ—¬ν–‰ μ •λ³΄μ—λŠ” λ‹€μŒ 정보가 ν•„μˆ˜ ν•­λͺ©μœΌλ‘œ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
  4. βœ”οΈ [μ—¬ν–‰] 의 이름, 일정(좜발 λ‚ μ§œ, 도착 λ‚ μ§œ), κ΅­λ‚΄/μ™Έ μ—¬λΆ€

createTrip λ©”μ„œλ“œ : κ°œλ³„ μ—¬ν–‰ 정보 등둝

1. μš”μ²­ λ©”μ„œλ“œ : POST
2. μ—”λ“œν¬μΈνŠΈ : /trips
3. μš”μ²­ 데이터 : TripCreateRequest 객체 
4. 응닡 데이터
  * 성곡 μ‹œ (HTTP μƒνƒœ μ½”λ“œ 200) : λ“±λ‘λœ μ—¬ν–‰ 정보λ₯Ό 담은 TripCreateResponse 객체
  * μ—λŸ¬ μ‹œ (HTTP μƒνƒœ μ½”λ“œ 409) : μ—¬ν–‰μ˜ μ‹œκ°„μ΄ μœ νš¨ν•˜μ§€ μ•Šμ„ λ•Œ λ°œμƒν•˜λŠ” InvalidTripScheduleException μ˜ˆμ™Έμ— λŒ€ν•œ μ—λŸ¬ 응닡을 λ°˜ν™˜

2. μ—¬ν–‰ 쑰회

  1. νšŒμ›μ΄ 가진 전체 μ—¬ν–‰ 리슀트λ₯Ό μ‘°νšŒν•  수 μžˆμŠ΅λ‹ˆλ‹€.βœ”οΈ 각 μ—¬ν–‰μ˜ 상세 μ—¬μ • μ •λ³΄λŠ” κ°œλ³„ μ—¬ν–‰ 쑰회λ₯Ό 톡해 μˆ˜ν–‰ν•©λ‹ˆλ‹€.
  2. βœ”οΈ 전체 μ—¬ν–‰ λ¦¬μŠ€νŠΈλŠ” μ—¬ν–‰ 정보와 각 여행에 ν¬ν•¨λœ μ—¬μ • 이름듀을 같이 λ³΄μ—¬μ€λ‹ˆλ‹€.
  3. νšŒμ›μ€ κ°œλ³„ μ—¬ν–‰ 정보λ₯Ό μ‘°νšŒν•  수 μžˆμŠ΅λ‹ˆλ‹€.βœ”οΈ μ—¬μ •μ˜ 상세 정보λ₯Ό λͺ¨λ‘ ν¬ν•¨ν•©λ‹ˆλ‹€.
  4. βœ”οΈ νŠΉμ • 여행에 λŒ€ν•œ λͺ¨λ“  μ—¬μ • 리슀트λ₯Ό λ³΄μ—¬μ€λ‹ˆλ‹€.

findAllTrips λ©”μ„œλ“œ : 전체 μ—¬ν–‰ 정보 쑰회

1. μš”μ²­ λ©”μ„œλ“œ : GET
2. μ—”λ“œν¬μΈνŠΈ : /trips
3. μš”μ²­ 데이터 : μ—†μŒ
4. 응닡 데이터
  * 성곡 μ‹œ (HTTP μƒνƒœ μ½”λ“œ 200) : 쑰회된 μ—¬ν–‰ 정보와 μ—¬μ •μ˜ 이름듀을 담은 TripListResponse κ°μ²΄λ“€μ˜ λͺ©λ‘μ„ λ°˜ν™˜ ( List<TripListResponse> )
  * μ—λŸ¬ μ‹œ (HTTP μƒνƒœ μ½”λ“œ 409) : 여행이 μ‘΄μž¬ν•˜μ§€ μ•Šμ„ λ•Œ λ°œμƒν•˜λŠ” TripNotFoundException μ˜ˆμ™Έμ— λŒ€ν•œ μ—λŸ¬ 응닡을 λ°˜ν™˜

getTripById λ©”μ„œλ“œ : κ°œλ³„ μ—¬ν–‰ 정보 쑰회

1. μš”μ²­ λ©”μ„œλ“œ : GET
2. μ—”λ“œν¬μΈνŠΈ : /trips/{tripId}
3. μš”μ²­ 데이터 : tripId (μ—¬ν–‰μ˜ 고유 μ‹λ³„μž)
4. 응닡 데이터
  * 성곡 μ‹œ (HTTP μƒνƒœ μ½”λ“œ 200) : 쑰회된 μ—¬ν–‰ 정보와 μ—¬μ • 정보λ₯Ό 담은 TripResponse 객체λ₯Ό λ°˜ν™˜
  * μ—λŸ¬ μ‹œ (HTTP μƒνƒœ μ½”λ“œ 409) : 여행이 μ‘΄μž¬ν•˜μ§€ μ•Šμ„ λ•Œ λ°œμƒν•˜λŠ” TripNotFoundException μ˜ˆμ™Έμ— λŒ€ν•œ μ—λŸ¬ 응닡을 λ°˜ν™˜

3. μ—¬ν–‰ μˆ˜μ •

νšŒμ›μ€ μ—¬ν–‰ 정보λ₯Ό μˆ˜μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

βœ”οΈ νŠΉμ • 여행에 λŒ€ν•œ 정보λ₯Ό μˆ˜μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

editTripById λ©”μ„œλ“œ : κ°œλ³„ μ—¬ν–‰ 정보 μˆ˜μ •

1. μš”μ²­ λ©”μ„œλ“œ : PUT
2. μ—”λ“œν¬μΈνŠΈ : /trips/{tripId}
3. μš”μ²­ 데이터 : tripId (μ—¬ν–‰μ˜ 고유 μ‹λ³„μž), TripUpdateRequest (μˆ˜μ •ν•  μ—¬ν–‰ 정보)
4. 응닡 데이터
  * 성곡 μ‹œ (HTTP μƒνƒœ μ½”λ“œ 200) : μˆ˜μ •λœ μ—¬ν–‰ 정보λ₯Ό 담은 TripUpdateResponse 객체λ₯Ό λ°˜ν™˜
  * μ—λŸ¬ μ‹œ (HTTP μƒνƒœ μ½”λ“œ 409) : 
    - 여행이 μ‘΄μž¬ν•˜μ§€ μ•Šμ„ λ•Œ λ°œμƒν•˜λŠ” TripNotFoundException μ˜ˆμ™Έμ— λŒ€ν•œ μ—λŸ¬ 응닡을 λ°˜ν™˜ 
    - μ—¬ν–‰μ˜ μ‹œκ°„μ΄ μœ νš¨ν•˜μ§€ μ•Šμ„ λ•Œ λ°œμƒν•˜λŠ” InvalidTripScheduleException μ˜ˆμ™Έμ— λŒ€ν•œ μ—λŸ¬ 응닡을 λ°˜ν™˜
    - μ—¬ν–‰μ˜ 이름이 쀑볡될 λ•Œ λ°œμƒν•˜λŠ” DuplicateTripNameException μ˜ˆμ™Έμ— λŒ€ν•œ μ—λŸ¬ 응닡을 λ°˜ν™˜

4. μ—¬ν–‰ μ‚­μ œ

νšŒμ›μ€ μ—¬ν–‰ 정보λ₯Ό μ‚­μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

βœ”οΈ νŠΉμ • 여행에 λŒ€ν•œ 정보λ₯Ό μ‚­μ œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

deleteTrip λ©”μ„œλ“œ : κ°œλ³„ μ—¬ν–‰ 정보 μ‚­μ œ

1. μš”μ²­ λ©”μ„œλ“œ : DELETE
2. μ—”λ“œν¬μΈνŠΈ : /trips/{tripId}
3. μš”μ²­ 데이터 : tripId (μ—¬ν–‰μ˜ 고유 μ‹λ³„μž)
4. 응닡 데이터
  * 성곡 μ‹œ (HTTP μƒνƒœ μ½”λ“œ 200) : μ‚­μ œλœ μ—¬ν–‰μ˜ tripId λ₯Ό λ°˜ν™˜
  * μ—λŸ¬ μ‹œ (HTTP μƒνƒœ μ½”λ“œ 409) : 
    - 여행이 μ‘΄μž¬ν•˜μ§€ μ•Šμ„ λ•Œ λ°œμƒν•˜λŠ” NullTripListException μ˜ˆμ™Έμ— λŒ€ν•œ μ—λŸ¬ 응닡을 λ°˜ν™˜ 

5. μ—¬μ • 등둝

  1. νšŒμ›μ€ μ—¬λŸ¬ μ—¬μ • 기둝을 μ €μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  2. βœ”οΈ ν•˜λ‚˜μ˜ 여행에 μ—¬λŸ¬ 개의 μ—¬μ • 정보λ₯Ό 기둝할 수 μžˆμŠ΅λ‹ˆλ‹€.
  3. μ—¬μ • μ •λ³΄μ—λŠ” λ‹€μŒ 정보가 ν•„μˆ˜ ν•­λͺ©μœΌλ‘œ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.βœ”οΈ μˆ™λ°• : μˆ™μ†Œλͺ…, 체크인 μΌμ‹œ, 체크아웃 μΌμ‹œ
  4. βœ”οΈ 체λ₯˜ : μž₯μ†Œλͺ…, 도착 μΌμ‹œ, 좜발 μΌμ‹œ
  5. βœ”οΈ 이동 : 이동 μˆ˜λ‹¨, μΆœλ°œμ§€(μž₯μ†Œλͺ…), 도착지(μž₯μ†Œλͺ…), 좜발 μΌμ‹œ, 도착 μΌμ‹œ

create λ©”μ„œλ“œ : κ°œλ³„ μ—¬μ • 정보 등둝

1. μš”μ²­ λ©”μ„œλ“œ : POST
2. μ—”λ“œν¬μΈνŠΈ : /itineraries
3. μš”μ²­ 데이터 : ItineraryCreateRequest 객체 
4. 응닡 데이터
  * 성곡 μ‹œ (HTTP μƒνƒœ μ½”λ“œ 200) : λ“±λ‘λœ μ—¬ν–‰ 정보λ₯Ό 담은 ItineraryCreateResponse 객체
  * μ—λŸ¬ μ‹œ (HTTP μƒνƒœ μ½”λ“œ 409) : 
    - 여행이 μ‘΄μž¬ν•˜μ§€ μ•Šμ„ λ•Œ λ°œμƒν•˜λŠ” TripNotFoundException μ˜ˆμ™Έμ— λŒ€ν•œ μ—λŸ¬ 응닡을 λ°˜ν™˜ 
    - μ—¬ν–‰μ˜ μ‹œκ°„λ“€μ΄ μœ νš¨ν•˜μ§€ μ•Šμ„ λ•Œ λ°œμƒν•˜λŠ” InvalidItineraryScheduleException μ˜ˆμ™Έμ— λŒ€ν•œ μ—λŸ¬ 응닡을 λ°˜ν™˜

6. μ—¬μ • μˆ˜μ •

νšŒμ›μ€ μ—¬μ • 정보λ₯Ό μˆ˜μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

βœ”οΈ νŠΉμ • 여정에 λŒ€ν•œ 정보λ₯Ό μˆ˜μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

editItinerary λ©”μ„œλ“œ : κ°œλ³„ μ—¬μ • 정보 μˆ˜μ •

1. μš”μ²­ λ©”μ„œλ“œ : PUT
2. μ—”λ“œν¬μΈνŠΈ : /itineraries/{itineraryId}
3. μš”μ²­ 데이터 : itineraryId (μ—¬μ •μ˜ 고유 μ‹λ³„μž), ItineraryUpdateRequest (μˆ˜μ •ν•  μ—¬μ • 정보)
4. 응닡 데이터
  * 성곡 μ‹œ (HTTP μƒνƒœ μ½”λ“œ 200) : μˆ˜μ •λœ μ—¬μ • 정보λ₯Ό 담은 ItineraryUpdateResponse 객체λ₯Ό λ°˜ν™˜
  * μ—λŸ¬ μ‹œ (HTTP μƒνƒœ μ½”λ“œ 409) : 
    - 여정이 μ‘΄μž¬ν•˜μ§€ μ•Šμ„ λ•Œ λ°œμƒν•˜λŠ” ItineraryNotFoundException μ˜ˆμ™Έμ— λŒ€ν•œ μ—λŸ¬ 응닡을 λ°˜ν™˜ 
    - μ—¬μ •μ˜ μ‹œκ°„λ“€μ΄ μœ νš¨ν•˜μ§€ μ•Šμ„ λ•Œ λ°œμƒν•˜λŠ” InvalidItineraryScheduleException μ˜ˆμ™Έμ— λŒ€ν•œ μ—λŸ¬ 응닡을 λ°˜ν™˜

μ—¬μ • μŠ€μΌ€μ₯΄κ³Ό κ΄€λ ¨λœ μœ νš¨μ„± 검증은 λ‹€μŒκ³Ό 같은 쑰건에 λ”°λΌμ„œ μ„€μ •ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

7. μ—¬μ • μ‚­μ œ

νšŒμ›μ€ μ—¬μ • 정보λ₯Ό μ‚­μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

βœ”οΈ νŠΉμ • 여정에 λŒ€ν•œ 정보λ₯Ό μ‚­μ œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

deleteItinerary λ©”μ„œλ“œ : κ°œλ³„ μ—¬μ • 정보 μ‚­μ œ

1. μš”μ²­ λ©”μ„œλ“œ : DELETE
2. μ—”λ“œν¬μΈνŠΈ : /itineraries/{itineraryId}
3. μš”μ²­ 데이터 : itineraryId (μ—¬μ •μ˜ 고유 μ‹λ³„μž)
4. 응닡 데이터
  * 성곡 μ‹œ (HTTP μƒνƒœ μ½”λ“œ 200) : μ‚­μ œλœ μ—¬μ •μ˜ itineraryId λ₯Ό λ°˜ν™˜
  * μ—λŸ¬ μ‹œ (HTTP μƒνƒœ μ½”λ“œ 409) : 
    - 여정이 μ‘΄μž¬ν•˜μ§€ μ•Šμ„ λ•Œ λ°œμƒν•˜λŠ” ItineraryNotFoundException μ˜ˆμ™Έμ— λŒ€ν•œ μ—λŸ¬ 응닡을 λ°˜ν™˜ 

ERD 섀계

 

ν”„λ‘œμ νŠΈ μ‹€ν–‰ ν™”λ©΄

 

ν”„λ‘œμ νŠΈ κΉƒν—ˆλΈŒ μ£Όμ†Œ: https://github.com/FC-BE-ToyProject-Team3/KDT_Y_BE_Toy_Project2

 

728x90