๐ ๊ตฌ์ถ ํ๋ก์ ํธ๋ฅผ ์ํ ์ปดํฌ๋ํธ & ์คํ์ผ ์ค๊ณ ์ ๋ต์
๐ ๋ชฉ์ฐจ
- ๊ฐ์ ์์ฝ
- ๋ฌธ์ ์ ์ ๋ฐ ๋
ผ์ ๋ชฉ์
- ์ค๋ฌด์์ ๋ง์ฃผ์น ์ฃผ์ ๊ณผ์ ๋ค
- ํด๊ฒฐ์ ์ํ ์ ๋ต ์ ๋ฆฌ
- 4.1 ์คํ์ผ vs ์ปดํฌ๋ํธ ๋ถ๋ฆฌ ์ฒดํฌ๋ฆฌ์คํธ
- 4.2 DDC ํด๋ ๊ตฌ์กฐ ์ ์ (core/ui ๊ธฐ๋ฐ)
- ์ถ์ฒ ๋ฐฉ์ ์ ๋ฆฌ
- ์ค๋ฌด ์ ์ฉ ๊ธฐ์ค ์์ฝ
- ๊ฒฐ๋ก ๋ฐ ํฅํ ๋์
๐งญ 1. ๊ฐ์ ์์ฝ
์ด ๋ฌธ์๋ ๋จ๊ธฐ ๊ตฌ์ถํ ํ๋ก์ ํธ์์ ๋ค์ ๋ ๊ฐ์ง ์ค์ฌ์ถ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฌด ์ค๊ณ ์ ๋ต์ ์ ๋ฆฌํ ๊ฒ์ด๋ค:
- UI ์ฌ์ฌ์ฉ์ ์ํ ์ปดํฌ๋ํธ์ CSS์ ์ด์์ ๋ถ๋ฆฌ ๊ธฐ์ค
- ํ์ค์ ์ธ ํ๋ก์ ํธ ์๋์ ์ ์ง๋ณด์ ๊ฐ๋ฅ์ฑ์ ๊ณ ๋ คํ ํด๋ ๊ตฌ์กฐ ๋ฐ ์ค๊ณ ๋ฐฉ์
๐ฏ 2. ๋ฌธ์ ์ ์ ๋ฐ ๋
ผ์ ๋ชฉ์
๐ ๋ชฉ์
- ์ฌ์ฌ์ฉ์ฑ๊ณผ ํ์ฅ์ฑ์ ๊ณ ๋ คํ ์ด์์ ์ธ ์ปดํฌ๋ํธ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ถ ํ๋ก์ ํธ์์ ์ด๋๊น์ง ์ถ๊ตฌํด์ผ ํ๋๊ฐ?
- ์คํ์ผ์ ์ฌ์ฌ์ฉํ๊ธฐ ์ํด ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌํ๋ ๊ฒ์ด ๊ณผ์ฐ ํฉ๋ฆฌ์ ์ธ๊ฐ?
- ์คํ์ผ์ด ์ปดํฌ๋ํธ์ ๊ฒฐํฉ๋ ๊ฒฝ์ฐ ์ ์ง๋ณด์์ฑ์ ์ด๋ป๊ฒ ํ๋ณดํ ์ ์๋๊ฐ?
โ 3. ์ค๋ฌด์์ ๋ง์ฃผ์น ์ฃผ์ ๊ณผ์ ๋ค
| ๊ณ ๋ฏผ ์ฌ๋ก |
์ค๋ช
|
๋ฐ์ ์์ธ |
| ์ํ๋ฆฌ์คํธ ์คํ์ผ ์ฌ์ฌ์ฉ |
์ฌ๋ฌ ํ๋ฉด์์ ๊ฐ์ ๋ ์ด์์์ ๋ณต๋ถ, ํด๋์ค ์์ ๋๋ฝ ์ UI ๊นจ์ง |
CSS ๊ธฐ์ต ์์กด, ๋ฌธ์ ๋ถ์ฌ |
| ์ ํธ ๋ฒํผ ์คํ์ผ์ ๋ณต๋ถ ์ฌ์ฉ |
btn-primary, btn-lg ๋ฑ ์ถ์ํ๋ ๋์ด ์์ผ๋, hover ์๋ง๋ค ๋ค๋ฆ |
UI ์๋ฏธ์ ํด๋์ค ๋ช
์ด ๋งคํ๋์ง ์์ |
| ๊ฐ๋ฐ์๋ง๋ค DOM ๊ตฌ์กฐ ๊ตฌ์ฑ ๋ค๋ฆ |
๊ฐ์ ์นด๋๋ผ๋ ๋๋ฝ/๊ณผ์ ๊ตฌ์กฐ๊ฐ ์๊น |
๊ตฌ์กฐ ์บก์ํ ๋ถ์ฌ |
| ๋ฆฌํฉํ ๋ง ์ ๊ตฌ์กฐ ๋ณ๊ฒฝ ํ๊ธ |
UI๊ฐ CSS ๊ธฐ๋ฐ์ผ ๊ฒฝ์ฐ DOM ๋ฐ๋๋ฉด ์ ๋ฉด ์์ ํ์ |
๊ตฌ์กฐ-์คํ์ผ ๋ถ๋ฆฌ ์คํจ |
| ์คํ์ผ๋ง ํ์ํ์ง๋ง ์ปดํฌ๋ํธํ๋จ |
๋จ์ ํ์ดํ/์น์
์ธ๋ฐ๋ ์ปดํฌ๋ํธํ |
๊ธฐ์ค ์๋ ๋ถ๋ฆฌ |
| ๊ธฐ์ต ์์กด |
3๊ฐ์ ๋ค class ์กฐํฉ, ์์, ๊ตฌ์กฐ ๋ฑ ์์ |
๋ฌธ์ํ ๋ฏธํก, ์บก์ํ ๋ถ์กฑ |
๐ 4. ํด๊ฒฐ์ ์ํ ์ ๋ต ์ ๋ฆฌ
4.1 ์คํ์ผ vs ์ปดํฌ๋ํธ ๋ถ๋ฆฌ ์ฒดํฌ๋ฆฌ์คํธ
| ํญ๋ชฉ |
CSS ์กฐ๋ฆฝ(์คํ์ผ ๋ถ๋ฆฌ) |
์ปดํฌ๋ํธ ๋ถ๋ฆฌ |
| DOM ๊ตฌ์กฐ ๋ณต์ก๋ |
๋จ์ |
3๋จ ์ด์ ์ค์ฒฉ |
| ์ํ ์ ์ด ์ฌ๋ถ |
์์ |
์์ (hover, loading, skeleton ๋ฑ) |
| ๋ฐ๋ณต ์ฌ์ฌ์ฉ ๋น๋ |
๋ฎ์ |
๋์ |
| ์กฐ๋ฆฝ ์ ์ค์ ๊ฐ๋ฅ์ฑ |
๋์ (์์, ํด๋์ค ๋๋ฝ) |
๋ฎ์ |
| ๋ฌธ์ํ ํ์์ฑ |
๋์ (class ๊ธฐ์ต ํ์) |
๋ฎ์ (์ปดํฌ๋ํธ ์ถ์ํ) |
| ๋์์ด๋ โ ๊ฐ๋ฐ์ ์ ๋ฌ ํจ์จ์ฑ |
๋ฎ์ |
๋์ |
| ๋์์ธ ๋ณ๊ฒฝ ์ ์ํฅ ๋ฒ์ |
์ ์ญ์ (ํด๋์ค ์ฌ์ ์) |
๊ตญ์ง์ (์ปดํฌ๋ํธ ๋ด๋ถ๋ง ์์ ) |
| ๋จ๊ธฐ ๊ตฌ์ถ์ ์ ํฉ |
๋ถ๋ถ์ ์ผ๋ก |
๊ตฌ์กฐ ๊ณ ์ ์ ์ ๋ฆฌ |
4.2 DDC ํด๋ ๊ตฌ์กฐ ์ ์ (core/ui ๊ธฐ๋ฐ)
/src
โโโ components/
โ โโโ core/
โ โ โโโ Button/
โ โ โ โโโ Button.tsx
โ โ โ โโโ Button.module.css
โ โ โ โโโ index.ts
โ โ โโโ Input/
โ โ โโโ Input.tsx
โ โ โโโ Input.module.css
โ โ โโโ index.ts
โ โโโ ui/
โ โโโ ProductCard/
โ โ โโโ ProductCard.tsx
โ โ โโโ ProductCard.module.css
โ โ โโโ index.ts
โ โโโ ProductList/
โ โโโ ProductList.tsx
โ โโโ ProductList.module.css
โโโ styles/
โโโ tokens.css
โโโ mixins.css
โโโ globals.css
๐ฅ 5. ์ถ์ฒ ๋ฐฉ์ ์ ๋ฆฌ
- ์คํ์ผ๋ง ์กด์ฌํ๋ ๊ตฌ์กฐ๋ ์ฅ๊ธฐ์ ์ ๋ขฐ์ฑ ํ๋ณด์ ์คํจํจ โ ๊ตฌ์กฐ๋ฅผ ๋ชจ๋ฅด๋ฉด class๋ฅผ ์๋ชป ์กฐํฉํ ๊ฐ๋ฅ์ฑ ๋์
- UI ์ปดํฌ๋ํธ๋ ์ฌ์ฌ์ฉ ๋ชฉ์ ์ด ์๋, "์กฐ๋ฆฝ์ ๋จ์ํํ๊ณ ๋ฌธ์ํ๋ฅผ ์๋ํํ๋ ๋ชฉ์ "์ผ๋ก ํ์
components/core์ components/ui๋ ๋ชฉ์ , ์ฌ์ฌ์ฉ ๋ฒ์, ์ค๊ณ ์์ค์ด ๋ช
ํํ ๋ค๋ฅด๋ฏ๋ก ๋ฐ๋์ ๋ถ๋ฆฌ
โ
6. ์ค๋ฌด ์ ์ฉ ๊ธฐ์ค ์์ฝ
| ๋ถ๋ฅ |
์ ์ฉ ๊ธฐ์ค |
์์ |
| core ์ปดํฌ๋ํธ |
์ฌ๋ฌ ํ๋ฉด/๋๋ฉ์ธ์์ ์ฌ์ฌ์ฉ, ๊ธฐ๋ฅ ์ค์ฌ |
Button, Input, Icon, Modal |
| ui ์ปดํฌ๋ํธ |
ํน์ ๋๋ฉ์ธ ์ ์ฉ, ๊ตฌ์กฐ+์คํ์ผ ์บก์ํ |
ProductCard, SearchBox, FilterGroup |
| CSS ์ธ๋ถํ |
์ฌ์ฌ์ฉ ๊ฐ๋ฅ ์คํ์ผ(๋ณ์, ํจ์, ๋ฆฌ์
๋ฑ)๋ง |
tokens, mixins |
| ์คํ์ผ ๋ก์ปฌํ |
๊ฐ๋ณ ์ปดํฌ๋ํธ์ ์ข
์๋ ์คํ์ผ์ ๋ก์ปฌ ์ ์ง |
ProductCard.module.css |
| UI ์ค๊ณ ์คํจ ์ง์ |
class ์์ ์ค๋ฅ, DOM ๋๋ฝ, ๊ธฐ์ต ์์กด ๋ฑ |
๋ณต๋ถ์ผ๋ก ๋์ผ UI ๋ณต์ ๋ถ๊ฐ |
๐ 7. ๊ฒฐ๋ก ๋ฐ ํฅํ ๋์
- ๋จ๊ธฐ ๊ตฌ์ถ ํ๋ก์ ํธ๋ผ ํด๋ UI ์กฐ๋ฆฝ์ ์ ๋ขฐ์ฑ๊ณผ ๊ตฌ์กฐ ์ผ๊ด์ฑ ํ๋ณด๋ฅผ ์ํด ์ผ์ ์์ค์ ์ปดํฌ๋ํธ ๋ถ๋ฆฌ๋ ํ์์ ์ด๋ค.
- ์คํ์ผ ์ถ์ํ๋ง์ผ๋ก๋ ์ค์ ๊ฐ๋ฐ์ ๊ฒฝํ์์ ์ค์๋ฅผ ์ ๋ฐํ๋ฉฐ, ํนํ ๋ค๋ฅธ ๊ฐ๋ฐ์์์ ํ์
์ด๋ ์ฅ๊ธฐ ์ ์ง๋ณด์ ์ธก๋ฉด์์๋ ๋
์ด ๋ ์ ์๋ค.
- ์ถ์ฒ ๊ตฌ์กฐ๋
components/core, components/ui, styles ์ธ ๋ ์ด์ด๋ฅผ ๋ช
ํํ ๋ถ๋ฆฌํ๊ณ , โ๊ธฐ์ตํ์ง ์์๋ ๋๋ ์ค๊ณโ๋ฅผ ์งํฅํ๋ ๊ฒ์ด๋ค.
- ์ดํ ์ด์ ํ๋ก์ ํธ๋ก ์ ํ๋๊ฑฐ๋ ๋์์ธ ์์คํ
๊ตฌ์ถ์ผ๋ก ๋ฐ์ ํ ๊ฒฝ์ฐ,
components/core๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ถ์ถ ๊ฐ๋ฅํ ๊ตฌ์กฐ๋ฅผ ์ ์ ๋ก ์ค๊ณํด๋๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค.