Skip to content

Latest commit

ย 

History

676 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Petbulance-BE

๋ฐ˜๋ ค๋™๋ฌผ ๋ณดํ˜ธ์ž๋ฅผ ์œ„ํ•œ ๋™๋ฌผ๋ณ‘์› ํƒ์ƒ‰, ์˜์ˆ˜์ฆ ๊ธฐ๋ฐ˜ ๋ฆฌ๋ทฐ, ์ปค๋ฎค๋‹ˆํ‹ฐ, ์•Œ๋ฆผ, ๊ด€๋ฆฌ์ž ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” Petbulance ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค.
ํŒ€ ํ”„๋กœ์ ํŠธ์—์„œ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋กœ ์ฐธ์—ฌํ–ˆ์œผ๋ฉฐ, ๋ณ‘์› ๊ฒ€์ƒ‰/๋งค์นญ, ๋ฆฌ๋ทฐ ๋„๋ฉ”์ธ, ์ธ์ฆ/๊ถŒํ•œ, ๊ด€๋ฆฌ์ž ๊ธฐ๋Šฅ, ์šด์˜ ๋ชจ๋‹ˆํ„ฐ๋ง ์˜์—ญ์„ ์ค‘์‹ฌ์œผ๋กœ ๊ตฌํ˜„๊ณผ ๋ฆฌํŒฉํ„ฐ๋ง์„ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

Petbulance๋Š” ๋ณดํ˜ธ์ž๊ฐ€ ๋ฐ˜๋ ค๋™๋ฌผ์—๊ฒŒ ๋งž๋Š” ๋ณ‘์›์„ ์ฐพ๊ณ , ์‹ค์ œ ์ง„๋ฃŒ ๊ฒฝํ—˜์„ ๋ฆฌ๋ทฐ๋กœ ๋‚จ๊ธธ ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.

  • ์œ„์น˜ ๊ธฐ๋ฐ˜ ๋™๋ฌผ๋ณ‘์› ๊ฒ€์ƒ‰ ๋ฐ ๋งค์นญ
  • ์˜์ˆ˜์ฆ ์ด๋ฏธ์ง€ ๊ธฐ๋ฐ˜ ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํ๋ฆ„
  • ๋ณ‘์› ์ƒ์„ธ, ๋ณ‘์› ์นด๋“œ, ๋ฆฌ๋ทฐ ํ•„ํ„ฐ๋ง
  • ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ฒŒ์‹œ๊ธ€, ๋Œ“๊ธ€, ์ข‹์•„์š”
  • ์†Œ์…œ ๋กœ๊ทธ์ธ๊ณผ JWT ์ธ์ฆ
  • ๊ด€๋ฆฌ์ž์šฉ ํšŒ์›/๋ณ‘์›/๋ฆฌ๋ทฐ/๊ณต์ง€/๋ฌธ์˜ ๊ด€๋ฆฌ
  • FCM ์•Œ๋ฆผ, S3 ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ, AI ์ง„๋‹จ API ์—ฐ๋™

๋‹ด๋‹น ์—ญํ• 

ํŒ€ ํ”„๋กœ์ ํŠธ์˜ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž ์ค‘ ํ•œ ๋ช…์œผ๋กœ ์ฐธ์—ฌํ–ˆ์Šต๋‹ˆ๋‹ค.

