๐Ÿ”ฅTIL #6. ๋ชจ๋“ˆํ™”์™€ MVC ํŒจํ„ด #1

๋ฐฑ์Šน์ง„ยท2021๋…„ 1์›” 1์ผ
2

NodeJS

๋ชฉ๋ก ๋ณด๊ธฐ
6/7

๐ŸŒŸ Today I learned

  1. MVC ํŒจํ„ด์ด๋ž€
  2. node์—์„œ MVC ํŒจํ„ด ์ ์šฉํ•˜๊ธฐ

1. MVC ํŒจํ„ด์ด๋ž€

๋ชจ๋ธ-๋ทฐ-์ปจํŠธ๋กค๋Ÿฌ(Modelโ€“Viewโ€“Controller, MVC) ํŒจํ„ด์€ software ๊ณตํ•™์—์„œ ์‚ฌ์šฉ๋˜๋Š” Design pattern ์ค‘ ํ•˜๋‚˜๋กœ user interface๋กœ๋ถ€ํ„ฐ business logic ์„ ๋ถ„๋ฆฌ, ์„œ๋กœ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ  ๊ฐœ๋ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” pattern ์ด๋‹ค.

์œ„ ๊ทธ๋ฆผ์—์„œ ๋ณด๋‹ค์‹œํ”ผ FrontEnd ์ธก์—์„œ View์— ๋Œ€ํ•œ ๊ฐœ๋ฐœ์„ ๋‹ด๋‹นํ•˜๊ณ  BackEnd๋Š” request์— ๋Œ€ํ•ด Database๋ฅผ ์ ‘๊ทผ, CRUD ์ฒ˜๋ฆฌ ๋ฐ response๋ฅผ ๋‹ด๋‹นํ•œ๋‹ค.
Controller๋Š” View์™€์˜ request, response์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•˜๊ณ  Database๋ฅผ ๋‹ค๋ฃจ๋Š” ์ผ์€ Model์ด ์ „๋‹ดํ•œ๋‹ค. ์ฆ‰ ์„œ๋น„์Šค์˜ business logic์€ model ์˜์—ญ์—์„œ ๋‹ค๋ฃฌ๋‹ค.

2. node์—์„œ MVC ํŒจํ„ด ์ ์šฉํ•˜๊ธฐ

MVC ํŒจํ„ด์€ ๊ฒฐ๊ตญ ๊ฐœ๋ฐœ์˜์—ญ์„ ๋ถ„๋ฆฌ(๋ชจ๋“ˆํ™”, layer)ํ•˜์—ฌ ์„œ๋กœ ์˜ํ–ฅ์„ ์ฃผ์ง€์•Š๊ณ  ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ด๋‹ค. ์ด๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์žฅ์ ์ด ์žˆ๋‹ค.

  1. ์—ผ๋ ค์˜ ๋ถ„๋ฆฌ
    ๊ฐ๊ฐ์˜ layer๊ฐ€ ํ•˜๋Š” ์—ญํ• ์ด ๋ช…ํ™•ํ•˜๋ฏ€๋กœ ๋ฌธ์ œ ๋ฐœ์ƒ์‹œ ์š”์ธ ์ง€์ ์„ ๋น ๋ฅด๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  2. ๋™์‹œ์ ์ธ ๊ฐœ๋ฐœ
    ์ •ํ•ด์ง„ protocol๋งŒ ์žˆ์œผ๋ฉด ๊ฐ layer๋Š” ๋…์ž์ ์œผ๋กœ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  3. ์ˆ˜์ •์˜ ์šฉ์ดํ•จ
    ํ•˜๋‚˜์˜ layer๊ฐ€ ์ˆ˜์ •๋˜์–ด์•ผ ํ•  ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•ด๋„ ๋‹ค๋ฅธ layer์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.
  4. ํ…Œ์ŠคํŠธ-์ฃผ๋„ ๊ฐœ๋ฐœ
    layer๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด์žˆ์œผ๋ฏ€๋กœ ๊ฐ layer๋ณ„ ํ…Œ์ŠคํŠธ๊ฐ€ ์šฉ์ดํ•˜๋‹ค.

์ด๋ฅผ node๋กœ web service ๊ตฌํ˜„์— ์žˆ์–ด ๋ชจ๋“ˆํ™”์— ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

Router, Controller, Service, Model์€ ๊ฐ๊ฐ layer์ด๋ฉฐ ํ•˜๋‚˜์˜ ํด๋”์ด์ž ์—ญํ• ์ด๋‹ค.
๋ชจ๋“ˆํ™”๋ฅผ ํ•˜๋Š”๋ฐ ์žˆ๋Š” ์ค‘์š”ํ•œ point๋Š” ์—ญํ• ์„ ๋ช…ํ™•ํžˆ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด๋ฉฐ ์ด๋Š” layer ๊ฐ„์˜ ์˜์กด์„ฑ๋„ ํฌํ•จ๋œ๋‹ค. ๊ฐ layer ๊ฐ„ ์˜์กด์„ฑ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

Router -> Controller -> Service -> model

Router๋Š” Controller๋งŒ ์˜์กดํ•œ๋‹ค. Service ์— ๋Œ€ํ•ด์„  ๋ชจ๋ฅธ๋‹ค.
Controllersms Service๋งŒ ์˜์กดํ•˜๋ฉฐ Model ์— ๋Œ€ํ•ด์„  ๋ชจ๋ฅธ๋‹ค.
Service๋Š” Model๋งŒ ์˜์กดํ•œ๋‹ค.

๋ชจ๋“ˆํ™”๋ฅผ ํ†ตํ•ด ์šฐ๋ฆฌ๊ฐ€ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ด์ ์˜ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด์ž๋ฉด ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” Database๋ฅผ mysql ๋Œ€์‹  NoSQL๋กœ ๋ฐ”๊ฟ”์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ(Model์ด ๋ณ€๊ฒฝ)๋กœ ์ด ๋•Œ๋Š” Service layer๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋œ๋‹ค.
Router์™€ Controller๋Š” Model์„ ์˜์กดํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ณ€๊ฒฝ ๋  ์ผ์ด ์—†๋‹ค.

์ผ๋ฐ˜์ ์ธ node project layer๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  1. server.js
    main ๋กœ์ง์œผ๋กœ Express app ๊ธฐ๋ฐ˜ server์˜ ์‹คํ–‰ ๋ฐ ์ข…๋ฃŒ์‹œ ์ฒ˜๋ฆฌ ๋‹ด๋‹น
  2. app.js
    Express app์„ ๋งŒ๋“ค๊ณ  ํ•„์š”ํ•œ middleware๋ฅผ ๋ถ™์ด๋Š” ๋กœ์ง ๋‹ด๋‹น
  3. Router
    endpoint๋ฅผ ๋‚˜๋ˆ„๋Š” ๋กœ์ง ๋‹ด๋‹น
  4. Controller
    endpoint์— ํ•ด๋‹นํ•˜๋Š” ์ฒ˜๋ฆฌ ๋กœ์ง ๋‹ด๋‹น(request์— ๋Œ€ํ•œ error handling ๋ฐ response)
  5. Service
    controller๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ์ธ์ž ๊ธฐ๋ฐ˜ data ๊ฐ€๊ณต ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋‹ด๋‹น
  6. Model(= prisma, mongoose)
    ์ด๋Š” Database์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋ธ ์ •์˜ ๋‹ด๋‹น.

์œ„์—์„œ ๋ฐ‘์œผ๋กœ ๊ฐˆ ์ˆ˜๋ก Database์— ๊ฐ€๊นŒ์›Œ์ง€๋Š” ๊ตฌ์กฐ์ด๋ฉฐ ๊ฐ layer๋Š” ๋ฐ”๋กœ ๋ฐ‘์˜ layer๋งŒ ์˜์กดํ•œ๋‹ค.
๊ทธ ์™ธ์— ๋ชจ๋“ˆ๋“ค์ด ๊ณต์šฉ์œผ๋กœ ์‚ฌ์šฉํ•  ๋ชจ๋“ˆ(err(์˜ˆ์™ธ์ฒ˜๋ฆฌ), middlewares, utils)์ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋Š” project ์ตœ์ƒ์œ„์—์„œ ๊ด€๋ฆฌ.

profile
12๋…„ .NET ๊ฐœ๋ฐœ ๊ฒฝ๋ ฅ์„ ๊ฐ€์ง„ ์›น ์ดˆ์งœ ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค :)

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