
๊ธฐ์กด์ ํด๋ก ์ฝ๋ฉ - ํ ์ด ํ๋ก์ ํธ, ์ธ๋ถ ํ๋ก์ ํธ์์์ ํด๋๊ตฌ์กฐ๋ ๋ฏธ์ธํ๊ฒ ๋ค๋ฅธ ๊ตฌ์กฐ๋ก ๋ง๋ค์๋ค. ๋ฌผ๋ก ๋ชจ๋ ๋ฆฌ์กํธ cra ์ธํ ์ ๋ง์ถฐ์ ํ๋ค.
React 18๋ฒ์ ๋ถํฐ ๋์ค๋ ์๋ฒ ์ปดํฌ๋ํธ๋ฅผ ๋ฌธ์๋ก ํตํด ์ ํ๋ฉด์ Next.js 13 App ๋ผ์ฐํฐ ๋ฐฉ์์ผ๋ก ๋ค์ ํ๋ก์ ํธ๋ฅผ ์งํํ๊ณ ๋ ์ถ์๋ฐ ํด๋ ์ธํ ์ ๊ดํ์ฌ โ์ ์โ ์ด๋ผ๋ ๋๋์ ๋ฐ์ง ๋ชปํ๋ค. Korean FE Article ์ ํ๊น ๋ณด๋ฉด์ FSD (Feature-Sliced Design, FSD) ์ํคํ ์ฒ์ ๋ํด ์๊ฒ๋์๊ณ ๋๋ง์ ๋ฐฉ์๋๋ก ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค.
(๋ฒ์ญ) ๊ธฐ๋ฅ ๋ถํ ์ค๊ณ - ์ต๊ณ ์ ํ๋ฐํธ์๋ ์ํคํ ์ฒ
๋(?)๋ฅผ ๋น๋กฏํ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ ์ข ์ข ์ดํ๋ฆฌ์ผ์ด์ ์ํคํ ์ฒ์ ๊ด๋ จ๋ ๋ฌธ์ ๋ฅผ ํ๋ฒ์ฏค์ ์๊ฐํด๋ณด๊ฒ ๋๋ค. ๋๋ถ๋ถ ๋ชจ๋ ๊ฐ์ ๋์จํ ๊ฒฐํฉ๊ณผ ๋์ ์์ง๋ ฅ์ ์ ๊ณตํด์ผ ํ๋ฉฐ ์ฝ๊ฒ ํ์ฅํ ์ ์๋ ์ํคํ ์ณ๋ฅผ ํ์๋ก ํ๋ค. ์ ๋ถ๋งํฌ๋ฅผ ์ค์ ๋ก ์ ์ ์ฌ๋์ ์ํ๋ฉด FSD ์ํคํ ์ฒ๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ ์ต์ ์ค ์ต๊ณ ๋ผ๊ณ ์๊ฐํ๋ค๊ณ ํ๋ค !
์ฐจ๋ก๋๋ก FSD์ ๊ฐ๋ ๊ณผ ์ด ์ํคํ ์ฒ ๋ฐฉ๋ฒ๋ก ์ด ํด๊ฒฐํ๋ ๋ฌธ์ ๋ฅผ ๋ค๋ฃจ๊ณ , FSD๋ฅผ ๊ธฐ์กด ์ํคํ ์ฒ ๋ฐ ๋ชจ๋์ ์ํคํ ์ฒ์ ๋น๊ตํ ๋ค ์ฅ๋จ์ ๊น์ง ์์๋ณด์.
๋จผ์ ๋ ์ด์ด(layer), ์ฌ๋ผ์ด์ค(slice), ์ธ๊ทธ๋จผํธ(segment)์ ์ธ ๊ฐ์ง ๊ฐ๋
์ ๊ตฌ๋ถํด๋ณด์.

๋ ์ด์ด๋ ์ต์์ ๋๋ ํ ๋ฆฌ์ด์ ์ ํ๋ฆฌ์ผ์ด์ ๋ถํด์ ์ฒซ ๋ฒ์งธ ๋จ๊ณ์ด๋ค. ๋ ์ด์ด์ ์๋ ์ต๋ 7๊ฐ๋ก ์ ํ๋์ด ์์ผ๋ฉฐ, ์ผ๋ถ๋ ์ ํ ์ฌํญ์ด์ง๋ง ํ์คํ๋์ด ์๋ค. ํ์ฌ ๋ค์๊ณผ ๊ฐ์ด ๋ ์ด์ด๊ฐ ๊ตฌ๋ถ๋์ด ์๋ค.

๊ฐ ๋ ์ด์ด์๋ ๊ณ ์ ํ ์ฑ ์ ์์ญ์ด ์์ผ๋ฉฐ ์ด๋ ๋น์ฆ๋์ค ์งํฅ์ ์ด๋ค.
app: ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง์ด ์ด๊ธฐํ๋๋ ๊ณณ์ด๋ค. ํ๋ก๋ฐ์ด๋, ๋ผ์ฐํฐ, ์ ์ญ ์คํ์ผ, ์ ์ญ ํ์ ์ ์ธ ๋ฑ์ด ์ฌ๊ธฐ์์ ์ ์๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ์ง์ ์ ์ญํ ์ ํ๋ค.
processes: ์ด ๋ ์ด์ด๋ ์ฌ๋ฌ ๋จ๊ณ๋ก ์ด๋ฃจ์ด์ง ๋ฑ๋ก๊ณผ ๊ฐ์ด ์ฌ๋ฌ ํ์ด์ง์ ๊ฑธ์ณ ์๋ ํ๋ก์ธ์ค๋ฅผ ์ฒ๋ฆฌํ๋ค. ์ด ๋ ์ด์ด๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋์ง๋ง ์ฌ์ ํ ๊ฐ๋์ฉ ๋ง์ฃผํ ์ ์๋ค. ์ ํ์ ๋ ์ด์ด์ด๋ค.
pages: ์ด ๋ ์ด์ด์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ด์ง๊ฐ ํฌํจ๋๋ค.
widgets: ํ์ด์ง์ ์ฌ์ฉ๋๋ ๋ ๋ฆฝ์ ์ธ UI ์ปดํฌ๋ํธ์ด๋ค.
features: ์ด ๋ ์ด์ด๋ ๋น์ฆ๋์ค ๊ฐ์น๋ฅผ ์ ๋ฌํ๋ ์ฌ์ฉ์ ์๋๋ฆฌ์ค์ ๊ธฐ๋ฅ์ ๋ค๋ฃฌ๋ค. ์๋ฅผ ๋ค์ด ์ข์์, ๋ฆฌ๋ทฐ ์์ฑ, ์ ํ ํ๊ฐ ๋ฑ์ด ์๋ค. ์ด ๋ํ ์ ํ์ ๋ ์ด์ด์ด๋ค.
entities: ์ด ๋ ์ด์ด๋ ๋น์ฆ๋์ค ์ํฐํฐ๋ฅผ ๋ํ๋ธ๋ค. ์ด๋ฌํ ์ํฐํฐ์๋ ์ฌ์ฉ์, ๋ฆฌ๋ทฐ, ๋๊ธ ๋ฑ์ด ํฌํจ๋ ์ ์๋ค. ์ ํ์ ๋ ์ด์ด์ด๋ค.
shared: ์ด ๋ ์ด์ด์๋ ํน์ ๋น์ฆ๋์ค ๋ก์ง์ ์ข ์๋์ง ์์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ์ ์ ํธ๋ฆฌํฐ๊ฐ ํฌํจ๋์ด ์๋ค. ์ฌ๊ธฐ์๋ UI ํคํธ, axios ์ค์ , ์ ํ๋ฆฌ์ผ์ด์ ์ค์ , ๋น์ฆ๋์ค ๋ก์ง์ ๋ฌถ์ด์ง ์์ ํฌํผ ๋ฑ์ด ํฌํจ๋๋ค.

์ด๋ฌํ ๋ ์ด์ด๋ค์ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์กฐ์งํํ๊ณ , ๋ชจ๋ํ๋๊ณ ์ ์ง๋ณด์ ์ฉ์ดํ ํ์ฅ ๊ฐ๋ฅํ ์ํคํ ์ฒ๋ฅผ ์ด์งํ๋๋ฐ ๋์์ด ๋๋ค.
๊ธฐ๋ฅ ๋ถํ ์ค๊ณ์ ์ฃผ์ ํน์ง ์ค ํ๋๋ ๊ณ์ธต ๊ตฌ์กฐ์ด๋ค. ์ด ๊ตฌ์กฐ์์ features ๋ ์ด์ด๊ฐ entities ๋ ์ด์ด๋ณด๋ค ๋ ์์ ์๊ธฐ ๋๋ฌธ์ entities ๋ ์ด์ด๋ features ๋ ์ด์ด์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก features ๋ ์ด์ด๋ widgets ๋ ์ด์ด๋ processes ๋ ์ด์ด์ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์ ๋ ์ด์ด๋ ์๋ ๋ ์ด์ด๋ง ํ์ฉํ ์ ์๋ค. ์ด๋ ํ ๋ฐฉํฅ์ผ๋ก๋ง ํฅํ๋ ์ ํ์ ์ธ ํ๋ฆ์ ์ ์งํ๊ธฐ ์ํจ์ด๋ค.

๊ณ์ธต ๊ตฌ์กฐ์์ ๋ ์ด์ด์ ์์น๊ฐ ๋ฎ์์๋ก ์ฝ๋์ ๋ ๋ง์ ๊ณณ์์ ์ฌ์ฉ๋ ๊ฐ๋ฅ์ฑ์ด ๋๊ธฐ ๋๋ฌธ์, ๋ ์ด์ด๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ๋ ์ํํ๋ค. ์๋ฅผ ๋ค์ด shared ๋ ์ด์ด์ UI ํคํธ๋ features, widgets, ์ฌ์ง์ด pages ๋ ์ด์ด์์๋ ์ฌ์ฉ๋๋ค.
๊ฐ ๋ ์ด์ด์๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ถํด์ ๋ ๋ฒ์งธ ์์ค์ธ ์ฌ๋ผ์ด์ค๋ผ๋ ํ์ ๋๋ ํ ๋ฆฌ๊ฐ ์๋ค. ์ฌ๋ผ์ด์ค์์ ์ฐ๊ฒฐ์ ์ถ์์ ์ธ ๊ฒ์ด ์๋๋ผ ํน์ ๋น์ค๋์ค ์ํฐํฐ์ ๋ํ ๊ฒ์ด๋ค. ์ฌ๋ผ์ด์ค์ ์ฃผ์ ๋ชฉํ๋ ์ฝ๋๋ฅผ ๊ฐ๋ณ๋ก ๊ทธ๋ฃนํํ๋ ๊ฒ์ด๋ค.
์ฌ๋ผ์ด์ค ์ด๋ฆ์ ํ๋ก์ ํธ์ ๋น์ฆ๋์ค ์์ญ์ ๋ฐ๋ผ ์ง์ ๊ฒฐ์ ๋๋ฏ๋ก ํ์คํ๋์ด ์์ง ์๋ค. ์๋ฅผ ๋ค์ด ์ฌ์ง ๊ฐค๋ฌ๋ฆฌ์๋ ์ฌ์ง, ์จ๋ฒ, ๊ฐค๋ฌ๋ฆฌ์ ๊ฐ์ ์น์ ์ด ์์ ์ ์๋ค. ์์ ๋คํธ์ํฌ์๋ ๊ฒ์๋ฌผ, ์ฌ์ฉ์, ๋ด์คํผ๋์ ๊ฐ์ ์ฌ๋ผ์ด์ค๊ฐ ํ์ํ ์ ์๋ค.
๋ฐ์ ํ๊ฒ ๊ด๋ จ๋ ์กฐ๊ฐ๋ค์ ๊ตฌ์กฐ์ ์ผ๋ก ๋๋ ํ ๋ฆฌ ๋ด์ ๊ทธ๋ฃน์ง์ ์ ์์ง๋ง ๋ค๋ฅธ ์ฌ๋ผ์ด์ค์ ๋์ผํ ๊ฒฉ๋ฆฌ ๊ท์น์ ์ค์ํด์ผ ํ๋ฉฐ, ์ด ๋๋ ํ ๋ฆฌ์ ์๋ ์ฝ๋๋ ์ง์ ์ ์ผ๋ก ๊ณต์ ๋์ง ์์์ผ ํ๋ค.

๊ฐ ์ฌ๋ผ์ด์ค๋ ์ธ๊ทธ๋จผํธ๋ก ๊ตฌ์ฑ๋๋ค. ์ธ๊ทธ๋จผํธ๋ ๋ชฉ์ ์ ๋ฐ๋ผ ์ฌ๋ผ์ด์ค ๋ด์ ์ฝ๋๋ฅผ ๋๋๋ ๋ฐ ๋์์ด ๋๋ค. ํ์ ํฉ์์ ๋ฐ๋ผ ์ธ๊ทธ๋จผํธ์ ๊ตฌ์ฑ๊ณผ ์ด๋ฆ์ด ๋ณ๊ฒฝ๋ ์ ์๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ธ๊ทธ๋จผํธ๋ค์ ๋ค์๊ณผ ๊ฐ๋ค.
api: ํ์ํ ์๋ฒ ์์ฒญ
ui: ์ฌ๋ผ์ด์ค์ UI ์ปดํฌ๋ํธ
model: ๋น์ฆ๋์ค ๋ก์ง, ์ฆ ์ํ์์ ์ํธ ์์ฉ. actions ๋ฐ selectors๊ฐ ์ด์ ํด๋นํจ
lib: ์ฌ๋ผ์ด์ค ๋ด์์ ์ฌ์ฉ๋๋ ๋ณด์กฐ ๊ธฐ๋ฅ
config: ์ฌ๋ผ์ด์ค์ ํ์ํ ๊ตฌ์ฑ๊ฐ์ด์ง๋ง ๊ตฌ์ฑ ์ธ๊ทธ๋จผํธ๋ ๊ฑฐ์ ํ์ํ์ง ์์.
consts: ํ์ํ ์์
๊ฐ ์ฌ๋ผ์ด์ค์ ์ธ๊ทธ๋จผํธ์๋ ๊ณต๊ฐ API๊ฐ ์๋ค. ๊ณต๊ฐ API๋ index.js ๋๋ index.ts ํ์ผ์ด๋ฉฐ, ์ด ํ์ผ์ ํตํด ์ฌ๋ผ์ด์ค ๋๋ ์ธ๊ทธ๋จผํธ์์ ํ์ํ ๊ธฐ๋ฅ๋ง ์ธ๋ถ๋ก ์ถ์ถํ๊ณ ๋ถํ์ํ ๊ธฐ๋ฅ์ ๊ฒฉ๋ฆฌํ ์ ์๋ค. ์ธ๋ฑ์ค ํ์ผ์ ์ง์
์ ์ญํ ์ ํ๋ค.
๊ณต๊ฐ API์ ๋ํ ๊ท์น์ ๋ค์๊ณผ ๊ฐ๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ฌ๋ผ์ด์ค์ ์ธ๊ทธ๋จผํธ๋ ๊ณต๊ฐ API ์ธ๋ฑ์ค ํ์ผ์ ์ ์๋ ์ฌ๋ผ์ด์ค์ ๊ธฐ๋ฅ๊ณผ ์ปดํฌ๋ํธ๋ง ์ฌ์ฉํ๋ค.
๊ณต๊ฐ API์ ์ ์๋์ง ์์ ์ฌ๋ผ์ด์ค ๋๋ ์ธ๊ทธ๋จผํธ์ ๋ด๋ถ ๋ถ๋ถ์ ๊ฒฉ๋ฆฌ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋๋ฉฐ ์ฌ๋ผ์ด์ค ๋๋ ์ธ๊ทธ๋จผํธ ๋ด๋ถ์์๋ง ์ ๊ทผํ ์ ์๋ค.
๊ณต๊ฐ API๋ import ๋ฐ export๋ก ๋จ์ํ๊ฒ ์๋ํ๋ฏ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณ๊ฒฝํ ๋ ์ฝ๋์ ๋ชจ๋ ๊ณณ์์ import๋ฅผ ๋ณ๊ฒฝํ ํ์๊ฐ ์๋ค.

๊ณ์ธต์ด ๋์ ๋ ์ด์ด์ผ์๋ก ํน์ ๋น์ฆ๋์ค ๋ ธ๋์ ๋ ๋ง์ด ์ข ์๋๊ณ ๋ ๋ง์ ๋น์ฆ๋์ค ๋ก์ง์ด ํฌํจ๋๋ค. ๊ณ์ธต์ด ๋ฎ์ ๋ ์ด์ด์ผ์๋ก ์ถ์ํ ์์ค์ด ๋๊ณ ์ฌ์ฌ์ฉ์ฑ์ด ๋์ผ๋ฉฐ ๋ ์ด์ด ์์ฒด์ ์์จ์ฑ์ด ์ ๋ค.