์˜์—ญ ์ž‘์—… ๋‚ด์šฉ
๋ณ‘์› ๋„๋ฉ”์ธ ๋ณ‘์› ๊ฒ€์ƒ‰, ์ƒ์„ธ ์กฐํšŒ, ์นด๋“œ ์กฐํšŒ, ์œ„์น˜ ๊ธฐ๋ฐ˜ ๋งค์นญ API ๊ฐœ์„ 
๋ฆฌ๋ทฐ ๋„๋ฉ”์ธ ์˜์ˆ˜์ฆ ๋ฆฌ๋ทฐ, ๋ฆฌ๋ทฐ ๊ฒ€์ƒ‰/ํ•„ํ„ฐ, ๋ณ‘์›๋ณ„ ๋ฆฌ๋ทฐ ์ปค์„œ ํŽ˜์ด์ง€๋„ค์ด์…˜, ๋ฆฌ๋ทฐ ์ข‹์•„์š” ๊ธฐ๋Šฅ
์ธ์ฆ/๊ถŒํ•œ JWT ๋งŒ๋ฃŒ ์ฒ˜๋ฆฌ, ํ† ํฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ, ์†Œ์…œ ๋กœ๊ทธ์ธ ์—ฐ๋™ ํ๋ฆ„ ๊ฐœ์„ 
๊ด€๋ฆฌ์ž ๊ธฐ๋Šฅ ํšŒ์› ์ œ์žฌ, ๋ณ‘์› ๊ด€๋ฆฌ, ๋ฆฌ๋ทฐ ํ™œ์„ฑ/๋น„ํ™œ์„ฑ, ์•ฝ๊ด€ ์ ์šฉ ๊ธฐ๋Šฅ ๊ฐœ์„ 
์šด์˜ ํ’ˆ์งˆ Actuator, Prometheus, Sentry ๊ธฐ๋ฐ˜ ๊ด€์ธก ํฌ์ธํŠธ ์ถ”๊ฐ€
ํ…Œ์ŠคํŠธ ๋ฆฌ๋ทฐ ์„œ๋น„์Šค ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋ฐ ์ขŒํ‘œ ์ฒ˜๋ฆฌ ๋กœ์ง ๊ฒ€์ฆ

๊ธฐ์ˆ  ์Šคํƒ

์˜์—ญ ๊ธฐ์ˆ 
Backend Java 17, Spring Boot 3.5, Spring Web, Spring Security
Persistence Spring Data JPA, QueryDSL, MySQL, H2 Test DB
Cache Redis
Auth JWT, OAuth2 Client, Kakao/Naver/Google Login
File / Cloud AWS S3, AWS Lambda SDK
Geo Hibernate Spatial, JTS, Lucene Spatial Extras
AI / External Gemini API, WebClient
Notification Firebase Admin SDK, FCM
Docs / Ops Springdoc OpenAPI, Actuator, Prometheus, Sentry
Deployment Docker Compose, Blue/Green compose files

์ฃผ์š” ๊ธฐ๋Šฅ

๋ณ‘์› ๊ฒ€์ƒ‰ ๋ฐ ๋งค์นญ

์‚ฌ์šฉ์ž์˜ ํ˜„์žฌ ์œ„์น˜, ๋™๋ฌผ ์ข…๋ฅ˜, ํ•„ํ„ฐ ์กฐ๊ฑด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ณ‘์› ๋ชฉ๋ก์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

  • ๋ณ‘์› ๋ชฉ๋ก ๊ฒ€์ƒ‰: GET /hospitals
  • ๋ณ‘์› ์ƒ์„ธ ์กฐํšŒ: GET /hospitals/{hospitalId}
  • ๋ณ‘์› ์นด๋“œ ์กฐํšŒ: GET /hospitals/card/{hospitalId}
  • ์œ„์น˜ ๊ธฐ๋ฐ˜ ๋ณ‘์› ๋งค์นญ: GET /hospitals/matching
  • ๋ณ‘์› ์ƒ์„ธ ๋งค์นญ ์ •๋ณด: GET /hospitals/{hospitalId}/matching

QueryDSL ๊ธฐ๋ฐ˜ ๋™์  ์กฐ๊ฑด๊ณผ ์ขŒํ‘œ ์ •๋ณด๋ฅผ ํ™œ์šฉํ•ด ํ•„ํ„ฐ๋ง, ๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ, ์ƒ์„ธ ์ •๋ณด๋ฅผ ์กฐํ•ฉํ•ฉ๋‹ˆ๋‹ค.

์˜์ˆ˜์ฆ ๋ฆฌ๋ทฐ

์ง„๋ฃŒ ์˜์ˆ˜์ฆ ์ด๋ฏธ์ง€๋ฅผ ์—…๋กœ๋“œํ•˜๊ณ , ๋ณ‘์› ๋ฆฌ๋ทฐ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ํ๋ฆ„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • ์˜์ˆ˜์ฆ ์ด๋ฏธ์ง€ ์ธ์‹: POST /receipts
  • ๋ณ‘์›๋ช… ๊ฒ€์ƒ‰: GET /receipts/{hospitalName}
  • ๋ฆฌ๋ทฐ ๊ฒ€์ƒ‰: GET /receipts/search/{value}
  • ๋ฆฌ๋ทฐ ํ•„ํ„ฐ๋ง: GET /receipts/filter
  • ๋ณ‘์›๋ณ„ ๋ฆฌ๋ทฐ ์ปค์„œ ํŽ˜์ด์ง€๋„ค์ด์…˜: GET /receipts/reviews/{hospitalId}
  • ๋ฆฌ๋ทฐ ์ž‘์„ฑ/์ˆ˜์ •/์‚ญ์ œ
  • ๋ฆฌ๋ทฐ ์ข‹์•„์š”/์ข‹์•„์š” ์ทจ์†Œ
  • ๋‚ด ๋ฆฌ๋ทฐ ์กฐํšŒ

