Skip to content

team-aliens/DMS-Backend

Repository files navigation

DMS

  • DMS๋Š” ํšจ์œจ์ ์ธ ๊ธฐ์ˆ™์‚ฌ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๊ธฐ์ˆ™์‚ฌ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค.
    • ์‚ฌ๊ฐ์„ ์ƒ๋‹˜๊ป˜์„  ์›น์œผ๋กœ ํ•™์ƒ ์ •๋ณด๋ฅผ ํŽธํ•˜๊ฒŒ ์กฐํšŒ, ๊ด€๋ฆฌํ•˜๊ณ  ์ž์Šต์‹ค์ด๋‚˜ ์‹ ์ฒญ ๋ฐ์ดํ„ฐ, ์ƒ/๋ฒŒ์  ๋‚ด์—ญ์„ ๋ชจ์•„์„œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ํ•™์ƒ์€ ์‚ฌ๊ฐ์„ ์ƒ๋‹˜๊ป˜ ์ง์ ‘ ์ฐพ์•„๊ฐˆ ํ•„์š” ์—†์ด ์•ฑ์œผ๋กœ ์ž์Šต์‹ค, ์ž”๋ฅ˜ ๋“ฑ์„ ์‹ ์ฒญํ•˜๊ณ  ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Backend

  • ํšจ์œจ์ ์ธ ์œ ์ง€๋ณด์ˆ˜์™€ ๊ธฐ๋Šฅ ํ™•์žฅ์„ ์œ„ํ•ด DB Table๊ณผ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ณ„ํš์ ์œผ๋กœ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค.

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

    • ์ ํ•ฉํ•œ ๋ณ€์ˆ˜, ๋ฉ”์„œ๋“œ, ํด๋ž˜์Šค ๋ช…์„ ์ž‘๋ช…ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
    • detekt๋ฅผ ์‚ฌ์šฉํ•ด ์ผ๊ด€์ ์ธ ์Šคํƒ€์ผ์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋‚˜ ์„ค๊ณ„ ๊ณผ์ •์„ Notion ๋ฌธ์„œ์— ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

  • ์„œ๋ฒ„ ์ธํ”„๋ผ๋Š” Terraform์„ ์‚ฌ์šฉํ•ด ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

ERD

image

archtecture

์ง€ํ–ฅํ•˜๋Š” ๋ฐฉํ–ฅ

  • DDD
    • ๋„๋ฉ”์ธ์˜ ์—ญํ• , ์ฑ…์ž„ ๋ถ„๋ฆฌ
    • ๊ฐ ๊ฐ์ฒด๊ฐ€ ์„œ๋กœ๊ฐ„์— ๊ณผํ•˜๊ฒŒ ์˜์กดํ•˜์ง€ ์•Š๋„๋ก ํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜์„ฑ ๋†’์ž„
  • Facade pattern
    • usecase ์ฝ”๋“œ(facade)์˜ DB ์ฟผ๋ฆฌ ํ˜ธ์ถœ์— ๋Œ€ํ•œ ์˜์กด ๋ถ„๋ฆฌ
    • (๊ฐ service method๋Š” ํ•˜๋‚˜์˜ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๋Š” ๋‹จ์œ„๋กœ ๊ตฌ์„ฑ)
  • Hexagonal Architecture
    • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๊ธฐ์ˆ ์— ๋Œ€ํ•œ ์ƒ์„ธ ๊ตฌํ˜„ ๋ถ„๋ฆฌ
    • core - ํ•ต์‹ฌ ๋กœ์ง ๋ฐ ๋„๋ฉ”์ธ ๋ชจ๋ธ์— ๋Œ€ํ•œ ์ฝ”๋“œ
    • presentation - ์›น ํ†ต์‹ ์— ๋Œ€ํ•œ ๊ด€๋ฆฌ ๋ฐ ์„ค์ •
    • persistence - DB ํ†ต์‹ ์— ๋Œ€ํ•œ ๊ด€๋ฆฌ ๋ฐ ์„ค์ •
    • infrastructure - ์ „์ฒด์— ์ ์šฉ๋˜๋Š” ํ•„ํ„ฐ, ์„ค์ •์ด๋‚˜ ๊ธฐํƒ€ third party ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ๊ตฌํ˜„

์ฒ˜๋ฆฌ flow

(์˜์กด ๋ฐฉํ–ฅ์ด ์•„๋‹ˆ๋ผ ์ง„ํ–‰ ๋ฐฉํ–ฅ์ž„)

flowchart TD
WA[webAdapter] --> UC[usecase];
UC -->|getService| P(command / query port);
UC -->|commandService| P;
UC -->|checkService| P;
P --> PA(adapter);
Loading

presentation module

1. webAdapter

์›น์—์„œ ์š”์ฒญ์„ ๋ฐ›์•„, request body๋‚˜ parameter ๋‚ด์šฉ์„ ๊ฒ€์ฆํ•˜๋Š” ์—ญํ• 

  • ์™ธ๋ถ€ ์š”์ฒญ์€ webRequest ๊ฐ์ฒด๋กœ ์ „๋‹ฌ๋œ๋‹ค.

  • webAdapter๋Š” usecase์—๊ฒŒ request ๊ฐ์ฒด ๋˜๋Š” value๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

    (request๋Š” ํ•ด๋‹น ๊ฐ์ฒด๋กœ domain์ด๋‚˜ entity๋ฅผ ์ƒ์„ฑํ•˜์•ผํ•˜๊ฑฐ๋‚˜, ๋ณ„๋„ ๋กœ์ง์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ •์˜ํ•จ)

  • usecase์˜ ๋ฐ˜ํ™˜๊ฐ’์„ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.