๊ธฐ๋ฅ ๋ถํ ์ค๊ณ์ ๊ณผ์ ์ค ํ๋๋ ๊ฒฐํฉ์ ๋์จํ๊ฒ ํ๊ณ ์์ง๋ ฅ์ ๋์ด๋ ๊ฒ์ด๋ค. FSD๊ฐ ์ด๋ฌํ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ป๊ฒ ๋ฌ์ฑํ๋์ง ์ดํดํ๋ ๊ฒ์ ์ค์ํ๋ค.
OOP์์๋ ๋คํ์ฑ(polymorphism), ์บก์ํ(encapsulation), ์์(inheritance) ๋ฐ ์ถ์ํ(abstraction) ์ ๊ฐ์ ๊ฐ๋ ์ ํตํด ์ด๋ฌํ ๋ฌธ์ ๋ค์ ์ค๋ ์๊ฐ ๋์ ํด๊ฒฐํด ์๋ค. ์ด๋ฌํ ๊ฐ๋ ๋ค์ ์ฝ๋์ ๊ฒฉ๋ฆฌ, ์ฌ์ฌ์ฉ์ฑ, ๊ทธ๋ฆฌ๊ณ ๋ค์ํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฅํ๋ค. ์ด๋ ์ปดํฌ๋ํธ๋ ๊ธฐ๋ฅ์ด ์ด๋ป๊ฒ ์ฌ์ฉ๋๋๋์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋๋ก ํ๋ค.
๊ธฐ๋ฅ ๋ถํ ์ค๊ณ๋ ์ด๋ฌํ ์์น๋ค์ ํ๋ก ํธ์๋์ ์ ์ฉํ๋ ๋ฐ ๋์์ ์ค๋ค.
์ถ์ํ์ ๋คํ์ฑ์ ๋ ์ด์ด๋ฅผ ํตํด ๋ฌ์ฑ๋๋ค. ๋ฎ์ ๋ ์ด์ด๋ ๋ ์ถ์ํ ๋์ด์๊ธฐ ๋๋ฌธ์ ๋ ๋์ ๋ ์ด์ด์์ ์ฌ์ฌ์ฉ๋ ์ ์์ผ๋ฉฐ, ํน์ ํ ๋งค๊ฐ๋ณ์๋ ์์ฑ์ ๋ฐ๋ผ ์ปดํฌ๋ํธ๋ ๊ธฐ๋ฅ์ด ๋ค๋ฅด๊ฒ ์๋ํ ์ ์๋ค.
์บก์ํ๋ ์ฌ๋ผ์ด์ค์ ์ธ๊ทธ๋จผํธ ์ธ๋ถ์์ ํ์ํ์ง ์์ ๊ฒ์ ๊ฒฉ๋ฆฌ์ํค๋ ๊ณต๊ฐ API๋ฅผ ํตํด ๋ฌ์ฑ๋๋ค. ์ฌ๋ผ์ด์ค์ ๋ด๋ถ ์ธ๊ทธ๋จผํธ์ ๋ํ ์ ๊ทผ์ ์ ํ๋๋ฉฐ, ๊ณต๊ฐ API๋ ์ฌ๋ผ์ด์ค ๋๋ ์ธ๊ทธ๋จผํธ์ ๊ธฐ๋ฅ ๋ฐ ์ปดํฌ๋ํธ์ ์ ๊ทผํ ์ ์๋ ์ ์ผํ ๋ฐฉ๋ฒ์ด๋ค.
์์ ๋ํ ๋ ์ด์ด๋ฅผ ํตํด ๋ฌ์ฑ๋๋ค. ๋ ๋์ ๋ ์ด์ด๋ ๋ฎ์ ๋ ์ด์ด๋ฅผ ์ฌ์ฌ์ฉํ ์ ์๋ค.
์ด์ฉ๋ฉด ์ง๊ธ๊น์ง ์ต๊ทผ์ ํ๋ ๋์ ํ๋ก์ ํธ์๋ ๊ณ ์ ์ ์ธ ์ํคํ ์ฒ์ด์ง ์์๋ ์ถ๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ํ์์ด ๊ณ ์ ์ ์ธ ์ํคํ ์ฒ๋ก ์นญํด์ง๋ค.

