Skip to content

Latest commit

ย 

History

History
97 lines (74 loc) ยท 4.02 KB

File metadata and controls

97 lines (74 loc) ยท 4.02 KB

Checkmate Backend

์Šคํ„ฐ๋”” ๋ชจ์ง‘๋ถ€ํ„ฐ ์ฐธ์—ฌ, ์ธ์ฆ, ๊ธฐ๋ก ๊ด€๋ฆฌ๊นŒ์ง€ ํ•œ ๋ฒˆ์— ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“  ๋ชจ๋ฐ”์ผ ์Šคํ„ฐ๋”” ๊ด€๋ฆฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ MSA ๊ธฐ๋ฐ˜ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„

Image Image Image Image

๐Ÿšจ Problem

  • ๊ธฐ์กด ์ธ์ฆ ์Šคํ„ฐ๋””๋Š” ์นด์นด์˜คํ†ก ์˜คํ”ˆ์ฑ„ํŒ…, ๋””์Šค์ฝ”๋“œ, ์ˆ˜๊ธฐ ์Šคํ”„๋ ˆ๋“œ์‹œํŠธ ๋“ฑ ์—ฌ๋Ÿฌ ๋„๊ตฌ๋ฅผ ํ•จ๊ป˜ ์จ์•ผ ํ•ด์„œ ์šด์˜ ํ๋ฆ„์ด ๋ถ„์‚ฐ.
  • ์ธ์ฆ ํ™•์ธ, ๋ฏธ์ธ์ฆ ์ง‘๊ณ„, ํŒจ๋„ํ‹ฐ ๋ฐ˜์˜, ๊ณต์ง€ ์ „๋‹ฌ ๊ฐ™์€ ์ž‘์—…์ด ์ž๋™ํ™”๋˜์ง€ ์•Š์•„ ์šด์˜์ž ๋ถ€๋‹ด์ด ํผ.
  • GitHub ์ปค๋ฐ‹ ์ธ์ฆ, ์ฒดํฌ๋ฆฌ์ŠคํŠธ ์ธ์ฆ, ์‚ฌ์ง„ ์ธ์ฆ์ฒ˜๋Ÿผ ์Šคํ„ฐ๋””๋ณ„ ์š”๊ตฌ์‚ฌํ•ญ์ด ๋‹ฌ๋ผ๋„ ์ด๋ฅผ ์ผ๊ด€๋˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์„œ๋ฒ„ ๊ตฌ์กฐ๊ฐ€ ํ•„์š”.

๐ŸŽฏ Goal

  • ์Šคํ„ฐ๋”” ์ƒ์„ฑ, ์ฐธ์—ฌ, ์ธ์ฆ, ๊ธฐ๋ก, ํฌ์ธํŠธ, ๋ฌธ์˜ ๊ธฐ๋Šฅ์„ MSA ๊ตฌ์กฐ๋กœ ๋ถ„๋ฆฌํ•ด ์•ˆ์ •์ ์œผ๋กœ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฑ์—”๋“œ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ.
  • ๋‹ค์–‘ํ•œ ์ธ์ฆ ๋ฐฉ์‹์„ ํ•˜๋‚˜์˜ ๋„๋ฉ”์ธ ๋ชจ๋ธ ์•ˆ์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฉ€ํ‹ฐ ์ธ์ฆ ์Šคํ„ฐ๋”” ์„œ๋ฒ„๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ•จ.
  • ์‚ฌ์šฉ์ž ์ธ์ฆ, API ๋ผ์šฐํŒ…, ์„œ๋น„์Šค ๊ฐ„ ๊ณตํ†ต ์‘๋‹ต ํ˜•์‹๊นŒ์ง€ ํ†ตํ•ฉํ•ด ํ”„๋ก ํŠธ์—”๋“œ์™€ ์šด์˜ ๊ธฐ๋Šฅ์ด ์ผ๊ด€๋˜๊ฒŒ ๋™์ž‘ํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ์ง€ํ–ฅํ•จ.

๐Ÿ›  ๊ธฐ๋Šฅ ์„ค๋ช…

์„œ๋น„์Šค ์—ญํ• 
gateway-service JWT ์ธ์ฆ ํ•„ํ„ฐ ์ ์šฉ ๋ฐ ์™ธ๋ถ€ ์š”์ฒญ ๋ผ์šฐํŒ…
eureka-service ์„œ๋น„์Šค ๋“ฑ๋ก ๋ฐ ๋””์Šค์ปค๋ฒ„๋ฆฌ ๊ด€๋ฆฌ
user-service ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ, OAuth2, JWT, ์‚ฌ์šฉ์ž ์ •๋ณด, ๋ฐฐ์ง€
study-service ์Šคํ„ฐ๋”” ์ƒ์„ฑ/์ฐธ์—ฌ/๊ฒ€์ƒ‰, ๊ฒŒ์‹œํŒ, ์ธ์ฆ ๊ธฐ๋ก, GitHub/TODO/์‚ฌ์ง„/์œ„์น˜ ์ธ์ฆ
store-service ํฌ์ธํŠธ, ์ƒํ’ˆ, ๊ตฌ๋งค, ์‚ฌ์šฉ์ž ์•„์ดํ…œ, ์•Œ๋ฆผ
community-service ๊ณต์ง€์‚ฌํ•ญ, ๋ฌธ์˜, ๋ฌธ์˜ ๋Œ“๊ธ€
common-service ๊ณตํ†ต DTO, ์˜ˆ์™ธ, ๊ณตํ†ต ์—”ํ‹ฐํ‹ฐ, ๋ณด์•ˆ ์œ ํ‹ธ

