3-layered-architecture

yyยท2023๋…„ 12์›” 30์ผ
0

์žก๋™์‚ฐ์ด

๋ชฉ๋ก ๋ณด๊ธฐ
10/21

3-layered-architecture
ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๊ณ„์ธต(Presentation Layer) = Controller /

๐Ÿ“Œ 3-Layered Architecture์˜ ํ”Œ๋กœ์šฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋กœ์ง์ด ์ˆ˜ํ–‰

1. ํด๋ผ์ด์–ธํŠธ(Client)๊ฐ€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์š”์ฒญ(Request)์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
2. ์š”์ฒญ(Request)์„ URL์— ์•Œ๋งž์€ ์ปจํŠธ๋กค๋Ÿฌ(Controller)๊ฐ€ ์ˆ˜์‹  ๋ฐ›์Šต๋‹ˆ๋‹ค.
3. ์ปจํŠธ๋กค๋Ÿฌ(Controller)๋Š” ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋น„์Šค(Service)๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
4. ์„œ๋น„์Šค(Service)๋Š” ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด ์ €์žฅ์†Œ(Repository)์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.
5. ์„œ๋น„์Šค(Service)๋Š” ์ €์žฅ์†Œ(Repository)์—์„œ ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณตํ•˜์—ฌ ์ปจํŠธ๋กค๋Ÿฌ(Controller)์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
6. ์ปจํŠธ๋กค๋Ÿฌ(Controller)๋Š” ์„œ๋น„์Šค(Service)์˜ ๊ฒฐ๊ณผ๋ฌผ(Response)์„ ํด๋ผ์ด์–ธํŠธ(Client)์—๊ฒŒ ์ „๋‹ฌํ•ด์ค๋‹ˆ๋‹ค.





Controller

1) ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ(Request)๋ฐ›๊ธฐ.
2) ์š”์ฒญ ์ฒ˜๋ฆฌ : ์„œ๋น„์Šค์—๊ฒŒ ์œ„์ž„.
3) ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‘๋‹ต(Response)์„ ๋ฐ˜ํ™˜.

ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๊ณ„์ธต(Presentation Layer)์€ 3๊ณ„์ธต ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์—์„œ ๊ฐ€์žฅ ๋จผ์ € ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ(Request)์„ ๋งŒ๋‚˜๊ฒŒ ๋˜๋Š” ๊ณ„์ธต.
๋Œ€ํ‘œ์ ์œผ๋กœ ์ปจํŠธ๋กค๋Ÿฌ(Controller)๊ฐ€ ์ด ์—ญํ• ์„ ๋‹ด๋‹น

  • ํ•˜์œ„ ๊ณ„์ธต(์„œ๋น„์Šค ๊ณ„์ธต, ์ €์žฅ์†Œ ๊ณ„์ธต)์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ(Exception)๋ฅผ ์ฒ˜๋ฆฌ ํ•ฉ๋‹ˆ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ „๋‹ฌํ•œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์œ ํšจ์„ฑ์„ ๊ฒ€์ฆํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    โ†’ ์ด์ „์— Joi ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๊ฐ€ ๊ธฐ์–ต๋‚˜์‹œ์ฃ ? ๐Ÿ˜‰
  • ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ ํ›„ ์„œ๋ฒ„์—์„œ ์ฒ˜๋ฆฌ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜(Response)ํ•ฉ๋‹ˆ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ(Request)์„ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค.
  • ์š”์ฒญ(Request)์— ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ ๋ฐ ๋‚ด์šฉ์„ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.
  • ์„œ๋ฒ„์—์„œ ์ˆ˜ํ–‰๋œ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐ˜ํ™˜(Response)ํ•ฉ๋‹ˆ๋‹ค.

Service : ๋ชจ๋“  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์บก์Šํ™”, ์ถ”์ƒํ™”

1) ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง
2) Repository๋ฅผ ํ™œ์šฉํ•˜์—ฌ DB์™€ ์ƒํ˜ธ ์ž‘์šฉ
3) Controller ์— ์ „๋‹ฌํ•  ๋ฐ์ดํ„ฐ ์‘๋‹ต

  • ์‚ฌ์šฉ์ž์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์‹ค์„ธ ์ค‘์— ์‹ค์„ธ!!!
  • ํ˜„์—…์—์„œ๋Š” ์„œ๋น„์Šค ์ฝ”๋“œ๊ฐ€ ๊ณ„์† ํ™•์žฅ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ.
  • DB ์ •๋ณด๊ฐ€ ํ•„์š”ํ•  ๋•Œ๋Š” Repository์—๊ฒŒ ์š”์ฒญ.



Repository

1) ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ (์—ฐ๊ฒฐ, ํ•ด์ œ, ์ž์› ๊ด€๋ฆฌ) ์—ญํ• ์„ ๋‹ด๋‹น.
2) ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ CRUD ์ž‘์—…์„ ์ฒ˜๋ฆฌ.

layered architecture ํด๋” ๊ตฌ์กฐ

โ”œโ”€โ”€ package.json
โ”œโ”€โ”€ prisma
โ”‚   โ””โ”€โ”€ schema.prisma
โ”œโ”€โ”€ src
โ”‚   โ”œโ”€โ”€ app.js
โ”‚   โ”œโ”€โ”€ controllers
โ”‚   โ”‚   โ””โ”€โ”€ posts.controller.js
โ”‚   โ”œโ”€โ”€ middlewares
โ”‚   โ”‚   โ”œโ”€โ”€ error-handling.middleware.js
โ”‚   โ”‚   โ””โ”€โ”€ log.middleware.js
โ”‚   โ”œโ”€โ”€ repositories
โ”‚   โ”‚   โ””โ”€โ”€ posts.repository.js
โ”‚   โ”œโ”€โ”€ routes
โ”‚   โ”‚   โ”œโ”€โ”€ index.js
โ”‚   โ”‚   โ””โ”€โ”€ posts.router.js
โ”‚   โ”œโ”€โ”€ services
โ”‚   โ”‚   โ””โ”€โ”€ posts.service.js
โ”‚   โ””โ”€โ”€ utils
โ”‚       โ””โ”€โ”€ prisma
โ”‚           โ””โ”€โ”€ index.js
โ””โ”€โ”€ yarn.lock
profile
์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ๋ฟ ๋‚ด๊ฐ€ ๋ชปํ•  ๊ฑด ์—†๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€