๋ฆฌ๋ทฐ ๋ชฉ๋ก์€ cursor ๊ธฐ๋ฐ˜์œผ๋กœ ์กฐํšŒํ•˜๋ฉฐ, ์ •๋ ฌ ๊ธฐ์ค€๊ณผ ์ด๋ฏธ์ง€ ๋ฆฌ๋ทฐ ์—ฌ๋ถ€๋ฅผ ๋ถ„๋ฆฌํ•ด ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ธ์ฆ๊ณผ ์‚ฌ์šฉ์ž ๊ธฐ๋Šฅ

  • JWT ๊ธฐ๋ฐ˜ access token ๋ฐœ๊ธ‰/๊ฒ€์ฆ
  • refresh token Redis ์ €์žฅ
  • Kakao, Naver, Google OAuth2 ๋กœ๊ทธ์ธ
  • ๋‹‰๋„ค์ž„ ์„ค์ •๊ณผ ํ”„๋กœํ•„ ์ˆ˜์ •
  • ์†Œ์…œ ๊ณ„์ • ์—ฐ๊ฒฐ/ํ•ด์ œ
  • ์•Œ๋ฆผ ์„ค์ • ๊ด€๋ฆฌ
  • ํšŒ์› ํƒˆํ‡ด์™€ ๊ถŒํ•œ ์กฐํšŒ

์ปค๋ฎค๋‹ˆํ‹ฐ

  • ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ, ์กฐํšŒ, ์ˆ˜์ •, ์‚ญ์ œ
  • ๊ฒŒ์‹œ๊ธ€ ๊ฒ€์ƒ‰
  • ๋Œ“๊ธ€ ์ž‘์„ฑ/์กฐํšŒ/์ˆ˜์ •/์‚ญ์ œ
  • ๊ฒŒ์‹œ๊ธ€ ์ข‹์•„์š”
  • ์ตœ๊ทผ ๊ฒ€์ƒ‰์–ด์™€ ์ตœ๊ทผ ์กฐํšŒ ๋ณ‘์› ๊ด€๋ฆฌ
  • ์‹ ๊ณ  ๊ธฐ๋Šฅ

๊ด€๋ฆฌ์ž ๊ธฐ๋Šฅ

๊ด€๋ฆฌ์ž๋Š” ๋ณ„๋„ API๋ฅผ ํ†ตํ•ด ์„œ๋น„์Šค ์šด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  • ํšŒ์› ๊ฒ€์ƒ‰, ์ƒ์„ธ ์กฐํšŒ, ์‚ญ์ œ
  • ๋ฆฌ๋ทฐ/์ปค๋ฎค๋‹ˆํ‹ฐ ์ œ์žฌ ๋ฐ ๋ณต๊ตฌ
  • ๋ณ‘์› ๋“ฑ๋ก, ์กฐํšŒ, ์‚ญ์ œ
  • ๋ฆฌ๋ทฐ ํ™œ์„ฑ/๋น„ํ™œ์„ฑ ๊ด€๋ฆฌ
  • ๊ณต์ง€, ๋ฌธ์˜, ์‹ ๊ณ  ๊ด€๋ฆฌ
  • ์•ฑ ๋ฒ„์ „, ์ง€์—ญ, ํ’ˆ์ข…, ์•ฝ๊ด€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ
  • ๋Œ€์‹œ๋ณด๋“œ ์ง€ํ‘œ ์กฐํšŒ

API ๊ทธ๋ฃน