core module

2. usecase (facade)

๊ฐ usecase์— ๋Œ€ํ•œ facade๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์—ญํ• 

  • service ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ facade๋ฅผ ๊ตฌ์„ฑํ•จ (port์— ์ง์ ‘ ์˜์กดํ•˜์ง€ ์•Š์Œ)

    • ์ „์ฒด์ ์ธ ํ๋ฆ„๋งŒ ๋‚˜ํƒ€๋‚ด๊ณ , ๋„๋ฉ”์ธ์ด๋‚˜ query ํ˜ธ์ถœ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๊ตฌํ˜„์€ X โ†’ service์— ๋ฉ”์„œ๋“œ๋กœ ๋ถ„๋ฆฌ
  • usecase์— ํŠนํ™”๋œ ๋กœ์ง์„ ์ง์ ‘ ๊ตฌํ˜„ํ•  ์ˆ˜๋„ ์žˆ์Œ

  • usecase๋Š” service์—๊ฒŒ domain model ๋˜๋Š” value ์„ ์ „๋‹ฌํ•œ๋‹ค.

  • usecase๋Š” webAdapter์—๊ฒŒ response ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. (field๊ฐ€ nullable์ธ ๋ณ„๋„ domain model๋กœ ๋ฆฌํŒฉํ† ๋ง ์˜ˆ์ •?)

3. service

query๋‚˜ port ํ˜ธ์ถœ์„ domain๊ณผ ๊ด€๋ จ๋œ ์ถ”์ƒ์  ์˜๋ฏธ ๋‹จ์œ„๋กœ ๋ฌถ์–ด์ฃผ๋Š” ์—ญํ• 

  • ex. A ์กฐํšŒ์‹œ ํ•ด๋‹น ๊ฐ์ฒด๊ฐ€ ๊ฐ™์€ ํ•™๊ต์˜ ๊ฐ์ฒด์ธ์ง€ ํ•ญ์ƒ ๊ฒ€์ฆํ•ด์•ผํ•œ๋‹ค. โ†’ usecase์—์„œ queryPort๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๋งค๋ฒˆ schoolId ๋น„๊ต๋ฅผ ํ•ด์ฃผ์ง€ ์•Š๊ณ , ํ•ด๋‹น ๋™์ž‘์€ service์— ๋ฉ”์„œ๋“œ๋กœ ๊ตฌํ˜„ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  usecase์—์„œ A๋ฅผ ์กฐํšŒํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ service์— ์ •์˜๋˜์–ด์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

service ์ข…๋ฅ˜ (๊น”๋”ํ•œ ๋ถ„๋ฅ˜๋ฅผ ์œ„ํ•ด ๋‚˜๋ˆ”)

  • CheckService

    • ๊ฒ€์ฆ ๋ฉ”์„œ๋“œ
    • ์ฃผ๋กœ exist ํ™•์ธ ๋“ฑ๋“ฑ..
  • GetService

    • ์กฐํšŒ ๋ฉ”์„œ๋“œ
    • ๋น„์Šทํ•œ ์ฟผ๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ํŒŒ๋ผ๋ฏธํ„ฐ nullable๋กœ ๋†“๊ณ  ์ „๋‹ฌ (persistence์ชฝ์—์„œ ๋™์ ์ฟผ๋ฆฌ ๊ตฌํ˜„)
    • ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์•ˆ์— ์ฒดํฌ ๋กœ์ง์ด ๊ฐ™์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Œ
  • CommandService

    • ์ €์žฅ ํ˜น์€ ์‚ญ์ œ ๋ฉ”์„œ๋“œ
    • ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์•ˆ์— ์กฐํšŒ, ์ฒดํฌ ๋กœ์ง์ด ๊ฐ™์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Œ
  • delegate ํŒจํ„ด์„ ํ™œ์šฉํ•˜์—ฌ, ๊ฐ service ํด๋ž˜์Šค ์ •์˜๋ฅผ ๋ถ„๋ฆฌํ–ˆ๋‹ค. [ ์ฐธ๊ณ  : Service ๊ตฌ์กฐ ]

4. port

  • persistence๋‚˜ infrastructure ๊ณ„์ธต๊ณผ ์†Œํ†ตํ•˜๊ธฐ ์œ„ํ•œ interface (spi)

persistence / infrastructure module

5. Adapter

  • persistenceAdapter : JPA, QueryDSL์„ ํ†ตํ•œ ์ฟผ๋ฆฌ ๊ตฌํ˜„
  • ๋˜๋Š” ๊ธฐํƒ€ ๊ธฐ์ˆ ์ด๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜์กดํ•˜๋Š” ์„ธ๋ถ€ ๊ตฌํ˜„ ๋‚ด์šฉ

About

This is Dormitory Management System Backend Repository

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 14

Languages