Skip to content

syber911911/Matprint_project

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

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

Repository files navigation

πŸ‘£ λ§›μžκ΅­

Spring Boot Team Project - 맛집 μΆ”μ²œ 및 동행 μ°ΎκΈ° μ‚¬μ΄νŠΈ

πŸ“’ν”„λ‘œμ νŠΈ κ°œμš”

μΈν”Œλ£¨μ–Έμ„œ 맛집, μ‚¬μš©μž 검색 맛집 λ“±μ˜ 정보λ₯Ό μ œκ³΅ν•˜λ©°, 동행 μ°ΎκΈ° 글을 톡해 맛집 λ©”μ΄νŠΈλ₯Ό ꡬ할 수 μžˆλŠ” κΈ°λŠ₯을 κ΅¬ν˜„

πŸ—“οΈ ν”„λ‘œμ νŠΈ κΈ°κ°„

2023-08-09 ~ 2023-09-15

πŸ§‘πŸ»β€πŸ’» κ°œλ°œν™˜κ²½ 및 μ‚¬μš©κΈ°μˆ 

  • java version 17
  • Spring Boot 3.1.1
  • MySQL
  • Redis
  • IntelliJ IDEA Ultimate
  • Spring Security
  • JWT token
  • Spring Data JPA
  • HTML
  • Java Script
  • CSS
  • Docker

βš™οΈ κ΅¬ν˜„ κΈ°λŠ₯

ν”„λ‘œμ νŠΈ ꡬ쑰

ν”„λ‘œμ νŠΈ ꡬ쑰도

DB ERD

ERD

νšŒμ›

κΈ°λŠ₯ HTTP METHOD URL
νšŒμ›κ°€μž… POST /api/join
둜그인 POST /api/login
νšŒμ› 정보 쑰회 GET /api/profile
νšŒμ› 정보 μˆ˜μ • PUT /api/profile
ν”„λ‘œν•„ 이미지 μ—…λ‘œλ“œ PUT /api/profile/image
νšŒμ› νƒˆν‡΄ DELETE /api/profile
μ‚¬μš©μž 리뷰 전체 쑰회 GET /api/profile/reviews
μ‚¬μš©μž 동행 κΈ€ 전체 쑰회 GET /api/profile/post
μ‚¬μš©μž 즐겨찾기 쑰회 GET /api/profile/wishlist
즐겨찾기 μ‚­μ œ DELETE /wishlist
토큰 μž¬λ°œκΈ‰ POST /api/reissue
λ‘œκ·Έμ•„μ›ƒ POST /api/logout

νšŒμ› κ°€μž…

μ‚¬μš©μžμ˜ 정보λ₯Ό 기반으둜 νšŒμ›κ°€μž… 진행. 졜초 μ‚¬μš©μžμ˜ ν”„λ‘œν•„ μ΄λ―Έμ§€λŠ” S3 에 μ €μž₯된 κΈ°λ³Έ μ΄λ―Έμ§€λ‘œ μ…‹νŒ…

둜그인

μ‚¬μš©μžμ˜ ID, PW λ₯Ό 검증 ν›„ ACCESS TOKEN κ³Ό μž¬λ°œκΈ‰μš© REFRESH TOKEN 을 λ°œκΈ‰

TOKEN λ°œκΈ‰ ν›„ Redis 에 username, access token, refresh token 을 μ €μž₯

  • 쀑볡 둜그인 μ²˜λ¦¬μ™€ λ‘œκ·Έμ•„μ›ƒ 처리λ₯Ό μœ„ν•¨
  • μ‚¬μš©μžκ°€ λ‹€λ₯Έ κΈ°κΈ° ν˜Ήμ€ λΈŒλΌμš°μ €, μƒˆλ‘œμš΄ νƒ­ λ“± κΈ°μ‘΄ λ‘œκ·ΈμΈν•œ ν™˜κ²½μ΄ μ•„λ‹Œ λ‹€λ₯Έ ν™˜κ²½μ—μ„œ λ‘œκ·ΈμΈμ„ ν•΄μ„œ token 을 λ°œκΈ‰λ°›κ²Œ 되면 졜초 λ°œκΈ‰ 받은 token 은 Redis μ—μ„œ μ‚­μ œλ˜μ–΄ μ‚¬μš©μ΄ λΆˆκ°€λŠ₯ 함
  • μš”μ²­μ— ν¬ν•¨λ˜μ–΄μ„œ μ˜€λŠ” access token 은 ν•„ν„°μ—μ„œ redis 쑴재 μ—¬λΆ€λ₯Ό 검증 ν›„ 둜그인 μƒνƒœκ°€ κΈ°λ‘λ˜μ§€ μ•Šμ€ access token 의 경우 μš”μ²­μ„ reject

μ‚¬μš©μžκ°€ μžλ™ λ‘œκ·ΈμΈμ„ μ„ νƒν•œ κ²½μš°μ—λŠ” REFRESH TOKEN 을 2μ£Ό κΈ°κ°„μ˜ Cookie 에 μ €μž₯, ACCESS TOKEN 은 λΈŒλΌμš°μ € local storage 에 μ €μž₯

μžλ™ λ‘œκ·ΈμΈμ„ μ„ νƒν•˜μ§€ μ•Šμ€ κ²½μš°μ—λŠ” REFRESH TOKEN 은 Session Cookie 에 μ €μž₯, ACCESS TOKEN 은 λΈŒλΌμš°μ € session storage 에 μ €μž₯

  • λΈŒλΌμš°μ € μ’…λ£Œ μ‹œ μ‚¬μš©μž λ‘œκ·Έμ•„μ›ƒ 처리λ₯Ό μœ„ν•¨
  • 졜초 μ•„μ΄λ””μ–΄λŠ” λΈŒλΌμš°μ € μ’…λ£Œ 이벀트 감지 μ‹œ μ„œλ²„ 츑으둜 λ‘œκ·Έμ•„μ›ƒ μš”μ²­μ„ λ³΄λ‚΄λŠ” 것 ν•˜μ§€λ§Œ λΈŒλΌμš°μ € μ’…λ£Œ 이벀트 κ°μ§€μ˜ λ²”μœ„κ°€ νŽ˜μ΄μ§€ μ΄λ™μ΄λ‚˜ μƒˆλ‘œκ³ μΉ¨κΉŒμ§€ 감지가 λ˜κΈ°μ— 맀번 λ‘œκ·Έμ•„μ›ƒμ΄ λ˜λŠ” 상황이 λ°œμƒ
  • ν˜„μž¬λŠ” νŽ˜μ΄μ§€ λΈŒλΌμš°μ € μ’…λ£Œ μ‹œ λ‘œκ·Έμ•„μ›ƒ μš”μ²­μ΄ κ°€λŠ” 것이 μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— Redis μ—λŠ” 둜그인 기둝이 남아 μžˆμ–΄μ„œ access token κ³Ό refresh token 이 μœ μΆœλœλ‹€λ©΄ λ¬Έμ œκ°€ λ°œμƒν•  여지가 있음 (access token 은 μ‹œκ°„μ΄ 짧기 λ•Œλ¬Έμ— 비ꡐ적 λ¬Έμ œκ°€ μ‹¬κ°ν•˜μ§€ μ•ŠμŒ)
  • ν˜„μž¬λŠ” μ ν•©ν•œ ν•΄κ²°λ°©μ•ˆμ„ 찾지 λͺ»ν•¨
  • μ •μƒμ μœΌλ‘œ μ„œλΉ„μŠ€μ˜ λ‘œκ·Έμ•„μ›ƒ κΈ°λŠ₯을 μ‚¬μš©ν•΄μ„œ λ‘œκ·Έμ•„μ›ƒ ν•˜λŠ” κ²½μš°μ—λŠ” λ¬Έμ œκ°€ μ—†μŒ

