elice/WIL
[week_07] 3๊ณ์ธต ์ค๊ณ (3-Layer architecture)
๊ฑด๋ง๋
2022. 2. 26. 19:14
1. 3๊ณ์ธต ๊ตฌ์กฐ๋
- ๋ฐฑ์๋ ์ฝ๋๋ฅผ ์๋์ ๊ฐ์ 3๊ฐ ๊ตฌ์กฐ๋ก ๋๋์ด ๊ตฌํํ๋ ๊ฒ
1-1. Controler layer (์ปจํธ๋กค๋ฌ)
- ์ฌ์ฉ์์ ์์ฒญ(request)์ ๋ถ์ํ ํ, ์๋ง์ ์๋น์ค๋ก ํด๋น ์์ฒญ์ ์ ๋ฌํด ์ค ๋ค์, ์๋น์ค์ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ์๋ต (response)ํ๋ ์ธต
- ๋ผ์ฐํ (Routing)์ด ์ด๋ฃจ์ด์ง๋ ์ธต
- express์ ๊ฒฝ์ฐ, req.params(), req.body(), res.status(), res.send() ์ ๊ฐ์ ์ฝ๋ ์์ฑ
1-2. Service layer (์๋น์ค)
- ์ปจํธ๋กค๋ฌ๋ก๋ถํฐ ์ ๋ฌ๋ ์์ฒญ์ ๋ก์ง์ ์ ์ฉํ๋ ์ธต
- ์) ๋ก๊ทธ์ธ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ํด๋น ID์ ์ฌ์ฉ์๊ฐ DB์ ์กด์ฌํ๋์ง์ ์ฌ๋ถ๋ฅผ ํ๋จํ๊ณ , ๊ทธ ํ ๋น๋ฐ๋ฒํธ์ ์ผ์น์ฌ๋ถ๋ฅผ ํ๋จํด์ ๋ก๊ทธ์ธ ์ฑ๊ณต/์คํจ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ๋ฑ์ ๋ก์ง
- if-else ๋ฑ์ ์ฝ๋๋ก ๊ตฌํ ๊ฐ๋ฅ
1-3. Model layer (๋ฐ์ดํฐ)
- ์๋น์ค ์ธต์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ์ด ํ์ํ ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ, ์ด ๋ ๋ฐ์ดํฐ ๊ด๋ จ ์ฝ๋๊ฐ ์์ฑ๋๋ ์ธต
- Mongoose์ ๊ฒฝ์ฐ Model.find({}) ์ ๊ฐ์ ์ฝ๋ ์์ฑ
- ์์ ์์์์, 1๏ธโฃ์์ฒญ์ผ๋ก ์จ ID๊ฐ DB์ ์กด์ฌํ๋์ง, 2๏ธโฃ๋ง์ฝ ์กด์ฌํ๋ค๋ฉด ๊ทธ ๋ DB์์ ์ ์ฅ๋ ๋น๋ฐ๋ฒํธ๊ฐ ์์ฒญ์ผ๋ก ๋ค์ด์จ ๋น๋ฐ๋ฒํธ์ ์ผ์นํ๋์ง ํ์ธํด์ผ ํ๋ค.
- ๐ ์ด ๋ ์๋น์ค ์ธต์ ๋ฐ์ดํฐ ์ธต์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ธ ์์ฒญ์ ํ๊ฒ ๋๋ค.
โจ ํ ์ค ์ ๋ฆฌ
Controller ์์ ์ฌ์ฉ์๋ก๋ถํฐ ์์ฒญ์ ๋ฐ๊ณ , ์์ฒญ์ ๋ํด Service ์ธต์์ ๋ก์ง์ ๊ตฌํํ๊ณ , ํ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค (Model layer)์ ์ ๊ทผํ ํ, ๊ฒฐ๊ณผ๋ฅผ Controller๊ฐ ์๋ตํ๋ค.
2. 3๊ณ์ธต ๊ตฌ์กฐ์ ์ฅ์
- ๊ฐ ์ญํ ๋ณ๋ก ๊ฐ๋ฐ ์ ๋ฌด๋ฅผ ๋ถ๋ดํ ์ ์์ผ๋ฏ๋ก ๋ถ์ ์ด ์ฉ์ดํด์ง๋ค.
- MVP ๋ณ๋ก ๊ฐ๋ฐ ์ ๋ฌด๋ฅผ ๋ถ๋ดํ๋ ๊ฒฝ์ฐ์๋, ๊ฐ MVP๊ฐ ์ด๋ค ํ๋ฆ์ผ๋ก ๊ตฌํ๋๋์ง ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ๋ณด๊ณ ์ดํดํ๊ธฐ ์ฌ์์ง๋ค.
- ํ์ํ ์ฝ๋๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ์์ ์์ด ์ ์ง๋ณด์๊ฐ ์ฉ์ดํด์ง๋ค.
- ์น ์๋น์ค์ ๊ตฌํ ๋ฐฉ์์ ๋ณ๊ฒฝํ๊ณ ์ ํ ๋, ํด๋น ํด๋์ ์ฝ๋๋ง ๋ณ๊ฒฝํ๋ฉด ๋๋ฏ๋ก ์ ์ง๋ณด์๊ฐ ์ฉ์ดํด์ง๋ค.
- ์ฝ๋๊ฐ ๊ธฐ๋ฅ๋ณ๋ก ๊ตฌ๋ถ๋์ด ์์ผ๋ฏ๋ก, ๊ธฐ๋ฅ๋ณ๋ก ํ ์คํธ(์ ๋ ํ ์คํธ)๋ฅผ ์งํํ๊ธฐ ์ฉ์ดํด์ง๋ค.
3. 3๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ ๋์ ํด๋ ๊ตฌ์กฐ
middleware, test ํด๋๋ฅผ ์ ์ธํ๋ฉด ํฌ๊ฒ routers(=controllers), services, db ํด๋๋ก ๊ตฌ๋ถํ ์ ์๋ค.
src
โ app.js # App entry point
โโโโapi # Express route controllers for all the endpoints of the app
โโโโconfig # Environment variables and configuration related stuff
โโโโjobs # Jobs definitions for agenda.js
โโโโloaders # Split the startup process into modules
โโโโmodels # Database models
โโโโservices # All the business logic is here
โโโโsubscribers # Event handlers for async task
โโโโtypes # Type declaration files (d.ts) for Typescript