๊ฐ์ฅ ํฐ ๋จ์ ์ ์ปดํฌ๋ํธ ๊ฐ์ ์๋ฌต์ ์ธ ์ฐ๊ฒฐ๊ณผ ๋ชจ๋์ ๋ณต์ก์ฑ ๋๋ฌธ์ ํ๋ก์ ํธ๊ฐ ์ ์ง๋ณด์ํ๊ธฐ ์ด๋ ค์์ง๋ค๋ ๊ฒ์ด๋ค. ์ด๋ฌํ ๋จ์ ์ ์๊ฐ์ด ํ๋ฅผ์๋ก ๋์ฑ ๋ถ๋ช ํด์ง๋ค. ํ๋ก์ ํธ๊ฐ ์งํํ ์๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ํคํ ์ฒ๋ ์๋ง์ง์ฐฝ์ด ๋์ด ๋ฒ๋ฆฐ๋ค.
๋ฌผ๋ก ๊ณ ์ ์ ์ธ ์ํคํ ์ณ๋ ์ง์์ ์ธ ์ ์ง๋ณด์๊ฐ ์๋ ์์ ํ๋ก์ ํธ๋ ๊ฐ์ธ ํ๋ก์ ํธ์๋ ์ ํฉํ ์ ์๋ค.
๊ธฐ๋ฅ ๋ถํ ์ค๊ณ๋ ๊ธฐ ๊ฐ๋ ๊ณผ ํ์ค ๋๋ถ์ ๊ณ ์ ์ ์ธ ์ํคํ ์ฒ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค. ๊ทธ๋ฌ๋ FSD๋ฅผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์๋ค์ ๊ณ ์ ์ ์ธ ์ํคํ ์ฒ๋ฅผ ๋ค๋ฃฐ ๋๋ณด๋ค ๋ ๋์ ์ดํด๋์ ๊ธฐ์ ์์ค์ ํ์๋ก ํ๋ค.
์ผ๋ฐ์ ์ผ๋ก 2๋
๋ฏธ๋ง์ ๊ฒฝ๋ ฅ์ ๊ฐ์ง (๋๋ฅผ ํฌํจํ) ๊ฐ๋ฐ์๋ค์ FSD์ ๋ํด ๋ค์ด๋ณด์ง ๋ชปํ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
๊ทธ๋ฌ๋ ๊ธฐ๋ฅ ๋ถํ ์ค๊ณ๋ฅผ ์ฌ์ฉํ ๋๋ ๋ฌธ์ ๋ฅผ โ๋์คโ ์ด ์๋ โ์ง๊ธโ ํด๊ฒฐํด์ผ ํ๋ค. ์ฝ๋์ ๋ฌธ์ ์ ๊ณผ ๊ฐ๋ ์์ ๋ฒ์ด๋ ๋ถ๋ถ๋ค์ด ์ฆ์ ๋๋ฌ๋๋ค.
๋จ์ํ ๋ชจ๋์ ์ํคํ ์ฒ์๋ ๋ช ๊ฐ์ง ๋จ์ ์ด ์๋ค.
๋ณต์กํ๊ฑฐ๋ ์ ๋นํ ๋ณต์กํ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ, ๋จ์ํ ๋ชจ๋์ ์ํคํ ์ฒ๋ณด๋ค๋ ๊ธฐ๋ฅ ๋ถํ ์ค๊ณ๋ฅผ ์ ํธํด์ผ ํ๋ค. FSD๋ ๋ง์ ๊ทผ๋ณธ์ ์ธ ์ํคํ ์ฒ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ฉฐ ๋จ์ ๋ ๊ฑฐ์ ์๋ค.
๋จ์ํจ ๋ฐ ๊ฐ๋ฐ ์๋ ์ธก๋ฉด์์ ๋จ์ ๋ชจ๋์ ์ํคํ ์ฒ๊ฐ FSD๋ณด๋ค ์ ๋ฆฌํ ์ ์๋ค. MVP๊ฐ ํ์ํ๊ฑฐ๋ ์๋ช ์ด ์งง์ ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐํ๋ ๊ฒฝ์ฐ์๋ ๋จ์ํ ๋ชจ๋์ ์ํคํ ์ฒ๊ฐ FSD๋ณด๋ค ์ ํฉํ ์ ์๋ค. ํ์ง๋ง ๊ทธ ์ธ์ ๊ฒฝ์ฐ์๋ ๊ธฐ๋ฅ ๋ถํ ์ค๊ณ๊ฐ ๋ ๋ฐ๋์งํด ๋ณด์ธ๋ค.
์ต๊ทผ์๋ Next.js๋ฅผ ๊ธฐ๋ฅ ๋ถํ ์ค๊ณ์ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒฝํฅ์ด ์ฆ๊ฐํ๊ณ ์๋ค. Next.js๋ FSD์ ์ ์๋ํ์ง๋ง, ํ์ด์ง์ ํ์ผ ๋ผ์ฐํ ๊ณผ ์ฑ์ ๋ถ์ฌ๋ผ๋ ๋ ๊ฐ์ง ์์ญ์์ ์ถฉ๋์ด ๋ฐ์ํ๋ค.
Next.js์์๋ pages ๋๋ ํ ๋ฆฌ๊ฐ ํ์ผ ๋ผ์ฐํ ์ ๋ด๋นํ๋ฉฐ, ๊ฐ ์ปดํฌ๋ํธ๊ฐ ํ๋์ ๋ผ์ฐํธ๋ฅผ ๋ํ๋ธ๋ค. FSD์์๋ pages๋ ํ์ด์ง๋ค์ ํ๋ฉด ๋ชฉ๋ก์ ๋ด๊ณ ์๋ ๋ ์ด์ด๋ก ์ฌ์ฉ๋๋ค. ์ด๋ก ์ธํด Next.js ํ์ด์ง์ FSD ํ์ด์ง๋ฅผ ์ด๋ป๊ฒ ๊ฒฐํฉํ ์ง์ ๋ํ ์ถฉ๋์ด ๋ฐ์ํ๋ค.
Next.js์ FSD๋ฅผ ํจ๊ป ์ฌ์ฉํ ๋, [root]/pages/ ์ ๊ฐ์ด Next.js ํ์ด์ง๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ๋ฃจํธ์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ด ์๋ค. ๊ทธ๋ฆฌ๊ณ FSD ํ์ด์ง๋ [root]/src/pages/ ์ ๊ฐ์ด src ํด๋ ๋ด์ ์ ์ฅํ๋ค.
๋ค๋ฅธ ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก๋ ๋ ๊ฐ์ ๋๋ ํ ๋ฆฌ๋ฅผ ์ ์งํ๋ ๊ฒ์ด ์๋ค. FSD์ ํ์ด์ง๋ค์ ํ๋ฉด ๋ชฉ๋ก์ ๋ค์ ์ด๋ฆ ์ง์ pages-flat๊ณผ Next.js์ ์ค์ฒฉ๋ ๋ผ์ฐํธ๋ฅผ ์ํ pages์ด๋ค. ์ค์ ํ์ด์ง ์ฝ๋๋ pages-flat์ ์ ์ฅ๋๊ณ , ๊ทธ ํ์ pages๋ก ๋ด๋ณด๋ผ ์ ์๋ค.
ํ๋ ๋๋ Next.js 12๋ฒ์ ์ดํ๋ก๋ ํ์ต์ ํ ์ ์ด ์๊ธฐ์ ์ด ๋ฐฉ๋ฒ์ ๊ณ ๋ ค์ํ ๊ฒ ๊ฐ๋ค.
app ๋ ์ด์ด์ ๋ชจ๋ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ์ Next.js์์ ์ฒ๋ฆฌํ๋ค. ๊ทธ๋ฌ๋ ํ์ด์ง์ ๋ ๋ฆฝ์ ์ผ๋ก ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํด ๋ฌด์ธ๊ฐ๋ฅผ ์คํํด์ผ ํ๋ ๊ฒฝ์ฐ ๋ ์ด์์ ํจํด์ ์ฌ์ฉํ์ฌ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ๋ ์ด์์์ ๋ง๋ค ์ ์๋ค.
app ๋ผ์ฐํฐ๋ฅผ ์ด์ฉํ Next.js์์์ ํจํด์ https://feature-sliced.design/docs/guides/tech/with-nextjs๋ฅผ ์ฐธ๊ณ ํ์.
FSD๋ ๋น๊ต์ ์ ์ ์ํํธ์จ์ด ์ํคํ ์ฒ ๋ฐฉ๋ฒ๋ก ์ด๋ค. ๊ทธ๋ฌ๋ ์ด๋ฏธ ๋ง์ ์ํ, ํํ ํฌ, B2B, ์ ์์๊ฑฐ๋ ๋ฑ ๋ค์ํ ๊ธฐ์ ๋ค์์ ์ฌ์ฉ๋๊ณ ์๋ค.
์ด ์ํคํ ์ฒ์ ์ ์ฌ๋ ฅ์ ๋งค์ฐ ๋๊ฒ ํ๊ฐ๋๋ฉฐ, ์ ์ธ๊ป์ ๋ค์ํ ๋ํ ๊ธฐ์ ๋ค ์ฌ์ด์์ ๋๋ฆฌ ์ฌ์ฉ๋๊ณ ์๋ค. ์ ์ ํ ๋์ ์ด ์ด๋ฃจ์ด์ง๋ค๋ฉด, FSD๋ ํ๋ก ํธ์๋ ๊ฐ๋ฐ ๋ถ์ผ์์ ์ฃผ๋์ ์ธ ์ํคํ ์ฒ ์๋ฃจ์ ์ผ๋ก ์ฑ์ฅํ ์ ์๋ ์ ์ฌ๋ ฅ์ ๊ฐ์ง๊ณ ์๋ค.
- ์ํคํ ์ฒ ๊ตฌ์กฐ ์์๋ฅผ ์ฝ๊ฒ ๊ต์ฒด, ์ถ๊ฐ, ์ ๊ฑฐํ ์ ์๋ค.
- ์ํคํ ์ฒ ํ์คํ
- ํ์ฅ์ฑ
- ๋ฐฉ๋ฒ๋ก ์ ๊ฐ๋ฐ ์คํ๊ณผ ๋ ๋ฆฝ์ ์ด๋ค.
- ์๊ธฐ์น ์์ ๋ถ์์ฉ ์์ด ๋ชจ๋ ๊ฐ์ ์ฐ๊ฒฐ์ด ์ ์ด๋๊ณ ๋ช ์์ ์ด๋ค.
- ์ํคํ ์ฒ ๋ฐฉ๋ฒ๋ก ์ด ๋น์ฆ๋์ค ์งํฅ์ ์ด๋ค.
- ๋ค๋ฅธ ๋ง์ ์ํคํ ์ฒ ์๋ฃจ์ ๋ค์ ๋นํด ๋์ ์ง์ ์ฅ๋ฒฝ์ด ์๋ค.
- ์ธ์, ํ ๋ฌธํ ๋ฐ ๊ฐ๋ ์ค์๊ฐ ํ์ํ๋ค.
- ๋์ ๊ณผ์ ์ ๋ฌธ์ ๋ฅผ ๋์ค์ด ์๋ ์ฆ์ ํด๊ฒฐํด์ผ ํ๋ค. ์ฝ๋ ๋ฌธ์ ์ ๊ฐ๋ ์์ ๋ฒ์ด๋ ๋ถ๋ถ์ ์ฆ์ ํ์ธํ ์ ์๋ค. ๊ทธ๋ฌ๋ ์ด๋ ์ฅ์ ์ผ๋ก๋ ๋ณผ ์ ์๋ค.
๊ธฐ๋ฅ ๋ถํ ์ค๊ณ(FSD)๋ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๊ฐ ์๊ณ ์ฌ์ฉํ ์ ์๋ ํฅ๋ฏธ๋กญ๊ณ ๊ฐ์น ์๋ ๋ฐ๊ฒฌ์ด๋ค. FSD๋ ํ์ ์ ์ฐํ๊ณ ํ์คํ๋๋ฉฐ ํ์ฅ ๊ฐ๋ฅํ ์ํคํ ์ฒ์ ๊ฐ๋ฐ ๋ฌธํ๋ฅผ ์ ๊ณตํ ์ ์๋ค. ํ์ง๋ง ์ด ๋ฐฉ๋ฒ๋ก ์ ๊ธ์ ์ ์ธ ์ธก๋ฉด์ ํ์ฉํ๋ ค๋ฉด ํ ๋ด์์ ์ง์, ์ธ์ ๋ฐ ๊ท์น์ด ํ์ํ๋ค.
FSD๋ ๋ช ํํ ๋น์ฆ๋์ค ์งํฅ์ฑ, ์ํฐํฐ ์ ์, ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ฅ ๋ฐ ์ปดํฌ๋ํธ ๊ตฌ์ฑ๊ณผ ๊ฐ์ ํน์ง๋ค๋ก ์ธํด ๋ค๋ฅธ ์ํคํ ์ฒ๋ค ์ฌ์ด์์ ๋๋ณด์ธ๋ค.
๋ํ ๊ฐ๋ณ์ ์ผ๋ก ํ๋ก์ ํธ์์ FSD๋ฅผ ์ฌ์ฉํ ์ฌ๋ก์, ๊ธฐ๋ฅ ๋ถํ ์ค๊ณ์ ๊ณต์ ๋ฌธ์๋ฅผ ์ ์ดํด๋ณผ ์๋ ์๋ค.