Domain Base Path
Auth /auth
Users /users
Hospitals /hospitals
Reviews / Receipts /receipts
Posts /posts
Comments /comments
Notices /notices
QnA /qna
Reports /reports
Notifications /notifications
Admin /admin/**
AI /ai

ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

src/main/java/com/example/Petbulance_BE
โ”œโ”€โ”€ global
โ”‚   โ”œโ”€โ”€ common          # ๊ณตํ†ต ์‘๋‹ต, ์˜ˆ์™ธ, S3, ์ธ์ฆ ๊ณตํ†ต ๋กœ์ง
โ”‚   โ”œโ”€โ”€ config          # Redis, QueryDSL, WebClient ์„ค์ •
โ”‚   โ”œโ”€โ”€ filter          # JWT / Logout filter
โ”‚   โ”œโ”€โ”€ firebase        # FCM ์„ค์ • ๋ฐ ๋ฐœ์†ก
โ”‚   โ”œโ”€โ”€ oauth2          # OAuth2 provider response ์ฒ˜๋ฆฌ
โ”‚   โ”œโ”€โ”€ security        # Spring Security ์„ค์ •
โ”‚   โ””โ”€โ”€ util
โ””โ”€โ”€ domain
    โ”œโ”€โ”€ admin           # ๊ด€๋ฆฌ์ž ๊ธฐ๋Šฅ
    โ”œโ”€โ”€ ai              # AI ์ง„๋‹จ API
    โ”œโ”€โ”€ hospital        # ๋ณ‘์› ๊ฒ€์ƒ‰/์ƒ์„ธ/๋งค์นญ
    โ”œโ”€โ”€ review          # ์˜์ˆ˜์ฆ ๋ฆฌ๋ทฐ
    โ”œโ”€โ”€ post/comment    # ์ปค๋ฎค๋‹ˆํ‹ฐ
    โ”œโ”€โ”€ user/terms      # ์‚ฌ์šฉ์ž์™€ ์•ฝ๊ด€
    โ”œโ”€โ”€ notification    # ์•Œ๋ฆผ
    โ””โ”€โ”€ dashboard       # ๊ด€๋ฆฌ์ž ๋Œ€์‹œ๋ณด๋“œ

์‹คํ–‰ ๋ฐฉ๋ฒ•

์‚ฌ์ „ ์š”๊ตฌ์‚ฌํ•ญ

  • Java 17
  • MySQL
  • Redis

๋กœ์ปฌ ์‹คํ–‰

./gradlew bootRun

ํ…Œ์ŠคํŠธ

./gradlew test

๋ฐฐํฌ compose

docker compose -f docker-compose-blue.yml up -d
docker compose -f docker-compose-green.yml up -d

์šด์˜ ๊ด€์ 

  • Actuator endpoint์™€ Prometheus registry๋ฅผ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ๋ฅผ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค.
  • Sentry๋ฅผ ํ†ตํ•ด ๋Ÿฐํƒ€์ž„ ์˜ˆ์™ธ๋ฅผ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค.
  • Blue/Green compose ํŒŒ์ผ์„ ๋ถ„๋ฆฌํ•ด ๋ฐฐํฌ ์ „ํ™˜ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

์ •๋ฆฌ

Petbulance-BE๋Š” ์œ„์น˜ ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰, ๋ฆฌ๋ทฐ, ์ธ์ฆ, ๊ด€๋ฆฌ์ž ๊ธฐ๋Šฅ์ด ํ•œ ์„œ๋น„์Šค ์•ˆ์—์„œ ์œ ๊ธฐ์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜๋Š” ๋ฐฑ์—”๋“œ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.
ํŠนํžˆ ๋ณ‘์› ๊ฒ€์ƒ‰๊ณผ ๋ฆฌ๋ทฐ ๋„๋ฉ”์ธ์€ QueryDSL, ์ขŒํ‘œ ์ฒ˜๋ฆฌ, cursor paging, ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ, ์™ธ๋ถ€ API ์—ฐ๋™์ด ํ•จ๊ป˜ ๋“ค์–ด๊ฐ€ ์žˆ์–ด ๋‹จ์ˆœ CRUD๋ณด๋‹ค ๋ณตํ•ฉ์ ์ธ ๋ฐฑ์—”๋“œ ์„ค๊ณ„๋ฅผ ๊ฒฝํ—˜ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

About

๐ŸฆŠ ํŠน์ˆ˜๋™๋ฌผ ์„œ๋น„์Šค Petbulance-BE

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages