์ญํ ๊ธฐ๋ฐ ๊ตฌ์กฐ์์ ๋ฐ์ํ ์ฝ๋ ํ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด
Feature ๋จ์ ๊ตฌ์กฐ(FSD ์ผ๋ถ)๋ฅผ ๋์ ํ ๊ฒฝํ์ ์ ๋ฆฌํ ๊ธ์ ๋๋ค.
๐ฆ ๊ธฐ์กด ํ๋ก์ ํธ ๊ตฌ์กฐ
์ด์ ํ๋ก์ ํธ์์๋ ์ญํ ๊ธฐ๋ฐ(hooks, utils, components)์ผ๋ก
ํด๋๋ฅผ ๋ถ๋ฆฌํ๋ ๊ตฌ์กฐ๋ก ์งํํ์๋ค.
๐ฆsrc
โฃ ๐components
โฃ ๐hooks
โฃ ๐utils
โฃ ๐types
โฃ ๐lib
...
์ด์ ๊น์ง๋ ๊ธฐ์ด, ์ค๊ธ ํ๋ก์ ํธ์๊ธฐ์ ํ์ผ ์๋ ๋ง์ง ์์๊ณ ,
์ญํ ๊ธฐ๋ฐ์ผ๋ก ๋๋๋ ๋ฐฉ์์ด ์ง๊ด์ ์ด๊ณ ์ต์ํด์ ํ์ ๋ชจ๋ ์ฌ์ฉํ๊ณ ์์๋ค.
๐ค ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ ๋๋ ์
๊ฐ์ธ ํ๋ก์ ํธ๋ ํ ํ๋ก์ ํธ๋ฅผ ์ฌ๋ฌ๋ฒ ๊ฒฝํํด๋ณด๋ฉด์
์ญํ ๊ธฐ๋ฐ ๊ตฌ์กฐ์ ๋ถํธํจ์ ๋๋ผ๊ธฐ ์์ํ๋ค.
ํ๋์ ๊ธฐ๋ฅ์ ์์ ํ๋ ค๊ณ ํ ๋
UI๋ components ํด๋์์ ์ํ์ ๋ก์ง์ hooks, ํ์
์ types ํด๋์์ ์์ ํด์ผ ํ๊ณ
๊ด๋ จ ์ฝ๋๊ฐ ์ฌ๋ฌ ํด๋์ ํฉ์ด์ ธ ์์ด์ ํ๋์ ๊ธฐ๋ฅ์ ์ดํดํ๊ธฐ ์ํด ์ฌ๋ฌ ์์น๋ฅผ ๊ณ์ ํ์ํด์ผ ํ๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ์ฝ๋ ํ๋ฆ ํ์
์ด ์ด๋ ค์์ง๊ณ
์์ ์ ์ํฅ ๋ฒ์๋ฅผ ํ ๋ฒ์ ํ์
ํ๊ธฐ ํ๋ค์ด์
๋ฆฌํฉํ ๋ง์ ํ ๋ ์ฝ๋๋ฅผ ํ์ธํ๋๋ฐ ๋ง์ ์๊ฐ์ด ๊ฑธ๋ ธ๋ค.
๐ ๋ถํธํ ํด๋ ๊ตฌ์กฐ ํ์ถํ๊ธฐ
๊ทธ๋์ ์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ์งํํ ๋๋
์ญํ ๊ธฐ๋ฐ์ด ์๋ ๊ธฐ๋ฅ ๋จ์๋ก ์ฝ๋๋ฅผ ๋ฌถ๋ ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ฏผํ๊ฒ ๋์๊ณ
๊ทธ ๊ณผ์ ์์ FSD(Feature-Sliced Design)๋ฅผ ์ฐธ๊ณ ํ๊ฒ ๋์๋ค.