쀑볡 λ‘œκ·ΈμΈμ΄λ‚˜ λ‘œκ·Έμ•„μ›ƒ 처리λ₯Ό μœ„ν•΄ 둜그인 μ‹œμ— Redis 에 둜그인 기둝을 μ €μž₯ν•˜λŠ” 방식은 μΆ”ν›„ λ‘œκ·Έμ•„μ›ƒ μ‹œ access token, refresh token 을 blacklist 둜 지정해 μ„œλ²„ μΈ‘μ—μ„œ μ‚¬μš©μžμ˜ μƒνƒœ 정보λ₯Ό μ΅œλŒ€ν•œ μ €μž₯ν•˜μ§€ μ•ŠλŠ” λ°©μ‹μœΌλ‘œ λ³€κ²½ν•  수 있음

νšŒμ› 정보 쑰회 / μˆ˜μ • / νƒˆν‡΄ / 리뷰, 동행 κΈ€, 즐겨찾기 전체 쑰회 / ν”„λ‘œν•„ 이미지 μ—…λ‘œλ“œ

  • νšŒμ› 정보 쑰회
    • access token 의 μ‚¬μš©μž 정보λ₯Ό λ°”νƒ•μœΌλ‘œ μ‚¬μš©μž 정보λ₯Ό 쑰회
  • νšŒμ› 정보 μˆ˜μ •
    • νšŒμ› 정보 쀑 ID, PW λ₯Ό μ œμ™Έν•œ 정보 μˆ˜μ •
  • ν”„λ‘œν•„ 이미지 μ—…λ‘œλ“œ
    • μ‚¬μš©μž ν”„λ‘œν•„ μ—…λ‘œλ“œ
    • μ‚¬μš©μžκ°€ μ—…λ‘œλ“œν•œ μ΄λ―Έμ§€λŠ” S3 에 μ €μž₯
  • νšŒμ› νƒˆν‡΄
    • νšŒμ› νƒˆν‡΄ κΈ°λŠ₯
    • νšŒμ› νƒˆν‡΄ μ‹œ ν•΄λ‹Ή μ‚¬μš©μžκ°€ μž‘μ„±ν•œ 리뷰, 동행 κΈ€, λ“±λ‘ν•œ 즐겨 μ°ΎκΈ°, μ—…λ‘œλ“œ ν•œ 이미지 전체λ₯Ό μ‚­μ œ
  • 리뷰 전체 쑰회
    • ν•΄λ‹Ή μ‚¬μš©μžκ°€ μž‘μ„±ν•œ 리뷰 전체 쑰회
  • μ‚¬μš©μž 동행 κΈ€ 전체 쑰회
    • ν•΄λ‹Ή μ‚¬μš©μžκ°€ μž‘μ„±ν•œ 동행 κΈ€ 전체 쑰회
  • 즐겨 μ°ΎκΈ° 쑰회
    • ν•΄λ‹Ή μ‚¬μš©μžκ°€ λ“±λ‘ν•œ 즐겨 μ°ΎκΈ° 전체 쑰회

λ‘œκ·Έμ•„μ›ƒ

μ‚¬μš©μž λ‘œκ·Έμ•„μ›ƒ κΈ°λŠ₯ Redis 에 기둝된 μ‚¬μš©μž 둜그인 이λ ₯을 μ‚­μ œ

토큰 μž¬λ°œκΈ‰

access token 만료 μ‹œ refresh token 으둜 토큰 μž¬λ°œκΈ‰ μž¬λ°œκΈ‰ 진행 ν›„ 기쑴의 둜그인 이λ ₯에 μ €μž₯된 access token κ³Ό refresh token κ°’ update

κ²€μƒ‰μœΌλ‘œ 맛집 μ°ΎκΈ°

κΈ°λŠ₯ HTTP METHOD URL
검색 맛집 νŽ˜μ΄μ§€ 이동 GET /search
맛집 쑰회 GET /search?target={target}

RestaurantDto

ν”„λ‘ νŠΈμ—μ„œ κ°„λ‹¨νžˆ 보여쀄 정보가 λ‹΄κΈ΄ DTO

RestaurantDetailDto

μŒμ‹μ  상세 νŽ˜μ΄μ§€μ—μ„œ 보여쀄 정보가 λ‹΄κΈ΄ DTO

