๐ ์ ๊ท ์๋น์ค ์ฑ ๊ตฌ์กฐ, ์ด๋ป๊ฒ ์ค๊ณํ ๊น์?
ํ์ฌ ์ฌ์ง ์ค์ธ ํ์ฌ์ ์ฌ๋ด ์ ๊ท ์๋น์ค๋ฅผ ํ์ด๋ธ๋ฆฌ๋ ์ฑ ํํ๋ก ๊ฐ๋ฐํ๊ธฐ๋ก ๊ฒฐ์ ๋ ์ดํ
ํ๋ก ํธ์๋ํ์ ์ฒซ ๋ฒ์งธ ๊ณผ์ ๋ ํฐ ๊ท๋ชจ์ ๋น์ฆ๋์ค๋ฅผ ์ด๋ป๊ฒ ๊ตฌ์กฐํํ ๊ฒ์ธ์ง์์ต๋๋ค.
Vue
ํ๋ก์ ํธ๋ฅผ ๊ตฌ์กฐํํ๋ ์ฌ๋ฌ ๊ฐ์ง ์ ์๋ค์ด ์ปค๋ฎค๋ํฐ์ ๋ง์ด ์กด์ฌํ์ง๋ง
๊ทธ์ค ๋๋ถ๋ถ์ ๊ท๋ชจ๊ฐ ํฌ์ง ์์ ์ฑ์ ์ ํฉํ ํํ์๊ณ ๋ฌด์๋ณด๋ค ์ ํฌ๋ ์ธ์ฃผ ๊ฐ๋ฐ์๋ถ๋ค๋
ํจ๊ป ์์ ์ ํด์ผ ํ๋ ์ํฉ์ด์๊ธฐ ๋๋ฌธ์ ๋ณด๋ค ๋ช ํํ ๊ตฌ์กฐ๊ฐ ํ์ํ์ต๋๋ค.
์ด๋ฒ ํฌ์คํธ์์๋ ์ด๋ค ์ด์ ๋ก DDD
๋ฅผ ํ๋ก์ ํธ์ ์ ์ฉํ๊ฒ ๋์๊ณ
์ด๋ฅผ ํตํด ์ป๊ฒ ๋ ์ด์ ์ด ๋ฌด์์ด์๋์ง ์์ฃผ๋ก ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
๐ก ์ฃผ์!
์ฌ๊ธฐ์๋ DDD์ ๋ํ ์์ธํ ์ด๋ก ์ ์ธ ๋ด์ฉ์ ํฌํจํ์ง ์์ต๋๋ค.
DDD์ ๊ฐ๋ ์ ์ด์ฉํด์ FE ํ๋ก์ ํธ ๊ตฌ์กฐ ์ค๊ณ์ ์ด๋ค ์์ผ๋ก ์ ์ฉํ๋์ง ์์ฃผ๋ก ๋ค๋ฃจ๊ณ ์์ต๋๋ค.
๐ ๋๋ฉ์ธ ๊ธฐ๋ฐ ์ค๊ณ(DDD)๋?
DDD (Domain Driven Design)?
DDD
๋ ํฐ ๊ท๋ชจ์ ๋น์ฆ๋์ค๋ฅผ ๊ฐ domain
๋ณ๋ก ๋๋์ด ์ค๊ณํ๋ ๋ฐฉ๋ฒ๋ก ์
๋๋ค.
์๋ฅผ ๋ค์ด e-commerce
์๋น์ค์ ๊ฒฝ์ฐ์๋ ๋ค์๊ณผ ๊ฐ์ด ๋น์ฆ๋์ค๋ฅผ ๋๋ ์ ์์ต๋๋ค.
๊ฒฐ์
, ์ฃผ๋ฌธ
, ๋ฐฐ์ก
, ๊ณ ๊ฐ ๊ด๋ฆฌ
, ์ธ์ฆ
๋ฑ๊ณผ ๊ฐ์ด ๋น์ฆ๋์ค๋ฅผ ๋ถ๋ฆฌํด์ ์๊ฐํ ์ ์์ต๋๋ค.
์ด์ฒ๋ผ DDD
๋ ํฐ ๊ท๋ชจ์ ์๋น์ค๋ฅผ ์์ ๋น์ฆ๋์ค ๋จ์๋ก ์ชผ๊ฐ์ด
๊ฐ ๋๋ฉ์ธ ๊ฐ์ ์์ง๋๋ฅผ ๋์ด๊ณ ์๋ก ๋ค๋ฅธ ๋๋ฉ์ธ๋ผ๋ฆฌ๋ ๋์จํ ์์กด๋๋ฅผ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.
๐ ์ ๋๋ฉ์ธ ๊ธฐ๋ฐ์ผ๋ก ์ค๊ณํ๋์?
1๏ธโฃ ๋น์ฆ๋์ค ์๊ตฌ์ฌํญ์ ๋ง์ถฐ ๋ชจ๋ธ๋ง ํ๊ธฐ ์ฉ์ดํ๋ค
์ ํฌ ํ์ด DDD
๋ฅผ ์ ํํ ๊ฐ์ฅ ์ฒซ ๋ฒ์งธ ์ด์ ์
๋๋ค.
ํ์ฌ ์ด์ ์ค์ธ ์ฑ์ ์๋ง์ ํฌ๊ณ ์์ ๋น์ฆ๋์ค๋ค๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ
๊ธ์ต์ ํน์ฑ์ ํ์ ๊ณผ์ ์ปค๋ฎค๋์ผ์ด์ ์ด ๋ฌด์๋ณด๋ค ์ค์ํ ํ๊ฒฝ์ด์์ต๋๋ค.
์๋ฌด๋๋ ๊ฐ๋ฐ์๋ค์ ํ์ ๋ณด๋ค ๋น์ฆ๋์ค์ ์ดํด๋๊ฐ ๋ฎ์ ์๋ฐ์ ์๊ธฐ ๋๋ฌธ์
๊ฐ๋ฐ์ ์์๋ก ๋น์ฆ๋์ค๋ฅผ ์ชผ๊ฐ์ ๊ด๋ฆฌํ๊ฒ ๋๋ฉด ์ถํ ์ ์ง๋ณด์์์ ๊ด๋ฆฌ ํฌ์ธํธ๊ฐ
์ฆ๊ฐํ๊ฒ ๋๋ ์ผ์ด ๋ฐ์ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐ๋์์ต๋๋ค.
2๏ธโฃ ์ ์ง๋ณด์์ ์ฉ์ดํ๋ค
DDD
๋ ๊ฐ ๋๋ฉ์ธ๋ณ๋ก ๋์จํ ์์กด๋์ ๋๋ฉ์ธ ๋ด์์๋ ๋์ ์์ง๋๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์
์๋ก์ด ๋น์ฆ๋์ค๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ๋๋ฐ ์์ํ๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
์ ํฌ ํ์ฌ์ ๊ฒฝ์ฐ ๊ธฐ์กด ์ฑ 1.0
์์ ์ด์ํ๋ ๋น์ฆ๋์ค์ ๋ง์ด๋ฐ์ดํฐ
์ ๊ท ์๋น์ค๋ฅผ
๋ณ๋์ ๋น์ฆ๋์ค ๋๋ฉ์ธ์ผ๋ก ๋ถ๋ฆฌํด์ ๊ฐ๋ฐํ๊ณ ์์ต๋๋ค.
๋ ๊ฐ์ ํฐ ๋น์ฆ๋์ค ๋ด์์๋ ๋ค์ ๋์ถ, ์๋์ฐจ, ๋ง์ด๋ฐ์ดํฐ ์ฐ๋, ๊ด๋ฆฌ
๋ฑ
์ฌ๋ฌ ๊ฐ์ง ์๋ธ ๋๋ฉ์ธ์ผ๋ก ๋ถ๋ฆฌํด์ ๊ฐ๋ฐํ๊ณ ์์ต๋๋ค.
3๏ธโฃ ๋๋ฉ์ธ ๊ฐ ๊ฒฐํฉ๋๊ฐ ๋ฎ์ ํ์ฅ์ฑ์ด ์ข๋ค
๋๋ฉ์ธ๋ณ๋ก ๊ฒฐํฉ๋๊ฐ ๋ฎ๋ค๋ ๊ฒ์ ๋ง์ ๊ฐ๋ฐ์๋ค์ด ํ๋์ ์๋น์ค๋ฅผ ๊ฐ๋ฐํ ๋
์๋ก์ ๊ฐ๋ฐ ์์ญ์ด ๋ค๋ฅธ ์์ญ์ ์ํฅ์ ์ฃผ๋ ์ ๋๊ฐ ๋ฎ๋ค๋ ๊ฒ์ ์๋ฏธํ๊ธฐ๋ ํฉ๋๋ค.
์ ํฌ๋ ์ธ์ฃผ ๊ฐ๋ฐ์๋ถ๋ค๋ ํจ๊ป ๊ฐ๋ฐํ๊ณ ์๋๋ฐ ์ด๋ถ๋ค๊ณผ ํจ๊ป ์ค์๊ฐ์ผ๋ก ์ปค๋ฎค๋์ผ์ด์ ํ๋ฉฐ
์์ ์ ํ ์ ์๋ ์ ๋ฌด ํ๊ฒฝ ํน์ฑ์ ์ถฉ๋์ ์ต๋ํ ์ค์ด๋ฉฐ ๊ฐ๋ฐํ ์ ์๋ ๋ฐฉ๋ฒ์ด ํ์ํ์ต๋๋ค.
DDD
๋ฅผ ์ด์ฉํ๋ฉด ๊ฐ๋ฐ์๋ค์ ์์ ์ด ๋งก์ ๋๋ฉ์ธ์ ์ฝ๋๊ฐ ํ ์์ญ์ ์ํฅ์ ์ฃผ๋
side effect
๋ฅผ ๊ฑฑ์ ํ์ง ์์๋ ๋๊ธฐ ๋๋ฌธ์ ๋ณด๋ค ํจ์จ์ ์ธ ๊ฐ๋ฐ์ด ๊ฐ๋ฅํ ๊ฒ์ด๋ผ ์๊ฐํ์ต๋๋ค.
๋ํ ์ฐจํ ํน์ ๋น์ฆ๋์ค ๋๋ฉ์ธ์ ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐฐํฌ ๋ฐ ์ด์ํ๋ ์๊ตฌ์ฌํญ์ด ์๊ธธ ์๋ ์์ด
์ด๋ฅผ ๋ณ๋์ ํ๋ก์ ํธ๋ก ๋ถ๋ฆฌํ๋ ๋ฑ์ ํ์ฅ์ฑ๋ ๊ณ ๋ คํด์ผ ํ๋ ์ํฉ์ด์๊ธฐ ๋๋ฌธ์
DDD
์ ๊ฐ ๋๋ฉ์ธ ์ฌ์ด์ ๋ฎ์ ๊ฒฐํฉ๋๋ ํฐ ์ฅ์ ์ผ๋ก ๋ค๊ฐ์์ต๋๋ค.
๐ ๋๋ฉ์ธ ๊ธฐ๋ฐ ์ค๊ณ๋ฅผ ์ ์ฉํ ํ๋ก์ ํธ ๊ตฌ์กฐ ์์
๋ค์์ ์ ํฌ๊ฐ DDD
๋ฅผ ์ ์ฉํด์ ์ค๊ณํ ํ๋ก์ ํธ ๊ตฌ์กฐ์ ์์์
๋๋ค.
๋น์ฆ๋์ค๋ฅผ home, auto, menu, mydata
๋ผ๋ ํฐ ๋๋ฉ์ธ์ผ๋ก ๋๋๊ณ
๊ฐ๊ฐ์ ๋๋ฉ์ธ์ ์๋ธ ๋๋ฉ์ธ์ section
์ผ๋ก ๊ตฌ๋ถํ์ต๋๋ค.
app
์์๋ ํน์ ๋๋ฉ์ธ์ ์ํด์์ง ์์ ์ ์ญ ๋น์ฆ๋์ค๋ค์ ๊ด๋ฆฌํ๋ฉฐ
๊ฐ๊ฐ์ ๋น์ฆ๋์ค ๋๋ฉ์ธ๋ค์ store
์ router
๋ฅผ import
ํด์
์ต์์ App
์๊ฒ ์ ๋ฌํด์ฃผ๋ ์ญํ ์ ํฉ๋๋ค.
src
ใด public
ใด assets
ใด app
| ใด store
| ใด api
| ใด util
| ใด router
|
ใด domain
| ใด home
| ใด auto
| ใด menu
| ใด mydata
| ใด Index.vue
| ใด api
| ใด mydata-management
| ใด mydata-auto
| ใด section
| | ใด mydata-management
| | ใด mydata-auto
| | ใด Index.vue
| |
| ใด shared
| ใด store
| ใด util
| ใด router
|
ใด App.vue
ใด main.ts
๐ ์ฃผ์์ฌํญ
1๏ธโฃ ์ ๋น์ฟผํฐ์ค ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ค.
์ ๋น์ฟผํฐ์ค ์ธ์ด
๋ ํ์
๊ณผ ๋์ผํ ์ฉ์ด๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ๋งํฉ๋๋ค.
๊ฐ๋ฐ์๋ง ์ดํดํ ์ ์๋ ์ฉ์ด๋ค์ ์ฌ์ฉํ๋ค๋ฉด ํ์ ๋ถ๋ค ํน์ ๋๋ฉ์ธ ์ง์์ด ๋ถ์กฑํ ๊ฐ๋ฐ์๋ถ๋ค์ด
์ ๊ท๋ก ํฌ์ ๋์์ ๋ ๋น์ฆ๋์ค ์ดํด์ ์ด๋ ค์์ ๊ฒช์ ์๋ ์์ต๋๋ค.
2๏ธโฃ ์ ์ฉํ๊ธฐ์ ์ ์ถฉ๋ถํ ๊ณ ๋ฏผ์ด ํ์ํ๋ค.
๋๋ฉ์ธ ๊ธฐ๋ฐ์ค๊ณ๋ฐฉ์์ด ๋ฌด์กฐ๊ฑด ๋ง๋ฅ์ ์๋๋๋ค.
๊ฐ ํ๋ก์ ํธ ์ฑ๊ฒฉ์ ๋ง๋ ๊ตฌ์กฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ต์ง๋ก ์ ์ฉ์ํค๋ ๊ฒ์ ๋ ์ด ๋ ์๋ ์์ต๋๋ค.
๐ ์ฐธ๊ณ ์๋ฃ
Learn How Domain-Driven Design Can Benefit Your Nuxt.js Applications
'๐จโ๐ป web.dev > log' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
TDD ์ ํจ๊ป ์ฌ๋ด ์๋น์ค ๊ฐ์ ํ๊ธฐ (1) | 2023.05.15 |
---|---|
์ index ๋ 0๋ถํฐ ์์ํ ๊น? (0) | 2023.03.12 |
Mixin์ ์ฌ์ฉํด๋ณด๋ฉฐ ๋๋์ ๋ค (0) | 2022.07.02 |
๐ฌ ๋๊ธ