๐ Frontend Masters: Feature-Sliced Design (FSD) Pattern (opens in a new tab)
๐๏ธ ๋ฒ์ญ ๋ ์ง: 2024.07.17
๐ง ๋ฒ์ญํ ํฌ๋ฃจ: ๋ ์(๊น๋ค์)
ํ๋ก ํธ์๋ ๋ง์คํฐ: ๊ธฐ๋ฅ ๋ถํ ๋์์ธ (FSD) ํจํด
๋ณต์กํ ํ๋ก์ ํธ๋ฅผ ๋ง์๋ ํผ์๋ผ๊ณ ์์ํด ๋ณด์ธ์. ๊ธฐ๋ฅ ๋ถํ ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํดํ๊ธฐ ์ํด ํผ์๋ฅผ ํ ์กฐ๊ฐ์ฉ ๋๋ ๋ด ์๋ค. ๊ด๋ฆฌํ๊ธฐ ์ฝ๊ณ ์ ์ง๋ณด์ํ๊ธฐ์๋ ๋ง์์ต๋๋ค! ๐
์ด์ ์ Medium ๊ธ์์ ๋งํ๋ ๋ด์ฉ์ ๋ฐ๋ณตํ๊ฒ ์ต๋๋ค. ์ด ๊ธ์ ๊ธธ์ด์ง ๊ฒ์ด๊ณ (์ ์๋๊ฒ ์ด์? ๐) ์๋ง๋ ์ดํดํ๊ธฐ ์กฐ๊ธ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ํ์ง๋ง ํ ๋ฒ ์ฝ๊ณ ์๋ฒฝํ๊ฒ ์ดํดํ๊ฒ ๋๋ฉด, ์ด์ ๋น์ ์ 10๋ฐฐ ๋ ๋์ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๊ฐ ๋ ๊ฒ์ ๋๋ค. ๐ ์ปคํผ ํ ์ ์ค๋นํ์ธ์. โ๏ธ ์ปคํผ๋ฅผ ์ถฉ๋ถํ ๋ง์์ง ์์ผ๋ฉด 10๋ฐฐ ๊ฐ๋ฐ์๊ฐ ๋๋ ๋ฐ ๋ ์ค๋ ๊ฑธ๋ฆด ๊ฑฐ์์. ๐
์ ๋ ์น ๋ฐ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ฅ ์ธํธ๋ผ๋ ์์ ๋ถ๋ถ์ผ๋ก ๋๋์ด ๊ฐ์ํํ๋ ๊ฒ์ ์ข์ํฉ๋๋ค. ๊ฐ ๊ธฐ๋ฅ ์ธํธ๋ ์์ฒด ์ฌ์ฉ์ ์ธํฐํ์ด์ค, ๋น์ฆ๋์ค ๋ก์ง ๋ฐ ๋ฐ์ดํฐ ๋ ์ด์ด๋ฅผ ๊ฐ์ง๊ณ ์์ด ๊ด๋ฆฌํ๊ธฐ๊ฐ ๋ ์ฝ์ต๋๋ค. ์ด๋ฌํ ๋ฐฉ๋ฒ์ ๊ธฐ๋ฅ ๋ถํ ๋์์ธ (FSD)์ด๋ผ๊ณ ํ๋ฉฐ, ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ ๊ทผ ๋ฐฉ์๊ณผ ์ ์ฌํ ์ฅ์ ์ ๊ณต์ ํฉ๋๋ค. FSD์์ ํนํ ๋์ ๋๋ ์ ์ ์ฌ์ฉ์ ์ค์ฌ ๊ธฐ๋ฅ์ ์ด์ ์ ๋ง์ถฐ ์น ๋ฐ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ๋ถ๋ถ์ผ๋ก ๋ถํดํ ์ ์๋ค๋ ์ ์ ๋๋ค.
๊ตฌ์กฐ
FSD ๋ฐฉ๋ฒ๋ก ์ ์ธ ๊ฐ์ง ์ถ์ํ ์์ค์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค: ๋ ์ด์ด, ์ฌ๋ผ์ด์ค, ๊ทธ๋ฆฌ๊ณ ์ธ๊ทธ๋จผํธ์ ๋๋ค.
๋ ์ด์ด
๋น์ ์ ์ฑ์ ๋ง์๋ ํผ์๋ก ์์ํด ๋ณด์ธ์. ๐ (๋๋ฏธ๋ ธ์์ ์ผํ๋ ๊ฐ๋ฐ์๋ก์ ํผ์ ๋น์ ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ ์์ฐ์ค๋ฌ์ด ๊ถ๋ฆฌ์ ๋๋ค. ๐)
1. ๊ณต์ฉ ๋ ์ด์ด (์๋ฃํ ์ ์ฅ์ค):
- ๋ชจ๋๋ฅผ ์ํ ์ฌ๋ฃ: ์ฌ๋ฌ ์ฌ๋ผ์ด์ค์์ ์ ๊ทผํ ์ ์๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ, ์ ํธ๋ฆฌํฐ, ํ , ๊ทธ๋ฆฌ๊ณ ์๋น์ค๋ฅผ ํฌํจํฉ๋๋ค. (๊ณตํต ์ฌ๋ฃ์ ๋๊ตฌ๋ฅผ ๋ชจ๋๊ฐ ๊ฐ์ ธ๊ฐ ์ ์๋ ๊ณต์ ์ฃผ๋ฐฉ์ด๋ผ๊ณ ์๊ฐํ์ธ์.)
- ์์:
- ๋ฒํผ, ํผ, ๋ชจ๋ฌ, ๋ด๋น๊ฒ์ด์ ๋ฐ์ ๊ฐ์ ๊ณตํต UI ์์ (๋ฏธ๋ฆฌ ์์ง๋ ์ฑ์์ ์น์ฆ๋ฅผ ์๊ฐํ์ธ์)
- ๋ฐ์ดํฐ ํฌ๋งทํ ์ด๋ ๊ฒ์ฆ์ ์ํ ์ ํธ๋ฆฌํฐ ํจ์ (๋ ์นด๋ก์ด ํผ์ ์ปคํฐ์ ๊ฐ์ต๋๋ค)
- Redux, Zustand, Tanstack Query์ ๊ฐ์ ๊ธ๋ก๋ฒ ์ํ ๊ด๋ฆฌ ์๋ฃจ์ (์ผ๊ด์ฑ์ ์ํ ๋ ์ํผ ๋ถ๊ณผ ๊ฐ์ต๋๋ค)
2. ํ๋ก์ธ์ค ๋ ์ด์ด (์ฃผ๋ฐฉ ์ง์):
- ์ด์ฌํ ์ผํ๋ ์ ฐํ๋ค: ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ๊ณผ ๋ฐ์ดํฐ ํ์นญ์ ์ฒ๋ฆฌํ์ฌ ํผ์ ์ฃผ๋ฐฉ์ด ์ํํ๊ฒ ์ด์๋๋๋ก ํฉ๋๋ค. (๋ฐ์ฃฝ, ์์ค, ํ ํ์ ์ค๋นํ๊ณ ๋ฒ ์ดํน ๊ณผ์ ์ ์กฐ์จํ๋ ํผ์ ์ ฐํ๋ค์ ์๊ฐํ์ธ์.)
- ์์:
- ์จ๋ผ์ธ ์์คํ ์์ ํผ์ ์ฃผ๋ฌธ์ ๊ฐ์ ธ์ค๊ธฐ
- ํผ์๊ฐ ์ค๋น๋์์ ๋ ์๋ฆผ ๋ณด๋ด๊ธฐ
- ๋ฐฐ๋ฌ ๊ธฐ์ฌ์ ๋ฐ์ดํฐ ๋๊ธฐํํ๊ธฐ
3. ๊ธฐ๋ฅ ๋ ์ด์ด (ํผ์ ์ฌ๋ผ์ด์ค):
- ๋ ๋ฆฝ์ ์ด๊ณ ์๊ธ์์กฑ: ๊ฐ ์ฌ๋ผ์ด์ค๋ ํน์ ๊ธฐ๋ฅ์ ์บก์ํํ๋ฉฐ, ๊ณ ์ ์ UI, ๋ก์ง, ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋ง์น ๊ฐ๋ณ ํ ํ์ด ์๋ ํผ์ ์ฌ๋ผ์ด์ค์ ๊ฐ์ต๋๋ค.
- ์์:
- "ํผ์ ์ฃผ๋ฌธ" ์ฌ๋ผ์ด์ค: ํผ์ ์ ํ, ๋ง์ถค ์ค์ ๋ฐ ๊ฒฐ์ ๋ฅผ ์ฒ๋ฆฌ (ํํผ๋ก๋, ๋ฒ์ฏ, ์ถ๊ฐ ์น์ฆ, ์์พ -์์์ง- ๋ฑ๋ฑ)
- "์ฃผ๋ฌธ ์ถ์ " ์ฌ๋ผ์ด์ค: ์ฃผ๋ฌธ ์ํ์ ์์ ๋ฐฐ๋ฌ ์๊ฐ์ ํ์ (ํผ์ ์ถ์ ๊ธฐ์ ๊ฐ์)
- "ํผ์ ๋ฆฌ๋ทฐ" ์ฌ๋ผ์ด์ค: ๊ณ ๊ฐ์ด ๊ฒฝํ์ ํ๊ฐํ๊ณ ๋๊ธ์ ๋ฌ ์ ์๋๋ก ํจ (์ ฐํ๋ฅผ ์ํ ํผ๋๋ฐฑ ์์)
4. ์ฑ ๋ ์ด์ด (ํผ์ ์ ฐํ):
- ์ด์ฃผ๋ฐฉ์ฅ: ์ ์ฒด ํผ์ ์ ์ ์์ ์ ๊ฐ๋ ํ๋ฉฐ, ์ด๋ค ์ฌ๋ผ์ด์ค๋ฅผ ๊ตฌ์ธ์ง, ๊ณ ๊ฐ์๊ฒ ์ด๋ป๊ฒ ์ ๊ณตํ ์ง๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. (๋ฉ๋ด๋ฅผ ์ค๊ณํ๊ณ , ์๋ก์ด ๋ ์ํผ๋ฅผ ๋ง๋ค๋ฉฐ, ๊ฐ ํผ์๊ฐ ์๋ฒฝํ๊ฒ ์๋ฆฌ๋๋๋ก ๋ณด์ฅํ๋ ๋ง์คํฐ ์ ฐํ๋ฅผ ์๊ฐํ์ธ์.)
5. ํ์ด์ง ๋ ์ด์ด (ํผ์ ์ง์ด):
- ์ฌ๋ผ์ด์ค๋ฅผ ๋ฐฐ์ด: ์ฌ๋ผ์ด์ค๋ฅผ ์๋ฏธ ์๋ ํ์ด์ง ๋ ์ด์์์ผ๋ก ๊ตฌ์ฑํ์ฌ ํผ์ ์ฌ๋ผ์ด์ค๋ฅผ ์ ์๋ ๋ฐฐ๋ฌ ์์์ ๋ฐฐ์ดํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
- ์์:
- ํํ์ด์ง: "์ถ์ฒ ํผ์"์ "์ฃผ๋ฌธ ๋ด์ญ" ์ฌ๋ผ์ด์ค๋ฅผ ๊ฒฐํฉ
- ๋ด ๊ณ์ : "๊ฐ์ธ ์ ๋ณด"์ "์ฃผ๋ฌธ ์ ํธ ์ค์ " ์ฌ๋ผ์ด์ค๋ฅผ ํฌํจ
6. ์์ ฏ ๋ ์ด์ด (ํฅ์ ๋ฃ):
- ์ ํ์ ๋ง ๊ฐํ์ : ์ฌ๋ผ์ด์ค๋ ํ์ด์ง/ํ๋ฉด ์ ์ฒด์ ๋ฟ๋ฆด ์ ์๋ ์๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ UI ์ปดํฌ๋ํธ๋ก, ํผ์์ ์ถ๊ฐ ์๋ ์ ๋ํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
- ์์:
- ๊ฒ์์ฐฝ (์ข์ํ๋ ํผ์๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ๊ธฐ ์ํด)
- ์ฌ์ฉ์ ์๋ฆผ ํจ๋ (ํผ์๊ฐ ์ค๋น๋์์ ๋ ์๋ฆผ)
- ๋ชจ๋ฌ ๋ํ์์ (ํน๋ณ ์์ฒญ์ด๋ ํ์ธ์ ์ํด)
5. ์ํฐํฐ ๋ ์ด์ด (์์ฌ๋ฃ):
- ๋ฐ์ดํฐ์ ๊ตฌ์ฑ ์์: ํผ์์ ๋ฐ๊ฐ๋ฃจ, ์ด์คํธ, ํ ํ๊ณผ ๊ฐ์ ํต์ฌ ๋น์ฆ๋์ค ์ํฐํฐ๋ฅผ ๋ํ๋ ๋๋ค.
- ์์:
- ์ฌ์ฉ์ ์ํฐํฐ (๊ณ ๊ฐ ์ ๋ณด๋ฅผ ์ ์ฅ)
- ํผ์ ์ํฐํฐ (ํผ์ ์ข ๋ฅ์ ์ฌ๋ฃ ์ ์)
- ์ฃผ๋ฌธ ์ํฐํฐ (์ฃผ๋ฌธ ์ ๋ณด๋ฅผ ์ถ์ )
๊ธฐ์ตํด์ผ ํ ์ฃผ์ ์ฌํญ:
- ๊ฐ ๋ ์ด์ด๋ ๋ช ํํ ์ฑ ์๊ณผ ์์กด์ฑ ๋ฐฉํฅ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- ์ฌ๋ผ์ด์ค๋ ํผ์ ์ฌ๋ผ์ด์ค๊ฐ ๊ณตํต ํฌ๋ฌ์คํธ๋ฅผ ๊ณต์ ํ๋ ๊ฒ์ฒ๋ผ ์ ์ ์๋ ๊ณ์ฝ์ ํตํด ์๋ก ์ํตํ ์ ์์ต๋๋ค.
- ๋ชฉํ๋ ๋ชจ๋ํ๋๊ณ ๋ ๋ฆฝ์ ์ด๋ฉฐ ์ฝ๊ฒ ํ ์คํธํ ์ ์๋ ์ฌ๋ผ์ด์ค๋ฅผ ๋ง๋ค์ด "ํผ์" ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๋ ๊ด๋ฆฌํ๊ธฐ ์ฝ๊ณ ๋ง์๊ฒ ๋ง๋๋ ๊ฒ์ ๋๋ค!
์ถ๊ฐ ํผ์ ๋น์ ๋ ธํธ:
- ์ฃผ๋ฐฉ ์ง์(ํ๋ก์ธ์ค)์ ๋ฌด๋ ๋ค์์ ์ผํ๋ฉฐ, ์ฌ๋ฃ๋ฅผ ์ค๋นํ๊ณ ์ํํ ํผ์ ์ ์ ๊ณผ์ ์ ๋ณด์ฅํฉ๋๋ค.
- ํผ์ ์ ฐํ(์ฑ)๋ ๋ชจ๋ ์์ ์ ์ด๊ดํ๋ฉฐ, ๋ค์ํ ํผ์(๊ธฐ๋ฅ)๋ฅผ ์ฐฝ์กฐํ๊ณ ์ด๋ฅผ ์ด๋ป๊ฒ ์ ๊ณตํ ์ง(ํ์ด์ง)๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
- ์์ฌ๋ฃ(์ํฐํฐ)๋ ์ด๋ค ํผ์์๋ ํ์์ ์ด์ง๋ง, ๊ณ ๊ฐ์๊ฒ ํญ์ ๋ณด์ด๋ ๊ฒ์ ์๋๋๋ค. ์ด๋ค์ ๋ชจ๋ ๊ฒ์ ๊ฐ๋ฅํ๊ฒ ๋ง๋๋ ๊ธฐ์ด์ ๋๋ค.
์ธ๊ทธ๋จผํธ (ํ ํ):
- ์ฌ๋ผ์ด์ค ๋ด์ ์ฌ๋ฃ: ์ฌ๋ผ์ด์ค๊ฐ ์์ ํ ๊ธฐ๋ฅ์ด๋ผ๋ฉด, ๊ทธ๊ฒ์ ์ข ์ข ์ธ๊ทธ๋จผํธ๋ผ๊ณ ๋ถ๋ฆฌ๋ ์์ ๋ถ๋ถ๋ค๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์ด๋ ํผ์ ์ฌ๋ผ์ด์ค๋ฅผ ๊ตฌ์ฑํ๋ ๊ฐ๋ณ ํ ํ๊ณผ ๊ฐ์ต๋๋ค.
- ํน์ ์์ ์ ์ง์ค: ๊ฐ ์ธ๊ทธ๋จผํธ๋ ์ฌ๋ผ์ด์ค ๋ด์์ ๋ช ํํ ์ฑ ์์ ๊ฐ์ง๋ฉฐ, ํน์ UI ์์, ๋ฐ์ดํฐ ์์ , ๋๋ ๋ก์ง์ ์ฒ๋ฆฌํฉ๋๋ค.
- ์์:
- "ํผ์ ์ฃผ๋ฌธ" ์ฌ๋ผ์ด์ค ๋ด์์:
- "ํผ์ ๋ฉ๋ด" ์ธ๊ทธ๋จผํธ: ์ฌ์ฉ ๊ฐ๋ฅํ ํผ์ ์ต์ ๊ณผ ๊ฐ๊ฒฉ์ ํ์ํฉ๋๋ค.
- "ํ ํ ์ ํ๊ธฐ" ์ธ๊ทธ๋จผํธ: ๊ณ ๊ฐ์ด ์ํ๋ ํ ํ์ ์ ํํ ์ ์๋๋ก ํฉ๋๋ค.
- "๊ฒฐ์ ์์" ์ธ๊ทธ๋จผํธ: ๊ฒฐ์ ๋ฐ ๋ฐฐ๋ฌ ์ ๋ณด๋ฅผ ์์งํฉ๋๋ค.
๋ React ์ค๋ฝ๊ฒ:
๊ฐ ์ฌ๋ผ์ด์ค๋ ๋ค์ ์ธ๊ทธ๋จผํธ ์ค ํ๋ ๋๋ ์ฌ๋ฌ ๊ฐ๋ก ๋๋ฉ๋๋ค:
ui/:
์ฌ์ฉ์ ์ธํฐํ์ด์ค ์ปดํฌ๋ํธ ๋ฐ UI ๊ด๋ จ ๋ก์งmodel/:
๋น์ฆ๋์ค ๋ก์ง (์คํ ์ด, ์ก์ , ์ดํํธ, ๋ฆฌ๋์ ๋ฑ)lib/:
์ธํ๋ผ ๋ก์ง (์ ํธ๋ฆฌํฐ/ํฌํผ)config/:
๋ก์ปฌ ๊ตฌ์ฑ (์์, ์ด๊ฑฐํ, ๋ฉํ ์ ๋ณด)api/:
API ์์ฒญ ๋ก์ง (API ์ธ์คํด์ค, ์์ฒญ ๋ฑ)
๊ธฐ์ตํด์ผ ํ ์ฃผ์ ์ฌํญ:
- ์ฌ๋ผ์ด์ค๋ ๋ ํฌ๊ณ ์๊ธ์์กฑํ๋ ๊ธฐ๋ฅ์ด๋ฉฐ, ์ธ๊ทธ๋จผํธ๋ ์ฌ๋ผ์ด์ค ๋ด์ ๋ ์๊ณ ์ง์ค๋ ๋ถ๋ถ์ ๋๋ค.
- ๊ฐ ์ฌ๋ผ์ด์ค๋ ์ฌ๋ฌ ์ธ๊ทธ๋จผํธ๋ฅผ ๊ฐ์ง ์ ์์ผ๋ฉฐ, ์ด๋ ํผ์ ์ฌ๋ผ์ด์ค๊ฐ ๋ค์ํ ํ ํ์ ๊ฐ์ง ์ ์๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
- ๋ชฉํ๋ ์ ์กฐ์ง๋ ๋ชจ๋ํ ์ฝ๋๋ฅผ ๋ง๋ค์ด ์ดํดํ๊ณ ๊ฐ๋ฐํ๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ฝ๊ฒ ํ๋ ๊ฒ์ ๋๋ค. ๋ง์น ํผ์์ ๊ฐ๊ธฐ ๋ค๋ฅธ ๋ง์ ๋ํ๋ ์๋ฆ๋ต๊ฒ ๋ฐฐ์ด๋ ํ ํ์ฒ๋ผ ๋ง์ด์ฃ !
์ง๊ธ๊น์ง ์ฝ์ ๋ด์ฉ์ ์์ ์ฝ๋๋ก ํํํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
1. ํด๋ ๊ตฌ์กฐ(ํผ์ ์ฃผ๋ฐฉ)
2. ํผ์ ์ฃผ๋ฌธ ์ฌ๋ผ์ด์ค(์์คํธ๋ผ๋ฐ๊ฐ์ (opens in a new tab))
// features/order-pizza/slice.tsx
import React from 'react';
interface OrderPizzaSliceProps {
// ... props
}
const OrderPizzaSlice: React.FC<OrderPizzaSliceProps> = (
{
/* ...props */
}
) => {
// ... ์ฌ๋ผ์ด์ค ๋ก์ง๊ณผ ์ํ ๊ด๋ฆฌ
return (
<div>
<PizzaMenu />
<ToppingSelector />
<CheckoutForm />
</div>
);
};
export default OrderPizzaSlice;
3. ํผ์ ๋ฉ๋ด ์ธ๊ทธ๋จผํธ(๋์ฐ ๋ฒ ์ด์ค)
// features/order-pizza/components/PizzaMenu.tsx
import React from 'react';
interface PizzaMenuProps {
// ... ํผ์ ์ต์
๋ค
}
const PizzaMenu: React.FC<PizzaMenuProps> = (
{
/* ...props */
}
) => {
// ... ํผ์ ์ต์
์ fetchํ๊ณ ํ๋ฉด์ ๊ทธ๋ฆฌ๊ธฐ
return <ul>{/* List of pizza options */}</ul>;
};
export default PizzaMenu;
4. ํํ์ด์ง (ํผ์ ์ง์ด๋):
Feature-Sliced Design (FSD)์ ํผ์๋ฅผ ๊น๋ํ๊ฒ ๊ฐ๋ณ ์กฐ๊ฐ์ผ๋ก ๋๋์ด ๊ฐ ์กฐ๊ฐ์ด ๊ณ ์ ์ ํ ํ๊ณผ ๋ง์ ๊ฐ์ง๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฅ์ ๊ณผ ๋จ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
// pages/HomePage.tsx
import React from 'react';
import OrderPizzaSlice from '../features/order-pizza/slice';
const HomePage: React.FC = () => {
return (
<div>
<h1>Welcome to Domino's Pizza!</h1>
<OrderPizzaSlice />
</div>
);
};
export default HomePage;
์ฝ๋์์ ์ป์ด์ผ ํ ์ฃผ์ ๋ด์ฉ:
- ๋ช ํํ ํด๋ ๊ตฌ์กฐ: ๊ฐ ์ฌ๋ผ์ด์ค๋ ๊ณ ์ ์ ํด๋๋ฅผ ๊ฐ์ง๊ณ ์์ด ๊ทธ ์์ ์ปดํฌ๋ํธ์ ๋ก์ง์ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค.
- ๋ ๋ฆฝ์ ์ธ ์ฌ๋ผ์ด์ค: ๊ฐ ์ฌ๋ผ์ด์ค๋ ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐ๋๊ณ ํ ์คํธ๋ ์ ์์ผ๋ฉฐ, ์๊ธ์์กฑํ๋ ํผ์์ ๊ฐ์ต๋๋ค.
- ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ: ๊ณตํต ์ปดํฌ๋ํธ(๋ฒํผ, ์ ๋ ฅ๋ ๋ฑ)๋ ์ผ๊ด์ฑ๊ณผ ํจ์จ์ฑ์ ์ํด ์ฌ๋ฌ ์ฌ๋ผ์ด์ค์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ํ์ด์ง ๋ด ๊ตฌ์ฑ: ํ์ด์ง๋ ์ฌ๋ผ์ด์ค๋ฅผ ๊ฒฐํฉํ์ฌ ์๋ฏธ ์๋ ๋ ์ด์์์ ๋ง๋๋๋ฐ, ์ด๋ ํผ์ ์ฌ๋ผ์ด์ค๋ฅผ ์ ์์ ๋ฐฐ์ดํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
- ๊ธฐ์ตํ์ธ์: ์ด๊ฒ์ ๋จ์ํ๋ ์์ ์ ๋๋ค. ์ค์ FSD๋ ๋ ๋ณต์กํ ์ํ ๊ด๋ฆฌ, ๋ฐ์ดํฐ ํ์นญ ๋ฐ ์ฌ๋ผ์ด์ค ๊ฐ์ ํต์ ์ ํฌํจํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด ์์ ๋ FSD๋ฅผ ์ฌ์ฉํ์ฌ React ์ฑ์ ์กฐ์งํ๋ ํต์ฌ ์์น์ ๋ณด์ฌ์ค๋๋ค.
์ข์ ์ (ํ ํ ๋ถ๋ถ): ๐
- ๊ด๋ฆฌ ์ฉ์ด: ๊ฐ๊ฐ์ ๊ธฐ๋ฅ์ด ๋ ๋ฆฝ์ ์ธ ํผ์ ์กฐ๊ฐ์ฒ๋ผ ์๊ธ์์กฑํ์ฌ, ์ฝ๋๋ฅผ ์ดํดํ๊ณ , ์์ ํ๊ณ , ์ ๋ฐ์ดํธํ๊ธฐ ์ฝ์ต๋๋ค. ํ๋์ ๋ถ๋ถ์ ๋ณ๊ฒฝํ ๋ ๋๋ฏธ๋ ธ ํจ๊ณผ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค!
- ํ์ฅ์ฑ: ๋ ๋ง์ ๊ธฐ๋ฅ์ด ํ์ํ์ ๊ฐ์? ๊ทธ๋ฅ ์ฌ๋ผ์ด์ค๋ฅผ ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค! FSD๋ ์ฑ์ด ์๋ก์ด ์๊ตฌ์ ๋ง๊ฒ ์ฐ์ํ๊ฒ ์ฑ์ฅํ ์ ์๋๋ก ๋์์ค๋๋ค. ๋ง์น ์ฑ์ ํผ์์ ํํผ๋ก๋๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ฒ๋ผ์.
- ๋น ๋ฅธ ๊ฐ๋ฐ: ์๋ก ๋ค๋ฅธ ํ์ด ๋์์ ๋ณ๋์ ์ฌ๋ผ์ด์ค๋ฅผ ์์ ํ ์ ์์ด ๊ฐ๋ฐ ์๋๊ฐ ๋นจ๋ผ์ง๋๋ค. ๋ง์น ์ฌ๋ฌ ์ ฐํ๊ฐ ๋์์ ํผ์๋ฅผ ๋ง๋๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
- ๋ช ํํ ์์ ๊ถ: ๊ฐ ์ฌ๋ผ์ด์ค์๋ ์ง์ ๋ "ํผ์์ด์ฌ๋ก(pizzaiolo)"๊ฐ ์์ด, ๊ฐ๋ฐ์๊ฐ ๊ทธ ์ฌ๋ผ์ด์ค์ ํ์ง๊ณผ ์ฑ๋ฅ์ ๋ํด ์ฑ ์์ ์ง๋๋ค. ์ด๋ ๊ฐ ์ ฐํ๊ฐ ์์ ์ ์ฐฝ์๋ฌผ์ ์๋ถ์ฌ์ ๊ฐ๋ ๊ฒ๊ณผ ๋น์ทํฉ๋๋ค.
- ํ ์คํธ ์ฉ์ด: ํ ์คํธ๋ ๊ฐ๊ฐ์ ์ฌ๋ผ์ด์ค๊ฐ ์ ์ต์๋์ง ํ์ธํ๋ ๊ฒ์ฒ๋ผ ๋ ์ง์ค์ ์ด๊ณ ํจ์จ์ ์ผ๋ก ์ํ๋ฉ๋๋ค.
์ข์ง ์์ ์ (ํฌ๋ฌ์คํธ): ๐๐ป
- ๊ณํ์ ์ด๋ ค์: ์ฌ๋ผ์ด์ค๊ฐ ์ํํ๊ฒ ์๋ํ๋ ค๋ฉด ์ ๋ง๋ฌผ๋ ค์ผ ํฉ๋๋ค. ์ด๋ ์น์ฆ๊ฐ ํ๋ฌ๋ด๋ฆฌ์ง ์๋๋ก ์กฐ๊ฐ๋ค์ ์ ๋ง์ถ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. ํผ์ ๋ํผ๋์ ํผํ๊ธฐ ์ํด ์ ์คํ ๊ณํ๊ณผ ์ํต์ด ์ค์ํฉ๋๋ค.
- ํ์ต ๊ณก์ : ์๋ก์ด ์ฌ๋๋ค์ด "ํผ์"์ ๋ถ์ฐ๋ ํน์ฑ์ ์ฒ์์๋ ํผ๋์ค๋ฌ์ธ ์ ์์ต๋๋ค. ํ์ธ์ ํ ์กฐ๊ฐ์ ์ด๋์ ์ฐพ์์ง ์์๋ด๋ ๊ฒ๊ณผ ๋น์ทํฉ๋๋ค. ์ด๋ค์ ์๋ดํ๊ธฐ ์ํด ์ข์ ๋ฌธ์ํ๊ฐ ํ์์ ์ ๋๋ค.
- ํ์ํฌ์ ์ถ๊ฐ์ ์ธ ๋ ธ๋ ฅ: ์ฌ๋ผ์ด์ค ๊ฐ์ ์ํํ ์ํต๊ณผ ์ฐ๊ฒฐ์ ๋ณด์ฅํ๋ ๋ฐ๋ ์๊ฐ๊ณผ ์ฃผ์๊ฐ ํ์ํฉ๋๋ค. ์ด๋ ์ ฐํ๋ค์ด ์๋ฒฝํ ํผ์๋ฅผ ํจ๊ป ๋ง๋๋ ๊ฒ์ ์กฐ์จํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
- ์ ์ฌ์ ์ธ ์ค๋ณต: ๋๋๋ก ๋ ์ฌ๋ผ์ด์ค๊ฐ ๋น์ทํ ์ฌ๋ฃ๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ชจ์ฐจ๋ ๋ผ์ ๋ฆฌ์ฝํ๋ฅผ ๋ชจ๋ ์ฌ์ฉํ๋ ๊ฒ์ฒ๋ผ์. ๋ถํ์ํ ์ค๋ณต์ ํผํ๊ธฐ ์ํด ์ ์คํ ๊ณํ๊ณผ ๊ณต์ ์์์ด ํ์ํฉ๋๋ค.
- ๋๊ตฌ์ ํ๊ณ: FSD๋ ์์ง ๋น๊ต์ ์๋ก์ด ๊ฐ๋ ์ด์ด์, ์ด๋ฅผ ์ํด ํน๋ณํ ์ค๊ณ๋ ๋๊ตฌ๋ฅผ ์ฐพ๋ ๊ฒ์ด ์ ๋์ฝ ๋ชจ์์ ํผ์ ์ปคํฐ๋ฅผ ์ฐพ๋ ๊ฒ์ฒ๋ผ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ์ฒ์์๋ ์ถ๊ฐ์ ์ธ ๋ ธ๋ ฅ์ด ํ์ํ ์ ์์ต๋๋ค.
์ ๋ฆฌ
FSD๋ ํฌ๊ณ ๋ณต์กํ ์ฑ์ ํ๋ฅญํ ์ ๋ต์ด ๋ ์ ์์ง๋ง, ๋ชจ๋ ํ๋ก์ ํธ์ ๋ง๋ ๋ง๋ฅ ๋ ์ํผ๋ ์๋๋๋ค. ํ๋ก์ ํธ์ ํฌ๊ธฐ, ํ, ๊ฐ๋ฐ ํ๊ฒฝ์ ๊ณ ๋ คํ ํ ๋์ ์ ๊ฒฐ์ ํ์ธ์. ๊ฐ์ฅ ๋ง์๋ ํผ์๋ ์ ์ ํ ๊ธฐ์ ๊ณผ ์ฌ๋ฃ๊ฐ ์์ผ๋ฉด ๋ง๋ค๊ธฐ ์ด๋ ค์ธ ์ ์๋ค๋ ์ ์ ๊ธฐ์ตํ์ธ์!
์ ์ํ ์ : ๊ฒฝํ ์์ค์ ์๊ด์์ด ๊น์ด ์๊ฒ ํ๊ตฌํ๊ณ ์ถ๋ค๋ฉด, ์ ๊ฐ ์์ฃผ ์ฐธ๊ณ ํ๋ ๊ณต์ ๋ฌธ์ (opens in a new tab)๋ฅผ ์ดํด๋ณด์ธ์.
์ด ๊ธฐ์ฌ๋ฅผ ์ฆ๊ฒ๊ฒ ์ฝ์ผ์ จ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ์ด ๊ธฐ์ฌ๊ฐ ์ ์ตํ๊ฑฐ๋ ๋์์ด ๋์๋ค๋ฉด, ์ปคํผ ํ ์ ์ฌ์ฃผ๋ฉฐ ์ ์์ ์ ์ง์ํ๋ ๊ฒ์ ๊ณ ๋ คํด ์ฃผ์ธ์. ์ฌ๋ฌ๋ถ์ ๊ธฐ์ฌ๋ ์ด๋ฐ ์ฝํ ์ธ ๋ฅผ ๋ ๋ง์ด ๋ง๋๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ๊ฐ์ ์ปคํผ๋ก ์ ๋ฅผ ๋์ ํ๋ ค๋ฉด ์ฌ๊ธฐ๋ฅผ ํด๋ฆญํ์ธ์ โ๏ธ. ํดํผ ํดํน! ๐