맛집 검색

  • 검색
    • μ‚¬μš©μžκ°€ searchBox에 target을 μž…λ ₯ν•˜λ©΄ "target + μŒμ‹μ " ν˜•νƒœλ‘œ μ§ˆμ˜λ¬Έμ„ λ§Œλ“¦
    • 넀이버 지역 검색 νŽ˜μ΄μ§€μ— μ§ˆμ˜μ–΄(ex. 강남역 μŒμ‹μ )둜 κ²€μƒ‰λœ κ²°κ³Ό(식당 이름, 메뉴, μ˜μ—…μ‹œκ°„, μ’Œν‘œ λ“±)λ₯Ό ν¬λ‘€λ§ν•˜μ—¬ 데이터λ₯Ό λ°›μ•„μ˜΄
    • μˆ˜μ‹­λ§Œ 개의 μŒμ‹μ  곡곡 데이터λ₯Ό μ‚¬μš©ν•˜κΈ°λ³΄λ‹€ μ΄λŸ¬ν•œ 방식을 μ‚¬μš©ν•˜μ—¬ 자체적인 DBλ₯Ό ꡬ좕 ν•˜μ˜€μŒ
    • 넀이버 지도 apiλ₯Ό ν™œμš©ν•˜μ—¬ 마컀λ₯Ό 찍어주고, κ²€μƒ‰ν–ˆμ„ λ•Œ μ§€λ„μ˜ 첫 화면은 κ²°κ³Ό λ¦¬μŠ€νŠΈλ“€μ˜ 평균 μ’Œν‘œλ₯Ό ꡬ해주어 ν•œλˆˆμ— 보이게 ν•˜μ˜€μŒ
맛집 검색

μŒμ‹μ  μƒμ„ΈνŽ˜μ΄μ§€

κΈ°λŠ₯ HTTP METHOD URL
μƒμ„ΈνŽ˜μ΄μ§€ 뢈러였기 GET matprint/detail?name={name}&address={address}
μœ„μ‹œλ¦¬μŠ€νŠΈ νŒλ‹¨ GET /api/wishlist/{restaurantId}
μœ„μ‹œλ¦¬μŠ€νŠΈ λ²„νŠΌ POST /api/wishlist/{restaurantId}

WishlistDto

λ§ˆμ΄νŽ˜μ΄μ§€μ—μ„œ μœ„μ‹œλ¦¬μŠ€νŠΈλ₯Ό 쑰회λ₯Ό ν• λ•Œ ν•„μš”ν•œ DTO

상세 νŽ˜μ΄μ§€

  • 상세 νŽ˜μ΄μ§€
    • 검색 맛집 νŽ˜μ΄μ§€λ‚˜ μΈν”Œλ£¨μ–Έμ„œ 맛집 νŽ˜μ΄μ§€μ—μ„œ λ‚˜μ˜€λŠ” μŒμ‹μ  이름을 ν΄λ¦­ν•˜λ©΄ 상세 νŽ˜μ΄μ§€λ‘œ λ„˜μ–΄κ°
    • 식당 사진, μ£Όμ†Œ, μ˜μ—… μ‹œκ°„, μ „ν™”λ²ˆν˜Έ, 메뉴 λ“±μ˜ 정보가 있고, 리뷰 쑰회, μœ„μ‹œλ¦¬μŠ€νŠΈ 등둝 κΈ°λŠ₯, 둜그인 ν•œ μ‚¬μš©μžμ— ν•œν•΄ 리뷰 μž‘μ„± κΈ°λŠ₯ 제곡
  • μœ„μ‹œλ¦¬μŠ€νŠΈ
    • isMyWish ν•¨μˆ˜λ₯Ό 톡해 μŒμ‹μ  상세 νŽ˜μ΄μ§€μ— μ§„μž…ν•œ μ‚¬μš©μžκ°€ ν˜„μž¬ 식당을 μœ„μ‹œλ¦¬μŠ€νŠΈμ— λ“±λ‘ν–ˆλŠ”μ§€ νŒλ‹¨ ν›„, ν”„λ‘ νŠΈ νŽ˜μ΄μ§€μ—μ„œ λ²„νŠΌμ„ μ–΄λ–»κ²Œ 보여쀄지 정함
    • μœ„μ‹œλ¦¬μŠ€νŠΈ 등둝 λ²„νŠΌμ€ 이미 μœ„μ‹œλ¦¬μŠ€νŠΈμ— 담겨져 μžˆλŠ”λ° λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ μœ„μ‹œλ¦¬μŠ€νŠΈμ—μ„œ ν•΄μ œλ˜κ³ , μ•ˆ 담겨져 μžˆμ„ λ•Œ λˆ„λ₯΄λ©΄ μœ„μ‹œλ¦¬μŠ€νŠΈμ— 등둝됨 image