๋ค๋ง ์ด๋ฒ ํ๋ก์ ํธ๋ ์ฝ 5์ฃผ๊ฐ ์งํ๋๋ ๋จ๊ธฐ ํ๋ก์ ํธ์๊ธฐ ๋๋ฌธ์
FSD๋ฅผ ์ ์ฒด์ ์ผ๋ก ๋์
ํ๊ธฐ์๋ ๊ตฌ์กฐ๊ฐ ๋ค์ ๋ฌด๊ฒ๊ณ
ํ์ ๋ชจ๋๊ฐ ์ดํดํด์ ์ ์ฉํ๊ธฐ์๋ ์๊ฐ์ด ์ด๋ฐํ๋ค๊ณ ํ๋จํ๋ค.
๊ทธ๋์ FSD ๊ฐ๋
์์ ์ฐ๋ฆฌ ํ๋ก์ ํธ์ ๋์
ํ๋ฉด ์ข์ ๋ถ๋ถ๋ง ๋ฝ์์
์ ํ์ ์ผ๋ก ํ๋ก์ ํธ์ ์ ์ฉํ๋ค.
๐ก ํ๋ก์ ํธ์ ์ ์ฉํ๊ธฐ
1. pages ๋ ์ด์ด → app ๋๋ ํ ๋ฆฌ
๐ฆsrc
โฃ ๐app
โ โฃ ๐(protected)
โ โฃ ๐(public)
...
Next.js์ App Router๋ฅผ ์ฌ์ฉํ๊ณ ์์๊ธฐ ๋๋ฌธ์
FSD์ pages ๋ ์ด์ด๋ ๋ณ๋๋ก ๊ตฌ์ฑํ์ง ์๊ณ app ๋๋ ํ ๋ฆฌ๋ก ๋์ฒดํ๋ค.
2. ๊ตฌ์กฐ ๋จ์ํํ๊ธฐ
๊ตฌ์กฐ๋ shared / features๋ก ๋จ์ํํ๋ค.
๐ฆsrc
โฃ ๐features # ๊ธฐ๋ฅ ๋จ์ ์ฝ๋
โฃ ๐shared # ๊ณตํต์ผ๋ก ์ฌ์ฉํ๋ ์ฝ๋
๋ณต์กํ ๋ ์ด์ด๋ฅผ ๋ชจ๋ ๋์
ํ๊ธฐ๋ณด๋ค๋
ํ์ด ๋น ๋ฅด๊ฒ ์ดํดํ๊ณ ์ ์ฉํ ์ ์๋๋ก ๋จ์ํํ๋ ๋ฐ ์ง์คํ๋ค.
3. shared ๊ธฐ์ค ์ ์
๊ตฌ์กฐ๋ฅผ ๋๋๋ ๊ณผ์ ์์ ๊ฐ์ฅ ๊ณ ๋ฏผ์ด ๋ง์๋ ๋ถ๋ถ์
์ด๋๊น์ง๋ฅผ shared๋ก ๊ด๋ฆฌํ ๊ฒ์ธ๊ฐ์๋ค.
๊ทธ๋์ ๋ ๊ณณ ์ด์์์ ์ฌ์ฉ๋๊ฑฐ๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅ์ฑ์ด ์๋ ๊ฒฝ์ฐ์๋ง
shared๋ก ๋ถ๋ฆฌํ๊ธฐ๋ก ๊ธฐ์ค์ ์ธ์ ๋ค.
๊ธฐ์ค์ ์ ์ฉํ๋ฉด์ ๋ถํ์ํ ์ถ์ํ๋ฅผ ์ค์ผ ์ ์์๊ณ ,
shared ๋ ์ด์ด๊ฐ ๊ณผ๋ํ๊ฒ ์ปค์ง๋ ๊ฒ๋ ๋ฐฉ์งํ ์ ์์๋ค.
4. features ๊ตฌ์กฐ ์ค๊ณ
features ํด๋๋ ํ๋์ ๊ธฐ๋ฅ์ ํ์ํ ๋ชจ๋ ์ฝ๋๋ฅผ
ํ ๊ณณ์ ๋ชจ์ผ๋ ๊ฒ์ ์ค์ ์ผ๋ก ํ๋ค.
๐ฆfeatures
โฃ ๐activity-detail
โ โฃ ๐components
โ โฃ ๐hooks
โ โฃ ๐queries
โ โฃ ๐utils
โ โ ๐constants
โฃ ๐activity-form
โฃ ๐auth
โฃ ๐main
โฃ ๐mypage
โ ๐notification
features๋ ํ์ด์ง ๋จ์๋ก ๊ตฌ์ฑํ๊ณ ,feature ๋ด๋ถ์๋ ๊ด๋ จ ์ฝ๋๋ฅผ ๊ธฐ๋ฅ ๋จ์๋ก ๋๋์๋ค.
๐ ๊ตฌ์กฐ ๊ฐ์ ๊ฒฐ๊ณผ ๋ฐ ํ๊ณ
Before vs After
| Before (์ญํ ๊ธฐ๋ฐ ๊ตฌ์กฐ) | After (Feature ๊ธฐ๋ฐ ๊ตฌ์กฐ) |
|---|---|
| ๊ธฐ๋ฅ ํ๋ ์์ ์ ์ฌ๋ฌ ํด๋ ์ด๋ ํ์ | ๊ด๋ จ ์ฝ๋๊ฐ ํ๋์ feature ๋ด๋ถ์ ๋ชจ์ฌ ์์ |
| ์ฝ๋ ํ๋ฆ ํ์ ์ด๋ ค์ | ๊ธฐ๋ฅ ๋จ์๋ก ์ฝ๋ ์ดํด ๊ฐ๋ฅ |
| ํ์ ๋น์ฉ ์ฆ๊ฐ | ๋ฆฌํฉํ ๋ง ์ ์ํฅ ๋ฒ์ ํ์ ์ฉ์ด |
ํ๊ณ
์ด๋ฒ ๊ฒฝํ์ ํตํด ๊ตฌ์กฐ ์ค๊ณ์๋ ์ ๋ต์ด ์๋ ๊ฒ์ด ์๋๋ผ๋ ์ ์ ๋๊ผ๋ค.
FSD๋ฅผ ๊ทธ๋๋ก ์ ์ฉํ๋ ๊ฒ๋ณด๋ค ํ๋ก์ ํธ์ ๊ท๋ชจ, ๊ธฐ๊ฐ, ํ์ ์ํฉ์ ๊ณ ๋ คํด์
ํ์ํ ๋ถ๋ถ ๋งํผ๋ง ์ ์ฉํ๋ ๊ฒ์ด ๋ ์ค์ํ๋ค๊ณ ์๊ฐํ๊ฒ ๋์๋ค.
๊ทธ๋ฆฌ๊ณ ๋จ์ํ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๊ฒ์ ๋์ด ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ์ค๊ณํ๋ ๊ณผ์ ์ด
๊ฐ๋ฐ ์์ฐ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ํฐ ์ํฅ์ ์ค๋ค๋ ๊ฒ์ ์ฒด๊ฐํ ์ ์์๋ค!