๐คทโ๏ธ ๋ณธ๋ก ์ ์์
ํ๋ก์ ํธ๋ฅผ ์์ํ๊ธฐ์ ์์ ํด๋ ๊ตฌ์กฐ, ์ค๊ณ์ ๋ํ ์ํคํ ์ฒ๋ฅผ ๋ง๋๋ ๊ฒ์ ์๋นํ ์ด๋ ต๋ค.
์ด๋ฒ ํ๋ก์ ํธ์ React FSD ํด๋๊ตฌ์กฐ ์ํคํ ์ฒ๋ฅผ ์ค๊ณํ ์์ ์ด๋ผ์ FSD ์ํคํ ์ฒ์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค.
๐คทโ๏ธ FSD ์ํคํ ์ฒ๋?
FSD๋ Feature Sliced Desing ์๋ฏธ์ด๋ฉฐ ์์ ๊ท๋ชจ์ ํ๋ก์ ํธ๋ ์ ์ง์ ์ผ๋ก ๊ท๋ชจ๊ฐ ํ์ฅ๋ ํ์๊ฐ ์๋ ํ๋ก์ ํธ๋ผ๋ฉด ๋ชจ๋๋ฆฌ์ค ํ์์ผ๋ก ํ๋ก์ ํธ๋ฅผ ์ค๊ณํ๋ฉด ๋์ง๋ง ์ ์ง์ ์ผ๋ก ์ํํธ์จ์ด์ ๊ท๋ชจ๊ฐ ์ปค์ง๊ณ ํ์ฅํด ๋๊ฐ ์์ ์ด๋ผ๋ฉด FSD๋ฅผ ์ ์ฉํ ํ์๊ฐ ์๋ค.
ํ๋ก ํธ ํ๋ก์ ํธ ๋ณด์ผ๋ฌํ๋ ์ดํธ ๊ฐ๋ ๊ณต๋ถ๋ฅผ ํ๊ณ ๊ธ์ ๋ณด์๋ฉด ๋ ๋ง์ ๋์์ด ๋ฉ๋๋ค^^
๋ณด์ผ๋ฌํ๋ ์ดํธ(Boilerplate code)๋? - ๊ฐ๋ , ํ์ํ ์ด์
https://cometruedream.tistory.com/216
FSD ๊ตฌ์ฑ์์?
๋ ์ด์ด(layer), ์ฌ๋ผ์ด์ค(slice), ์ธ๊ทธ๋จผํธ(segment)์ ์ธ ๊ฐ์ง ๊ฐ๋ ์ผ๋ก ๊ตฌ๋ถ๋๋ค.
FSD ํด๋๊ตฌ์กฐ๋ ์ต๋ 3๋จ๊ณ๋ก ์ด๋ค์ ธ ์์ผ๋ฉฐ ์ํฉ๋ง๋ค 1depth ์ ๋ ๋ ์๊ฒจ๋ ์ ์๋ค.
๋ ์ด์ด
๋ ์ด์ด๋ ์ต์์ ๋๋ ํฐ๋ฆฌ์ด๋ฉฐ ์ ํ๋ฆฌ์ผ์ด์ ๋ถํด์ ์ต์์ root ์ ๋๋ค.
FSD ์ํคํ ์ฒ์์ ๋ ์ด์ด์ ์๋ ์ต๋ 7๋จ๊ณ๋ก ์ ํ๋๋ฉฐ ํ์ํ ๋ ์ด์ด์ ๋ง์ถฐ์ ํด๋๊ตฌ์กฐ๋ฅผ ๋ง์ถ๋ฉด๋๋ค.
์ฐธ๊ณ ๋ก processes ๋ ์ด์ด๋ ์ฌ์ฉ๋์ง ์์์ ์ดํด๋ณด์ง ์๊ณ ๋๋จธ์ง 6๊ฐ์ ๋ ์ด์ด๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ํน์ง์ ์ดํด๋ณด๊ฒ ์ต๋ค.
FSD 6๊ฐ์ ๋ ์ด์ด
- app: ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง์ด ์ด๊ธฐํ๋๋ ๊ณณ์ ๋๋ค. ํ๋ก๋ฐ์ด๋, ๋ผ์ฐํฐ, ์ ์ญ ์คํ์ผ, ์ ์ญ ํ์ ์ ์ธ ๋ฑ์ด ์ฌ๊ธฐ์์ ์ ์ ๋๋ค.
- pages: ํด๋น ๋ ์ด์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ด์ง๊ฐ ํฌํจ๋๋ค.
- widgets: ํด๋น ๋ ์ด์ด๋ ์ฌ์ฉ๋๋ ๋ ๋ฆฝ์ ์ธ UI ์ปดํฌ๋ํธ
- features: ํด๋น ๋ ์ด์ด๋ UI์ ๊ธฐ๋ฅ์ ์ธ ๋ถ๋ถ์ ํฌํจํ๋ค. ์๋ฅผ ๋ค์ด ๋คํฌ๋ชจ๋, ์ข์์ ๋ฑ์ด ์๋ค.
- shared: ํด๋น ๋ ์ด์ด๋ ๋น์ฆ๋์ฆ ๋ก์ง์ ์ข ์๋์ง ์๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ์ ์ ํธ๋ฆฌํฐ๊ฐ ํฌํจ๋๋ค. ์๋ฅผ๋ค์ด components, hooks ๋ฑ์ ํฌํจํ๋ค.
- entities: ํด๋น ๋ ์ด์ด๋ ๋ฐ์ดํฐ์ ๊ฐ๋ค์ ํฌํจํ๋ค.
6๊ฐ์ ๋ ์ด์ด๋ค์ ํ๋ก์ ํธ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์กฐ์งํ, ๋ชจ๋ํ๋๊ณ ์ ์ง๋ณด์์ ํ์ฅ ๊ฐ๋ฅํ ์ํคํ ์ฒ๋ฅผ ์ค๊ณํ๋๋ฐ ๋์์ด ๋ฉ๋๋ค.
*๋ฐ๋์ปค๋ธ๊ฐ ์์ด์ ์ง์ ์ฅ๋ฒฝ์ด ์ด๋ ต๋ค.
์ฌ๋ผ์ด์ค(slices)
6~7๊ฐ์ ์ต์์ ๋ ์ด์ด๋ฅผ ๋ถํด์ ๋ ๋ฒ์งธ ์์ค์ธ ์ฌ๋ผ์ด์ค๋ผ๋ ํ์ ๋๋ ํ ๋ฆฌ๋ค. ์ฌ๋ผ์ด์ค์ ๋ชฉํ๋ ์ฝ๋๋ฅผ ๋ชจ๋ํํ๊ณ ์ฝ๋ ๋ณ๋ก ๊ทธ๋ฃนํํ๋ ๊ฒ์ ๋๋ค.
์ฌ๋ผ์ด์ค ๋ด๋ถ์์๋ ๋น์ฆ๋์ค์ ์ฐ๊ด๋ ๋ก์ง์ ์์ฑํ ์ ์์ผ๋ฉฐ app๊ณผ shared๋ ์ด์ด์์ ๊ฐ๊ฐ ์ฑ์ ์ ์ฒด์ ์ธ ๋ถ๋ถ๊ณผ ์ฐ๊ด๋ ์ฝ๋๋ฅผ shared ๋ ์ด์ด์์๋ ๊น์ ์ถ์ํ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ ๋น์ฆ๋์ฆ ๋ก์ง์ ์์ฑํ์ง ์๊ธฐ ๋๋ฌธ์ slice๋ฅผ ๋์ง ์๋๋ค.
์ธ๊ทธ๋จผํธ(segments)
์ธ๊ทธ๋จผํธ๋ FSD์ ๋ง์ง๋ง ๊ณ์ธต์ ์๋ ์์๋ก ์ฝ๋๋ฅผ ๋๋๋๋ฐ ๋์์ด ๋๋ค.
์ฝ๋๋ฅผ ์ธ๋ถํํด์ ์ ์ง๋ณด์์ ๋์์ด ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ธ๊ทธ๋จผํธ ์ข ๋ฅ
api - ํ์ํ ์๋ฒ ์์ฒญ.
UI - ์ฌ๋ผ์ด์ค์ UI ์ปดํฌ๋ํธ.
model - ๋น์ฆ๋์ค ๋ก์ง, ์ฆ ์ํ์์ ์ํธ ์์ฉ. actions ๋ฐ selectors๊ฐ ์ด์ ํด๋น
lib - ์ฌ๋ผ์ด์ค ๋ด์์ ์ฌ์ฉ๋๋ ๋ณด์กฐ ๊ธฐ๋ฅ.
config - ์ฌ๋ผ์ด์ค์ ํ์ํ ๊ตฌ์ฑ๊ฐ์ด์ง๋ง ๊ตฌ์ฑ ์ธ๊ทธ๋จผํธ๋ ๊ฑฐ์ ํ์ํ์ง ์์.
consts - ํ์ํ ์์.
๊ณต๊ฐ API
์ธ๊ทธ๋จผํธ๋ FSD์ ๋ง์ง๋ง ๊ณ์ธต์ ์๋ ์์๋ก ์ฝ๋๋ฅผ ๋๋๋๋ฐ ๋์์ด ๋๋ค.
์ฝ๋๋ฅผ ์ธ๋ถํํด์ ์ ์ง๋ณด์์ ๋์์ด ๋๋ค.FSD ์ํคํ ์ฒ์ ๊ท์น์ผ๋ก ๊ฐ ์ฌ๋ผ์ด์ค์ ์ธํฌ๋จผํธ์๋ ๊ณต๊ฐ API๊ฐ ์์ผ๋ฉฐ index.js, index.txํ์ผ์ด๋ฉฐ index ํ์ผ์ ํตํด ์ฌ๋ผ์ด์ค ๋๋ ์ธ๊ทธ๋จผํธ์์ ํ์ํ ๊ธฐ๋ฅ๋ง ์ธ๋ถ๋ก exportํ๊ณ ๋ถํ์ํ ๊ธฐ๋ฅ์ ๊ฒฉ๋ฆฌํ ์ ์์ต๋๋ค.
๐คทโ๏ธ ์ ๋ฆฌํ์๋ฉด…
React ํ๋ก ํธ ๊ฐ๋ฐ์๋ผ๋ฉด ํญ์ ํด๋ ๊ตฌ์กฐ & ์ํคํ ์ณ์ ๋ํด์ ๋ง์ ๊ณ ๋ฏผ์ ํ๊ฒ๋๋ค.
๊ทธ๋ฌํ ๋ฌธ์ ๋ฅผ ์กฐ๊ธ์ด๋๋ง ๋์ ์๋ FSD ์ํคํ ์ณ๋ ํ๋ก ํธ๊ฐ๋ฐ์๊ฐ ์์์ผ ํ๊ณ ์ฌ์ฉํ ์ ์์ด์ผ ํ๋ ํฅ๋ฏธ๋ก์ด ๊ธฐ์ ์ด๋ค.
ํ์๋ผ๋ฆฌ ํ์ & ๊ท์น & ๊ฐ๋ฐ๋ฌธํ๋ฅผ ์ ๊ณตํ ์ ์๊ณ ํ์ฅ์ฑ๊ณผ ๋ ๋ฆฝ์ ์ธ ์ฝ๋๋ฒ ์ด์ค๋ก ์ฝ๋ ํ์ง์ ๋์ผ์ ์๋ค.
ํ์ง๋ง ์ํคํ ์ณ์ ๋ฐ๋์ปค๋ธ๊ฐ ํฌ๊ธฐ ๋๋ฌธ์ ํ์๊ณผ ์ธ์, ๊ฐ๋ , ํ ๋ฌธํ๊ฐ ์ค์ํฉ๋๋ค.
์ฌ๋ฐ๋ ์ค๋์ ๋ ๋ณ ์ด์ธ ๋ณด๊ณ ๊ฐ์ธ์!
'React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Next JS์์ tailwind ์ ์ฉ ์๋ ๋ ํด๊ฒฐ๋ฐฉ๋ฒ (1) | 2024.05.17 |
---|---|
๋ฆฌ์กํธ Vite Proxy ํ์ฉํ CORS ์ค๋ฅ ํด๊ฒฐ (1) | 2024.05.03 |
react input ๋ชจ๋ ํ ์คํธ ์ ํํ๋ ๋ฐฉ๋ฒ (0) | 2024.03.21 |
React ์ค๋ณต ํ์ผ ์ ๋ก๋ ์ค๋ฅ ํด๊ฒฐ ๋ฐฉ๋ฒ (0) | 2024.03.14 |
immer๋ฅผ ์ฌ์ฉํด์ ๋ถ๋ณ์ฑ์ ์ง์ผ์ผํ๋ ์ด์ ์ ์์ ๋ณต์ฌ์ ๊ฐ๋ (3) | 2024.01.05 |