리뷰

κΈ°λŠ₯ HTTP METHOD URL
리뷰 μž‘μ„± POST /api/{restaurantId}/review/
리뷰 μˆ˜μ • PUT /api/{restaurantId}/review/edit
리뷰 쑰회 GET /api/{restaurantId}/review/{reviewId}
리뷰 μ‚­μ œ DELETE /api/{restaurantId}/review/{reviewId}

CreateReviewDto

μ‚¬μš©μžκ°€ 리뷰 μž‘μ„±ν•œ λ‚΄μš©μ„ λ°›μ•„μ˜€λŠ” DTO. 리뷰 λ‚΄μš©κ³Ό 평점은 ν•„μˆ˜λ‘œ λ“€μ–΄κ°€μ•Ό 함

ReadReviewDto

μ‚¬μš©μžμ— 따라 ui λ³€ν™”λ₯Ό μ£ΌκΈ° μœ„ν•΄ ν˜„μž¬ ν•΄λ‹Ή μš”μ²­μ„ 보낸 μ‚¬μš©μžμ˜ 정보λ₯Ό 포함해 ν•¨κ»˜ λ°˜ν™˜

UpdateReviewDto

이전 리뷰와 λ™μΌν•œμ§€λ₯Ό νŒλ‹¨ν•˜λŠ” 둜직 λ“€μ–΄μžˆμŒ

리뷰 μž‘μ„±, μˆ˜μ •, 쑰회, μ‚­μ œ

  • μž‘μ„±

    • λ‘œκ·ΈμΈν•œ μ‚¬μš©μžλ§Œ μž‘μ„±ν•  수 있음
    • 리뷰에 이미지λ₯Ό 첨뢀할 수 있으며, μ΄λ―Έμ§€λŠ” bucketμ—μ„œ 관리 함
  • μˆ˜μ •

    • 리뷰에 μˆ˜μ •μ‚¬ν•­μ΄ μžˆμ„ λ•Œλ§Œ μˆ˜μ •ν•  수 있으며, 리뷰λ₯Ό μž‘μ„±ν–ˆλ˜ μœ μ €λ§Œμ΄ μˆ˜μ •ν•  수 있음
  • 쑰회

    • μŒμ‹μ  μƒμ„ΈνŽ˜μ΄μ§€μ—μ„œ κ·Έ νŽ˜μ΄μ§€μ— ν•΄λ‹Ήν•˜λŠ” 식당에 λŒ€ν•œ 리뷰 쑰회 κ°€λŠ₯
  • μ‚­μ œ

    • 리뷰λ₯Ό μž‘μ„±ν–ˆλ˜ μœ μ €λ§Œμ΄ μˆ˜μ • κ°€λŠ₯

μΈν”Œλ£¨μ–Έμ„œ 맛집 μ°ΎκΈ°

κΈ°λŠ₯ HTTP METHOD URL
μΈν”Œλ£¨μ–Έμ„œ 맛집 μ°ΎκΈ° νŽ˜μ΄μ§€ 이동 GET matprint/named
μΉ΄ν…Œκ³ λ¦¬ 선택 쑰회 GET api/named
μΉ΄ν…Œκ³ λ¦¬ 선택 μ •λ ¬ 쑰회 GET api/named&category={categry}&sortBy={sortBy}

RestaurantDto