๐Ÿ’ป Tech Stack

  • Spring Boot 3
  • Spring Cloud Gateway
  • Netflix Eureka
  • Spring Security
  • OAuth2 Client
  • QueryDSL
  • PostgreSQL
  • Redis
  • RabbitMQ

๐Ÿงฉ Architecture

  • MSA ๊ธฐ๋ฐ˜์œผ๋กœ ๋„๋ฉ”์ธ๋ณ„ ์„œ๋น„์Šค๋ฅผ ๋ถ„๋ฆฌํ•œ ๊ตฌ์กฐ.
  • gateway-service๊ฐ€ ์ง„์ž…์ ์ด ๋˜๊ณ , eureka-service๊ฐ€ ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ๋ฅผ ๋‹ด๋‹น.
  • ๊ฐ ์„œ๋น„์Šค๋Š” common-service๋ฅผ ๊ณต์œ ํ•˜๋ฉฐ ๋…๋ฆฝ์ ์œผ๋กœ ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๋„๋ก ๊ตฌ์„ฑ.
Client
  |
  v
gateway-service
  |
  +-- user-service
  +-- study-service
  +-- store-service
  +-- community-service
  |
  +-- common-service

eureka-service
  |
  +-- service discovery

Backend Structure

  • gateway-service๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์™ธ๋ถ€ ์š”์ฒญ์„ ๋ฐ›์•„ ์ธ์ฆ ํ•„ํ„ฐ ์ ์šฉ ํ›„ ๊ฐ ๋„๋ฉ”์ธ ์„œ๋น„์Šค๋กœ ๋ผ์šฐํŒ…ํ•œ๋‹ค.
  • eureka-service๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฐ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์˜ ๋“ฑ๋ก ๋ฐ ๋””์Šค์ปค๋ฒ„๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.
  • ๋„๋ฉ”์ธ๋ณ„ ๊ธฐ๋Šฅ์€ user-service, study-service, store-service, community-service๋กœ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌํ•œ๋‹ค.
  • ๊ณตํ†ต ์‘๋‹ต ํ˜•์‹, ์˜ˆ์™ธ, ๋ณด์•ˆ ๊ด€๋ จ ๊ณตํ†ต ์ฝ”๋“œ๋Š” common-service์— ๋ชจ์•„ ์žฌ์‚ฌ์šฉํ•œ๋‹ค.
checkmate_backend
โ”œโ”€โ”€ common-service/           # ๊ณตํ†ต DTO, ์˜ˆ์™ธ, ๊ณตํ†ต ์—”ํ‹ฐํ‹ฐ, ๋ณด์•ˆ ์œ ํ‹ธ
โ”œโ”€โ”€ community-service/        # ๊ณต์ง€์‚ฌํ•ญ, ๋ฌธ์˜, ๋ฌธ์˜ ๋Œ“๊ธ€
โ”œโ”€โ”€ eureka-service/           
โ”œโ”€โ”€ gateway-service/          # API ๊ฒŒ์ดํŠธ์›จ์ด, JWT ์ธ์ฆ ํ•„ํ„ฐ, ๋ผ์šฐํŒ…
โ”œโ”€โ”€ study-service/            # ์Šคํ„ฐ๋”” ์ƒ์„ฑ/์ฐธ์—ฌ/์ธ์ฆ/๊ฒŒ์‹œํŒ/๊ธฐ๋ก
โ”œโ”€โ”€ store-service/            # ํฌ์ธํŠธ, ์ƒํ’ˆ, ๊ตฌ๋งค, ์•Œ๋ฆผ
โ”œโ”€โ”€ user-service/             # ํšŒ์›, OAuth2 ๋กœ๊ทธ์ธ, JWT, ๋ฐฐ์ง€
โ”œโ”€โ”€ build.gradle              
โ”œโ”€โ”€ settings.gradle           # ๋ฉ€ํ‹ฐ๋ชจ๋“ˆ ๊ตฌ์„ฑ
โ”œโ”€โ”€ Dockerfile
โ”œโ”€โ”€ Jenkinsfile
โ””โ”€โ”€ gradlew