μΈν”Œλ£¨μ–Έμ„œ 맛집 μ°ΎκΈ° νŽ˜μ΄μ§€μ—μ„œ 보여쀄 κ°„λ‹¨ν•œ μ •λ³΄λ“€λ§Œ μžˆλŠ” DTO

μΈν”Œλ£¨μ–Έμ„œ 맛집 데이터 μˆ˜μ§‘, 쑰회

  • 데이터 μˆ˜μ§‘

    • μΈν”Œλ£¨μ–Έμ„œλ“€μ΄ λ‹€λ…€κ°„ λ§›μ§‘μœΌλ‘œ 유λͺ…ν•œ 곳은 λ§Žμ§€λ§Œ, 가보고 μ‹Άμ–΄ 찾아보렀면 일일이 κ²€μƒ‰ν•΄μ•Όν•˜ λ²ˆκ±°λ‘œμ›€μ΄ 있음
    • μ„±μ‹œκ²½ 맛집 같은 경우 λ‹€λ…€κ°„ 맛집듀을 식당 정보와 ν•¨κ»˜ μœ νŠœλΈŒμ— μ—…λ‘œλ“œ 함
    • μœ νŠœλΈŒμ—μ„œ ν¬λ‘€λ§ν•œ λΉ„μ •ν˜• 데이터λ₯Ό Tokenization, Normalizationλ₯Ό 톡해 넀이버 API에 검색이 잘 λ˜λ„λ‘ μ§ˆμ˜μ–΄λ₯Ό λ§Œλ“¦
    • 이 μ§ˆμ˜μ–΄λ₯Ό 톡해 넀이버 검색에 κ²€μƒ‰ν•¨μœΌλ‘œμ¨ λΉ„μ •ν˜• 데이터λ₯Ό μ •ν˜• λ°μ΄ν„°λ‘œ λ°”κΏ”μ€Œ.
  • 데이터 쑰회

    • 일련의 데이터 μˆ˜μ§‘κ³Όμ •μœΌλ‘œ μ–»μ–΄μ˜¨ μΈν”Œλ£¨μ–Έμ„œ 맛집 데이터듀을 μ‘°νšŒν•˜λŠ” ν•¨μˆ˜λ₯Ό λ§Œλ“¦
    • RequestParam으둜 μΉ΄ν…Œκ³ λ¦¬λŠ” ν•„μˆ˜μ μœΌλ‘œ λ°›μ•„μ„œ, μ–΄λ–€ μΈν”Œλ£¨μ–Έμ„œμ˜ 맛집인지 λ³΄μ—¬μ€Œ
    • 선택적인 νŒŒλΌλ―Έν„°λ‘œ 이름 순, 리뷰 λ§Žμ€ 순, 평점 높은 순 λ“±μ˜ μ •λ ¬ 기쀀을 μž…λ ₯λ°›μ•„ μ‘°νšŒν•  수 있음
    • μ›Ή νŽ˜μ΄μ§€μ—μ„œλŠ” 넀이버 지도 apiλ₯Ό ν™œμš©ν•˜μ—¬ 마컀λ₯Ό μΈν”Œλ£¨μ–Έμ„œμ˜ μ–Όκ΅΄λ‘œ μ„€μ •ν•˜μ—¬ 차별적인 μš”μ†Œλ₯Ό λ„£μ—ˆκ³ , 마컀λ₯Ό λˆ„λ₯΄λ©΄ μ‹λ‹Ήμ˜ κ°„λ‹¨ν•œ μ„€λͺ…이 λ‚˜μ˜΄
    • 맛집 검색과 λ™μΌν•˜κ²Œ μŒμ‹μ  이름을 λˆ„λ₯΄λ©΄ 상세 νŽ˜μ΄μ§€λ‘œ 이동함
    • μ„±μ‹œκ²½, λ˜κ°„μ§‘ 맛집은 μ „κ΅­μ μœΌλ‘œ λΆ„ν¬λ˜μ–΄ μžˆμ–΄ 처음 쀑심 μ’Œν‘œλ₯Ό 전ꡭ이 λ‹€ 보이게 섀정함
    • 이영자 맛집은 μ„œμšΈμ— λΆ„ν¬λ˜μ–΄ μžˆμ–΄, 맛집 κ°€μž₯ λ°€μ§‘λ˜μ–΄ μžˆλŠ” μ’Œν‘œλ₯Ό κΈ°μ€€μœΌλ‘œ ν•œ λˆˆμ— 보이게 섀정함

image

동행찾기

κΈ°λŠ₯ HTTP METHOD URL
동행 μ°ΎκΈ° νŽ˜μ΄μ§€ 이동 GET /mate
μ‚¬μš©μž 동행 κΈ€ μ „μ²΄μ‘°νšŒ GET api/user/posts
동행 κΈ€ μž‘μ„± POST api/mate
동행 κΈ€ μˆ˜μ • PUT api/mate
동행 κΈ€ μ‚­μ œ DELETE api/mate/post/
동행 κΈ€ 단일 쑰회 GET api/mate/{postId}
동행 κΈ€ 전체 쑰회 GET api/mate
동행 κΈ€ 검색 GET api/mate/search?
λŒ“κΈ€ 생성 POST api/mate/{postId}/comment
λŒ“κΈ€ 쑰회 GET api/{postId}/comment
λŒ“κΈ€ μˆ˜μ • PUT api/mate/{postId}/comment/{commentId}
λŒ“κΈ€ μ‚­μ œ DELETE api/mate/{postId}/comment/{commentId}

PostDto

νŠΉμ • μœ μ €κ°€ μž‘μ„±ν•œ 동행글 쑰회λ₯Ό μœ„ν•œ DTO

CreatePostDto

동행글 μž‘μ„±μ„ μœ„ν•œ DTO

ReadPostDto

검색어λ₯Ό 톡해 동행 글을 μ°ΎκΈ° μœ„ν•΄ μž‘μ„±ν•œ DTO

UpdatePostDto

동행글 μˆ˜μ •μ„ μœ„ν•œ DTO. μ΄μ „μ˜ 것과 λΉ„κ΅ν•΄μ„œ μˆ˜μ •λœ 것이 μ—†μœΌλ©΄ μ—…λ°μ΄νŠΈ ν•˜μ§€ μ•ŠλŠ”λ‹€.

CommentDto

νŠΉμ • λ™ν–‰κΈ€μ˜ λŒ“κΈ€ 쑰회λ₯Ό μœ„ν•œ DTO

CreateCommentDto

λŒ“κΈ€ μž‘μ„±μ„ μœ„ν•œ DTO

UpdateCommentDto

λŒ“κΈ€ μˆ˜μ •μ„ μœ„ν•œ DTO

동행 κ²Œμ‹œνŒ

  • 동행글 등둝, 쑰회, μˆ˜μ •, μ‚­μ œ

    • 동행 κΈ€ 등둝은 title, content, λ°©λ¬Έ μ˜ˆμ • λ‚ μ§œ, 동행 μŠ€νƒ€μΌ λ“±μ˜ λ‚΄μš©μ΄ λ“€μ–΄μžˆμŒ
    • 동행 κΈ€ μ‘°νšŒλŠ” κ²Œμ‹œνŒμ—μ„œλŠ” λͺ¨λ“  동행 글을 보여주며, μ΄μš©μžλŠ” 제λͺ©, 검색어, 성별, λ‚˜μ΄, λͺ¨μ§‘ μƒνƒœ 등을 ν•„ν„°λ‘œ 검색 κ°€λŠ₯함. λ˜ν•œ λ§ˆμ΄νŽ˜μ΄μ§€μ—μ„œ λ‚΄κ°€ μ“΄ 동행글을 쑰회 κ°€λŠ₯함
    • 동행 κΈ€ μˆ˜μ •, μ‚­μ œλŠ” ν•΄λ‹Ή κΈ€ μž‘μ„±μžλ§Œ κ°€λŠ₯ν•˜κ³  μˆ˜μ •μ€ 변경사항이 μžˆμ–΄μ•Όλ§Œ κ°€λŠ₯함
  • λŒ“κΈ€ 등둝, 쑰회, μˆ˜μ •, μ‚­μ œ

    • λŒ“κΈ€ 등둝은 λŒ“κΈ€ λ‚΄μš©λ§Œ 적어주면 되고, 둜그인 ν•œ μ‚¬μš©μžλ§Œ 이용 κ°€λŠ₯
    • λŒ“κΈ€ μ‘°νšŒλŠ” ν•΄λ‹Ή λ™ν–‰κΈ€μ—μ„œ 쑰회 κ°€λŠ₯
    • λŒ“κΈ€ μˆ˜μ •, μ‚­μ œλŠ” λŒ“κΈ€ μž‘μ„±μžλ§Œ κ°€λŠ₯함

ν”„λ‘œμ νŠΈ 배포 ν”„λ‘œμ„ΈμŠ€

μ‚¬μš© 기술 : AWS EC2 (Ubuntu), S3, RDS, Route53, Load Balancing, Https, SSL, Docker, Gradle

  • AWS EC2 : Docker container κ°€ 올라갈 EC2 μΈμŠ€ν„΄μŠ€
  • S3 : μ„œλΉ„μŠ€μ—μ„œ μ—…λ‘œλ“œ λ˜λŠ” 이미지 μ €μž₯μ†Œ
  • RDS : Mysql Server
  • Route53 : 도메인 적용 및 λ‘œλ“œ λ°ΈλŸ°μ„œλ‘œ λΌμš°νŒ…
  • Https, SSL, Load Balancing : Https μ μš©μ„ μœ„ν•œ SSL μΈμ¦μ„œ 및 Load Balancing 을 ν™œμš©ν•΄ 80 포트둜 λ“€μ–΄μ˜€λŠ” μš”μ²­μ„ 443 포트둜 λ¦¬λ‹€μ΄λ ‰νŠΈ, 443 포트둜 λ“€μ–΄μ˜¨ μš”μ²­μ„ λ‹€μ‹œ EC2 80 포트둜 전달
  • Gradle : ν”„λ‘œμ νŠΈ λΉŒλ“œ (make jar file)
  • Docker : ν”„λ‘œμ νŠΈ λΉŒλ“œ ν›„ jar file 둜 docker image 생성, docker hub 에 μ—…λ‘œλ“œ ν›„ ec2 μ—μ„œ λ‹€μš΄λ‘œλ“œ λ°›μ•„ container ν™” μ‹œν‚΄

EC2 μΈμŠ€ν„΄μŠ€μ—μ„œ spring image, redis image, redis-insight image λ₯Ό λ™μ‹œμ— λ„μš°κΈ° μœ„ν•΄ docker-compose ν™œμš©

spring 의 application.yaml 파일 λ‚΄λΆ€μ˜ 민감 μ •λ³΄λŠ” ν™˜κ²½ λ³€μˆ˜λ‘œ μ„€μ •(EC2 μΈμŠ€ν„΄μŠ€μ—μ„œ 직업 .env 파일 μž‘μ„±)

μž‘μ„±ν•œ docker-compose.yml (EC2 μΈμŠ€ν„΄μŠ€μ—μ„œ 직접 μž‘μ„±)

services:
  redis:
    image: redis
    ports:
      - 6379:6379
    container_name: redis
    restart: always

  redis-insight:
    image: redislabs/redisinsight:latest
    ports:
      - 8001:8001
    container_name: redis-insight
    restart: always

  matprint:
    image: syber911911/matprint:0.1
    ports:
      - 80:8080
    container_name: matprint
    restart: always
    environment:
      - DB_URL=${DB_URL}
      - DB_USER=${DB_USER}
      - DB_PASSWORD=${DB_PASSWORD}
      - JWT_SECRET=${JWT_SECRET}
      - ACCESS_KEY=${ACCESS_KEY}
      - BUCKET=${BUCKET}
      - SECRET_KEY=${SECRET_KEY}
    depends_on:
      - redis
      - redis-insight

About

used Spring 3.1

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 52.5%
  • HTML 26.2%
  • JavaScript 20.5%
  • Other 0.8%