Ver3.5 ๐๏ธ ๋ชจ๋ ธ๋ผ์ธ ์์ด์ฝ: ์ผ๊ด๋ ์ ๋๊ป๋ก ์์ฑํ๋๊น๋ํ๊ณ ์ธ๋ จ๋ ์์ด์ฝ ๋์์ธ์ ๋ชจ๋ ๊ฒ

๐๏ธ ๋ชจ๋
ธ๋ผ์ธ ์์ด์ฝ: ์ผ๊ด๋ ์ ๋๊ป๋ก ์์ฑํ๋
๊น๋ํ๊ณ ์ธ๋ จ๋ ์์ด์ฝ ๋์์ธ์ ๋ชจ๋ ๊ฒ
Monoline Icon Design โ ์ ํ๋๋ก ์ธ์์ ๊ทธ๋ฆฌ๋ ๊ธฐ์
์ผ, ์์งํ ๋งํด๋ณผ๊ฒ. ๐ค
์น์ฌ์ดํธ๋ ์ฑ์ ๋ง๋ค ๋ ์์ด์ฝ ํ๋ ์๋ชป ๊ณ ๋ฅด๋ฉด ์ ์ฒด ๋์์ธ์ด ์๊ฑฑ๊ฑฐ๋ฆฌ๋ ๊ฑฐ ๋๊ปด๋ณธ ์ ์์ง ์์? ์ด๋ค ์์ด์ฝ์ ๊ตต๊ณ , ์ด๋ค ๊ฑด ์๊ณ , ์ด๋ค ๊ฑด ์์ด ๊ฝ ์ฐจ ์๊ณ ... ์ด๊ฒ ๋ค ์์ด๋ฉด ์ฌ์ฉ์ ๋์๋ ๊ทธ๋ฅ ์๊ฐ์ ์์(visual noise)์ผ๋ก ๋๊ปด์ ธ.
๊ทธ๋์ ๋ฑ์ฅํ ๊ฒ ๋ฐ๋ก ๋ชจ๋ ธ๋ผ์ธ ์์ด์ฝ(Monoline Icon)์ด์ผ. ์ด๋ฆ๋ถํฐ ํํธ๊ฐ ์์ง? Mono(ํ๋) + Line(์ ). ์ฆ, ํ๋์ ์ผ๊ด๋ ์ ๋๊ป๋ก๋ง ๊ทธ๋ฆฐ ์์ด์ฝ ์คํ์ผ์ด์ผ. ์ฌํํ๋ฉด์๋ ์ธ๋ จ๋๊ณ , ์ด๋์ ๊ฐ๋ค ๋ถ์ฌ๋ ์ ์ด์ธ๋ฆฌ๋ ์ด ์คํ์ผ์ด ์ ์ด๋ ๊ฒ ์ธ๊ธฐ ์๋์ง, ์ด๋ป๊ฒ ๋ง๋๋์ง, ์น๋์์ธ๊ณผ ์์ธํ์ด์ง์์ ์ด๋ป๊ฒ ํ์ฉํ๋์ง โ ์ค๋ ์์ ํ ํํค์ณ๋ณผ ๊ฑฐ์ผ! ๐ฏ
๐ ๋ชจ๋ ธ๋ผ์ธ ์์ด์ฝ, ์ ํํ ๋ญ์ผ?
๋ชจ๋ ธ๋ผ์ธ(Monoline)์ด๋ผ๋ ๋จ์ด ์์ฒด๋ "๋จ์ผ ์ ๊ตต๊ธฐ"๋ฅผ ์๋ฏธํด. ๊ทธ๋ฆผ์ ๊ทธ๋ฆด ๋ ๋ถ์ด๋ ํ์ ๊ตต๊ธฐ๋ฅผ ๋ฐ๊พธ์ง ์๊ณ ์ฒ์๋ถํฐ ๋๊น์ง ๋์ผํ ๋๊ป๋ก๋ง ๊ทธ๋ฆฌ๋ ๋ฐฉ์์ด์ผ. ์ด๊ฑธ ์์ด์ฝ ๋์์ธ์ ์ ์ฉํ ๊ฒ ๋ฐ๋ก ๋ชจ๋ ธ๋ผ์ธ ์์ด์ฝ์ด์ง.
๊ธฐ์ ์ ์ผ๋ก ์ ์ํ๋ฉด:
2. Uniform stroke-width โ ์์ด์ฝ ์ธํธ ๋ด ๋ชจ๋ ์์ด์ฝ์ ์ ๋๊ป๊ฐ ๋์ผ
3. Consistent stroke style โ ์ ๋์ฒ๋ฆฌ(linecap), ๊บพ์(linejoin) ๋ฐฉ์๋ ํต์ผ
4. Optical balance โ ์๊ฐ์ ์ผ๋ก ๊ท ํ ์กํ ๋น์จ ์ ์ง
์๋ฅผ ๋ค์ด, ์์ด์ฝ ์ธํธ ์ ์ฒด์์ stroke-width: 2px๋ฅผ ์ฐ๊ธฐ๋ก ํ๋ค๋ฉด, ์ง ์์ด์ฝ์ด๋ ๊ฒ์ ์์ด์ฝ์ด๋ ํํธ ์์ด์ฝ์ด๋ ์ ๋ถ 2px ์ ๋๊ป๋ก ๊ทธ๋ ค์ผ ํด. ์ด๊ฒ ๋ชจ๋
ธ๋ผ์ธ์ ํต์ฌ ๊ท์น์ด์ผ.
๐ ๋ค๋ฅธ ์์ด์ฝ ์คํ์ผ๊ณผ ๋น๊ต
๋ชจ๋ ธ๋ผ์ธ์ ์ ๋๋ก ์ดํดํ๋ ค๋ฉด ๋ค๋ฅธ ์คํ์ผ๋ค๊ณผ ๋น๊ตํด๋ณด๋ ๊ฒ ์ ์ผ ๋น ๋ฅด๊ฑฐ๋ :
| ์คํ์ผ | ํน์ง | ๋๋ | ๋ํ ์์ |
|---|---|---|---|
| ๋ชจ๋ ธ๋ผ์ธ | ๊ท ์ผํ ์ ๋๊ป, ์ฑ์ ์์ | ๊น๋, ์ธ๋ จ, ๋ฏธ๋๋ฉ | Feather Icons, Heroicons |
| Filled (์๋ฆฌ๋) | ๋ด๋ถ๊ฐ ์์ผ๋ก ์ฑ์์ง | ๋ฌต์ง, ๊ฐ์กฐ, ๋ช ํ | Material Icons (filled) |
| Duotone | ๋ ๊ฐ์ง ์์ ์กฐํฉ | ์ ์ฒด๊ฐ, ํธ๋ ๋ | Phosphor Icons (duotone) |
| Flat | ๋จ์ ์ฑ์, ์ ์์ | ํ๋์ , ๋จ์ | Flaticon ์ผ๋ถ |
| Glyph | ์ค๋ฃจ์ฃ ํํ | ๊ฐ๋ ฌ, ์ฌ๋ณผ๋ฆญ | Font Awesome (solid) |
๋ณด์ด์ง? ๋ชจ๋ ธ๋ผ์ธ์ ์ ๋ง์ผ๋ก ๋ชจ๋ ๊ฑธ ํํํ๋ ์คํ์ผ์ด์ผ. ๋ง์น ์ฐํ ์ค์ผ์น์ฒ๋ผ ์ ์ ํ๋ฆ ์์ฒด๊ฐ ๋์์ธ์ด ๋๋ ๊ฑฐ์ง. ๊ทธ๋์ ์ ๋ง๋ ๋ชจ๋ ธ๋ผ์ธ ์์ด์ฝ์ ๋ณด๋ ๊ฒ๋ง์ผ๋ก๋ ์ฅ์ธ์ ์๊ธธ์ด ๋๊ปด์ ธ.
๐ ๋ชจ๋ ธ๋ผ์ธ ์์ด์ฝ์ ์ด๋์ ์์๊น?
์ญ์ฌ ์๊ธฐ ์ ๊น ํด๋ณผ๊ฒ. ์ง๋ฃจํ์ง ์๊ฒ ๋น ๋ฅด๊ฒ ๊ฐ๊ฒ! โก
์ฌ๋ฆผํฝ ํฝํ ๊ทธ๋จ์ฒ๋ผ ๋จ์ํ ์ ์ผ๋ก ์ฌ๋๊ณผ ์ฌ๋ฌผ์ ํํํ๋ ์๋๊ฐ ์์๋์ด. ์ด๊ฒ ๋ชจ๋ ธ๋ผ์ธ์ ์์กฐ ๊ฒฉ์ด์ผ.
iOS ์ด๊ธฐ์ฒ๋ผ ์์ด์ฝ์ด ์ค์ ๋ฌผ์ฒด์ฒ๋ผ ๋ณด์ด๊ฒ ๋ง๋๋ ๊ฒ ํธ๋ ๋์์ด. ๊ทธ๋ผ๋์ธํธ, ๊ทธ๋ฆผ์, ์ง๊ฐ์ด ๋์ณ๋ฌ์ง. ๋ชจ๋ ธ๋ผ์ธ๊ณผ๋ ์ ๋ฐ๋ ๋ฐฉํฅ์ด์์ด.
iOS 7์ด ์ถ์๋๋ฉด์ ์ ํ์ด ์คํ์ด๋ชจํผ์ฆ์ ๋ฒ๋ฆฌ๊ณ ํ๋ซ ๋์์ธ์ผ๋ก ์ ํํ์ด. ์ด๋๋ถํฐ ์ ๊ธฐ๋ฐ ์์ด์ฝ์ด ๊ธ๋ถ์ํ๊ธฐ ์์ํ์ง.
Google์ Material Design ๊ฐ์ด๋๋ผ์ธ์ด ๋ฐํ๋๋ฉด์ 2dp ์ ๋๊ป๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์์ด์ฝ ์์คํ ์ด ํ์คํ๋์ด. ์ ์ธ๊ณ ๋์์ด๋๋ค์ด ๋ชจ๋ ธ๋ผ์ธ ์คํ์ผ์ ์ฑํํ๊ธฐ ์์ํ์ง.
๋จ์ํ ์ ์์ ๋ฒ์ด๋ ๋ผ์ด๋ ์ฒ๋ฆฌ, ๋ฏธ๋ฌํ ๊ตต๊ธฐ ๋ณํ, ์ปฌ๋ฌ ํฌ์ธํธ ๋ฑ์ ๊ฐ๋ฏธํ ๋ชจ๋ ๋ชจ๋ ธ๋ผ์ธ์ด ๋ฑ์ฅํ์ด. ์ง๊ธ๋ ์น๊ณผ ์ฑ ๋์์ธ์ ์ฃผ๋ฅ ์คํ์ผ์ด์ผ.
"Less is more" โ ๋ฏธ์ค ๋ฐ ๋ฐ์ด ๋ก์
๋ชจ๋
ธ๋ผ์ธ ์์ด์ฝ์ ์ด ์ฒ ํ์ ๊ฐ์ฅ ์ ๊ตฌํํ ๋์์ธ ์คํ์ผ ์ค ํ๋์ผ.
โ๏ธ ๋ชจ๋ ธ๋ผ์ธ ์์ด์ฝ์ ๊ธฐ์ ์ ํต์ฌ ์์น
์, ์ด์ ์ง์ง ์ค์ ์๊ธฐ์ผ. ๋ชจ๋ ธ๋ผ์ธ ์์ด์ฝ์ ์ ๋๋ก ๋ง๋ค๋ ค๋ฉด ์์์ผ ํ ๊ธฐ์ ์ ๊ท์น๋ค์ด ์์ด. ์ด๊ฑธ ๋ชจ๋ฅด๋ฉด "๋น์ทํ๊ฒ ์๊ฒผ๋๋ฐ ์ ์ด์ํ์ง?" ํ๋ ์ํฉ์ด ์๊ธฐ๊ฑฐ๋ . ๐
1๏ธโฃ ์ ๋๊ป(Stroke Width) ์ค์
๋ชจ๋ ธ๋ผ์ธ์ ์๋ช ์ ์ผ๊ด๋ ์ ๋๊ป์ผ. ๊ทธ๋ฐ๋ฐ ์ด๊ฒ ๋จ์ํ "2px๋ก ํต์ผ!" ์ด๋ ๊ฒ ๋๋๋ ๊ฒ ์๋์ผ. ์์ด์ฝ ํฌ๊ธฐ์ ๋ฐ๋ผ ์ ์ ํ ๋๊ป๊ฐ ๋ฌ๋ผ์ง๊ฑฐ๋ :
| ์์ด์ฝ ํฌ๊ธฐ | ๊ถ์ฅ ์ ๋๊ป | ์ฌ์ฉ ๋งฅ๋ฝ |
|---|---|---|
| 16px ร 16px | 1px ~ 1.5px | ์ธ๋ผ์ธ ํ ์คํธ, ์์ ๋ฒํผ |
| 24px ร 24px | 1.5px ~ 2px | ๋ค๋น๊ฒ์ด์ , ์ผ๋ฐ UI (๊ฐ์ฅ ์ผ๋ฐ์ ) |
| 32px ร 32px | 2px ~ 2.5px | ์นด๋ ๋ด ์์ด์ฝ, ์ค๊ฐ ํฌ๊ธฐ UI |
| 48px ร 48px | 2.5px ~ 3px | ๋๋ฉํ์ด์ง ํผ์ฒ ์์ด์ฝ |
| 64px ์ด์ | 3px ~ 4px | ํ์ด๋ก ์น์ , ๋ํ ์ผ๋ฌ์คํธ |
2๏ธโฃ ์ ๋์ฒ๋ฆฌ(Stroke Linecap)
์ ์ ๋์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋๋์ ๋ฐ๋ผ ์์ด์ฝ์ ์ฑ๊ฒฉ์ด ์์ ํ ๋ฌ๋ผ์ ธ:
โ ์น๊ทผํ๊ณ ๋ถ๋๋ฌ์ด ๋๋
๋๋ถ๋ถ์ ํ๋ ๋ชจ๋ ธ๋ผ์ธ์์ ์ฌ์ฉ
โ ๊ธฐ์ ์ ์ด๊ณ ์ ๋ฐํ ๋๋
ํ ํฌ/์์ง๋์ด๋ง ๊ด๋ จ UI์ ์ ํฉ
โ ๋ฏธ๋๋ฉํ๊ณ ๋ ์นด๋ก์ด ๋๋
๊ณ ๊ธ์ค๋ฌ์ด ๋ธ๋๋ ์์ด์ฝ์ ์ฌ์ฉ
3๏ธโฃ ์ ๊บพ์(Stroke Linejoin)
์ ์ด ๊บพ์ด๋ ๋ถ๋ถ์ ์ฒ๋ฆฌ ๋ฐฉ์๋ ํต์ผํด์ผ ํด:
๐ต round โ ๊บพ์ ๋ถ๋ถ์ด ๋ฅ๊ธ๊ฒ ๐ท miter โ ๊บพ์ ๋ถ๋ถ์ด ๋พฐ์กฑํ๊ฒ ๐ถ bevel โ ๊บพ์ ๋ถ๋ถ์ด ์๋ฆฐ ํํ
๋ณดํต stroke-linecap: round์ stroke-linejoin: round๋ฅผ ํจ๊ป ์ฐ๋ ๊ฒ ๊ฐ์ฅ ์์ฐ์ค๋ฝ๊ณ ํ๋์ ์ธ ๋๋์ ์ค. Feather Icons, Heroicons ๊ฐ์ ์ ๋ช
์์ด์ฝ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ์ด ์กฐํฉ์ ์จ.
4๏ธโฃ ํฝ์ ๊ทธ๋ฆฌ๋(Pixel Grid) ์ ๋ ฌ
์ด๊ฒ ์ง์ง ์ค์ํ๋ฐ ๋ง์ด๋ค ๋์ณ! ์์ด์ฝ์ ๊ทธ๋ฆด ๋ ์ ์ด ํฝ์ ๊ฒฝ๊ณ์ ์ ํํ ๋ง์์ผ ํด. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ํฐ์จ๋ฆฌ์ด์ฑ(Anti-aliasing) ๋๋ฌธ์ ์ ์ด ํ๋ฆฟํ๊ฒ ๋ณด์ฌ.
โข ์ง์ ํฌ๊ธฐ ์บ๋ฒ์ค ์ฌ์ฉ: 24ร24, 32ร32, 48ร48
โข 1px ์ ์ 0.5 ์คํ์ ํ์: x="10.5" (ํฝ์ ์ค์์ ๋ฐฐ์น)
โข ์ง์ ์ ๋๊ป(2px, 4px)๋ ์ ์ ์ขํ ์ฌ์ฉ ๊ฐ๋ฅ
5๏ธโฃ ๊ดํ์ ๋ณด์ (Optical Correction)
์ํ์ ์ผ๋ก ์๋ฒฝํ ๋ํ์ด ์๊ฐ์ ์ผ๋ก๋ ๋ถ๊ท ํํด ๋ณด์ด๋ ๊ฒฝ์ฐ๊ฐ ์์ด. ์ด๊ฑธ ๋ณด์ ํ๋ ๊ฒ ๊ดํ์ ๋ณด์ ์ด์ผ:
โข ์ํ ์์ด์ฝ์ ์ ์ฌ๊ฐํ๋ณด๋ค ์ฝ๊ฐ ํฌ๊ฒ ๊ทธ๋ ค์ผ ๊ฐ์ ํฌ๊ธฐ๋ก ๋ณด์ฌ
โข ์ผ๊ฐํ์ ์ํ์ ์ค์ฌ๋ณด๋ค ์ฝ๊ฐ ์์ ๋ฐฐ์นํด์ผ ์๊ฐ์ ์ผ๋ก ์ค์์ ๋ณด์ฌ
โข ๊ฐ๋ ์ ์ ๊ตต์ ์ ๋ณด๋ค ์ค์ ๋ณด๋ค ์์ ๋ณด์ด๋ฏ๋ก ์ฝ๊ฐ ๋๊ป๊ฒ ๋ณด์ ํ์
๐ ๏ธ ๋ชจ๋ ธ๋ผ์ธ ์์ด์ฝ ์ด๋ป๊ฒ ๋ง๋ค์ด?
์ด๋ก ์ ์๊ฒ ๋๋ฐ ์ค์ ๋ก ์ด๋ป๊ฒ ๋ง๋๋๊ณ ? ๊ฑฑ์ ๋ง, ์ง๊ธ๋ถํฐ ์ค์ ์ด์ผ! ๐ฅ
๐ฑ ์ฃผ์ ์ ์ ๋๊ตฌ
์น ๊ธฐ๋ฐ ํ์ ์ต๊ฐ ๋ฌด๋ฃ ํ๋ ์์
์ ๋ฌธ๊ฐ์ฉ ๊ฐ๋ ฅํ ํํด ์ ๋ฃ
Mac ์ ์ฉ ์ฌ๋ณผ ์์คํ ์ ๋ฃ
์์ ๋ฌด๋ฃ ์คํ์์ค ํ์ต ๊ณก์ ์์
๐ฏ Figma๋ก ๋ชจ๋ ธ๋ผ์ธ ์์ด์ฝ ๋ง๋๋ ๊ธฐ๋ณธ ํ๋ก์ธ์ค
24ร24px ํ๋ ์ ์์ฑ. ๋ด๋ถ์ 20ร20px ์์ญ์ ์ค์ ์์ด์ฝ ๊ทธ๋ฆฌ๋ ๊ณต๊ฐ์ผ๋ก ์ค์ (2px ์ฌ๋ฐฑ). ์ด ์ฌ๋ฐฑ์ safe zone์ด๋ผ๊ณ ํด.
1px ๊ทธ๋ฆฌ๋๋ฅผ ํ์ฑํํด์ ํฝ์ ๋จ์๋ก ์ ํํ๊ฒ ์์ . Figma์์๋ Ctrl+Shift+' (Mac: Cmd+Shift+')๋ก ํฝ์ ๊ทธ๋ฆฌ๋ ํ์.
์, ์ฌ๊ฐํ, ์ ๋ฑ ๊ธฐ๋ณธ ๋ํ์ ์กฐํฉํด์ ์์ด์ฝ์ ๊ธฐ๋ณธ ํํ๋ฅผ ์ก์. ์ด ๋จ๊ณ์์๋ ์ ํ๋๋ณด๋ค ๋น์จ์ด ์ค์ํด.
๊ธฐ๋ณธ ํํ๋ฅผ ๋ฐํ์ผ๋ก ํ ํด(P)๋ก ์ ํํ ํจ์ค๋ฅผ ๊ทธ๋ ค. ์ต์ปค ํฌ์ธํธ๋ ์ต์ํ์ผ๋ก ์ ์ง โ ์ ์์๋ก ๊น๋ํ SVG๊ฐ ๋์.
Fill: None, Stroke: ์ํ๋ ์์, Stroke Width: 2px, Stroke Cap: Round, Stroke Join: Round ์ค์ .
SVG๋ก ๋ด๋ณด๋ด๊ธฐ ์ ์ "Outline Stroke" ์ฒ๋ฆฌ๋ฅผ ํ ์ง ๊ฒฐ์ . ์น์์ CSS๋ก ์์ ๋ณ๊ฒฝ์ด ํ์ํ๋ฉด stroke ์์ฑ ์ ์ง, ๊ทธ๋ ์ง ์์ผ๋ฉด outline ์ฒ๋ฆฌ.
SVG๋ก ๋ด๋ณด๋ธ ํ SVGO ๊ฐ์ ๋๊ตฌ๋ก ์ต์ ํ. ๋ถํ์ํ ์์ฑ ์ ๊ฑฐ, ๊ฒฝ๋ก ๋จ์ํ ๋ฑ์ ํตํด ํ์ผ ํฌ๊ธฐ๋ฅผ ์ค์ฌ.
๐ป SVG ์ฝ๋๋ก ์ง์ ๊ทธ๋ฆฌ๊ธฐ
์ฝ๋ฉ์ ์ข์ํ๋ค๋ฉด SVG๋ฅผ ์ง์ ์์ฑํ๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ์ด์ผ. ๋ชจ๋ ธ๋ผ์ธ ์์ด์ฝ์ SVG ๊ตฌ์กฐ๋ ์๊ฐ๋ณด๋ค ๋จ์ํด:
<!-- 24x24 ํ ์์ด์ฝ ์์ -->
<svg xmlns="http://www.w3.org/2000/svg"
width="24" height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round">
<!-- ์ง๋ถ -->
<polyline points="3 9 12 2 21 9"></polyline>
<!-- ๋ฒฝ -->
<path d="M5 9v11a1 1 0 001 1h4v-5h4v5h4a1 1 0 001-1V9"></path>
</svg>
ํต์ฌ์ fill="none"๊ณผ stroke="currentColor"์ผ. currentColor๋ฅผ ์ฐ๋ฉด CSS๋ก ์์์ ์์ ๋กญ๊ฒ ๋ฐ๊ฟ ์ ์์ด์ ๋คํฌ๋ชจ๋ ๋์๋ ์ฌ์์ ธ!
๐ ์น๋์์ธ์์ ๋ชจ๋ ธ๋ผ์ธ ์์ด์ฝ ํ์ฉํ๊ธฐ
์, ์ด์ ์ง์ง ์ค์ ํ์ฉ ์๊ธฐ์ผ! ์น๋์์ธ, ํนํ ์์ธํ์ด์ง์์ ๋ชจ๋ ธ๋ผ์ธ ์์ด์ฝ์ ์ด๋ป๊ฒ ์จ์ผ ํจ๊ณผ์ ์ธ์ง ์์๋ณด์. ๐
๐ ํ์ฉ ์์น๋ณ ๊ฐ์ด๋
๐ ์์ธํ์ด์ง์์์ ์ ๋ต์ ํ์ฉ
์์ธํ์ด์ง(Product Detail Page)์์ ๋ชจ๋ ธ๋ผ์ธ ์์ด์ฝ์ ๊ตฌ๋งค ๊ฒฐ์ ์ ๋๋ ์๊ฐ์ ์ ํธ ์ญํ ์ ํด. ์ ์ฐ๋ฉด ์ ํ์จ(Conversion Rate)์ด ์ฌ๋ผ๊ฐ!
"๋ฌด๋ฃ ๋ฐฐ์ก", "30์ผ ํ๋ถ ๋ณด์ฅ", "24์๊ฐ ๊ณ ๊ฐ์ง์" ๊ฐ์ ํํ์ ๋์ดํ ๋ ๊ฐ ํญ๋ชฉ ์์ ๊ด๋ จ ์์ด์ฝ์ ๋ฐฐ์นํ๋ฉด ์ค์บ ๊ฐ๋ ์ฑ์ด ํฌ๊ฒ ์ฌ๋ผ๊ฐ. ์ฌ์ฉ์๋ค์ ํ ์คํธ๋ฅผ ์ฝ๊ธฐ ์ ์ ์์ด์ฝ์ผ๋ก ๋ด์ฉ์ ๋จผ์ ํ์ ํ๊ฑฐ๋ .
์ ํ ์ฌ์์ ๋์ดํ ๋ ์นดํ ๊ณ ๋ฆฌ๋ณ๋ก ์์ด์ฝ์ ๋ถ์ด๋ฉด ๋ณต์กํ ์ ๋ณด๊ฐ ํจ์ฌ ์ฝ๊ธฐ ์ฌ์์ ธ. ๋ฐฐํฐ๋ฆฌ ์๋ช ์ ๋ฐฐํฐ๋ฆฌ ์์ด์ฝ, ๋ฌด๊ฒ์ ์ ์ธ ์์ด์ฝ ๊ฐ์ ์์ผ๋ก.
๋ณด์ ์ธ์ฆ, ๊ฒฐ์ ์์ , ๊ฐ์ธ์ ๋ณด ๋ณดํธ ๋ฑ์ ๋ํ๋ด๋ ์์ด์ฝ์ ๊ตฌ๋งค ๋ฒํผ ๊ทผ์ฒ์ ๋ฐฐ์นํ๋ฉด ์ ํ์จ ํฅ์์ ๋์์ด ๋ผ. ๋ชจ๋ ธ๋ผ์ธ ์คํ์ผ์ ๋๋ฌด ๊ณผํ์ง ์์์ ์ ๋ขฐ๊ฐ์ ์ฃผ๋ฉด์๋ ๋์์ธ์ ํด์น์ง ์์.
๋ฐฐ์ก ํธ๋ญ, ๋ฌ๋ ฅ, ํ์ดํ ๋ฑ์ ์์ด์ฝ์ผ๋ก ๋ฐฐ์ก ํ๋ก์ธ์ค๋ฅผ ์๊ฐํํ๋ฉด ์ฌ์ฉ์ ๋ถ์๊ฐ์ ์ค์ผ ์ ์์ด. ํนํ ๋ชจ๋ฐ์ผ ์์ธํ์ด์ง์์ ํ ์คํธ๋ง ๋์ดํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ํจ๊ณผ์ ์ด์ผ.
๐ป ์น์์ ๋ชจ๋ ธ๋ผ์ธ ์์ด์ฝ ๊ตฌํํ๊ธฐ
๋์์ธ ํด์์ ๋ง๋ ์์ด์ฝ์ ์ค์ ์น์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์. ๋ฐฉ๋ฒ์ด ์ฌ๋ฌ ๊ฐ์ง์ธ๋ฐ, ๊ฐ๊ฐ ์ฅ๋จ์ ์ด ์์ด!
๋ฐฉ๋ฒ 1: ์ธ๋ผ์ธ SVG
HTML์ SVG ์ฝ๋๋ฅผ ์ง์ ์ฝ์ ํ๋ ๋ฐฉ์. CSS๋ก ์คํ์ผ ์ ์ด๊ฐ ๊ฐ์ฅ ์์ ๋ก์.
<!-- ์ธ๋ผ์ธ SVG ๋ฐฉ์ -->
<button class="icon-btn">
<svg width="24" height="24" viewBox="0 0 24 24"
fill="none" stroke="currentColor"
stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<circle cx="11" cy="11" r="8"></circle>
<line x1="21" y1="21" x2="16.65" y2="16.65"></line>
</svg>
๊ฒ์
</button>
<style>
.icon-btn {
color: #667eea; /* currentColor๊ฐ ์ด ์์์ ์์๋ฐ์ */
transition: color 0.2s;
}
.icon-btn:hover {
color: #764ba2; /* ํธ๋ฒ ์ ์์ ๋ณ๊ฒฝ โ ์์ด์ฝ๋ ์๋์ผ๋ก ๋ฐ๋! */
}
</style>
stroke="currentColor"๋ฅผ ์ฐ๋ฉด ๋ถ๋ชจ ์์์ CSS color ๊ฐ์ ์๋์ผ๋ก ์์๋ฐ์. ๋คํฌ๋ชจ๋ ์ ํ, ํธ๋ฒ ํจ๊ณผ, ํ
๋ง ๋ณ๊ฒฝ ๋ฑ์ CSS ํ ์ค๋ก ์ฒ๋ฆฌํ ์ ์์ด์ ์ ๋ง ํธ๋ฆฌํด!
๋ฐฉ๋ฒ 2: SVG ์คํ๋ผ์ดํธ
์ฌ๋ฌ ์์ด์ฝ์ ํ๋์ SVG ํ์ผ์ ๋ชจ์๋๊ณ ํ์ํ ๋ ์ฐธ์กฐํ๋ ๋ฐฉ์. ์ฑ๋ฅ ์ต์ ํ์ ์ข์.
<!-- sprite.svg ํ์ผ -->
<svg xmlns="http://www.w3.org/2000/svg" style="display:none">
<symbol id="icon-home" viewBox="0 0 24 24">
<polyline points="3 9 12 2 21 9"></polyline>
<path d="M5 9v11h5v-5h4v5h5V9"></path>
</symbol>
<symbol id="icon-search" viewBox="0 0 24 24">
<circle cx="11" cy="11" r="8"></circle>
<line x1="21" y1="21" x2="16.65" y2="16.65"></line>
</symbol>
</svg>
<!-- ์ฌ์ฉํ ๋ -->
<svg width="24" height="24" fill="none"
stroke="currentColor" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round">
<use href="sprite.svg#icon-home"></use>
</svg>
๋ฐฉ๋ฒ 3: ์์ด์ฝ ํฐํธ
Font Awesome์ฒ๋ผ ์์ด์ฝ์ ํฐํธ๋ก ๋ง๋ค์ด ์ฌ์ฉํ๋ ๋ฐฉ์. ์ค์น๊ฐ ์ฝ์ง๋ง SVG ๋ฐฉ์๋ณด๋ค ์ ์ฐ์ฑ์ด ๋จ์ด์ ธ.
๋ฐฉ๋ฒ 4: ์์ด์ฝ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ฉ
์ฒ์๋ถํฐ ๋ง๋ค๊ธฐ ์ด๋ ต๋ค๋ฉด ๊ฒ์ฆ๋ ์คํ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉํ๋ ๊ฒ ํ๋ช ํด:
feathericons.com
heroicons.com
lucide.dev
phosphoricons.com
๐จ CSS๋ก ๋ชจ๋ ธ๋ผ์ธ ์์ด์ฝ ์คํ์ผ๋ง
SVG ์์ด์ฝ์ CSS๋ก ์ ์ดํ๋ ํต์ฌ ์์ฑ๋ค:
/* ๊ธฐ๋ณธ ์์ด์ฝ ์คํ์ผ */
.icon {
display: inline-block;
vertical-align: middle;
stroke: currentColor;
fill: none;
stroke-width: 2;
stroke-linecap: round;
stroke-linejoin: round;
}
/* ํฌ๊ธฐ ๋ณํ */
.icon-sm { width: 16px; height: 16px; }
.icon-md { width: 24px; height: 24px; }
.icon-lg { width: 32px; height: 32px; }
.icon-xl { width: 48px; height: 48px; }
/* ์์ ํ
๋ง */
.icon-primary { color: #667eea; }
.icon-success { color: #27ae60; }
.icon-warning { color: #f6a623; }
.icon-danger { color: #e74c3c; }
/* ์ ๋๋ฉ์ด์
ํจ๊ณผ */
.icon-spin {
animation: spin 1s linear infinite;
}
@keyframes spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
/* ํธ๋ฒ ํจ๊ณผ */
.icon-btn:hover .icon {
transform: scale(1.1);
transition: transform 0.2s ease;
}
๐๏ธ ๋ชจ๋ ธ๋ผ์ธ ์์ด์ฝ ๋์์ธ ์์คํ ๊ตฌ์ถํ๊ธฐ
์์ด์ฝ ํ๋ ๋ง๋๋ ๊ฑด ์ฌ์. ๊ทผ๋ฐ ์ผ๊ด๋ ์์ด์ฝ ์ธํธ๋ฅผ ๋ง๋๋ ๊ฑด ์์ ๋ค๋ฅธ ์๊ธฐ์ผ. ๋์์ธ ์์คํ ๊ด์ ์์ ์ ๊ทผํด์ผ ํด!
๐ ๊ทธ๋ฆฌ๋ ์์คํ ์ค์
๋ชจ๋ ธ๋ผ์ธ ์์ด์ฝ ์ธํธ๋ฅผ ๋ง๋ค ๋ ๊ฐ์ฅ ๋จผ์ ํด์ผ ํ ๊ฑด ๊ทธ๋ฆฌ๋ ์์คํ ์ ์ ํ๋ ๊ฑฐ์ผ. ๊ตฌ๊ธ Material Design์ ์์ด์ฝ ๊ทธ๋ฆฌ๋๋ฅผ ์๋ก ๋ค๋ฉด:
โข ๋ผ์ด๋ธ ์์ญ(Live Area): 20ร20px (์ค์ ์ ๋ ฌ)
โข ์ฌ๋ฐฑ(Padding): ๊ฐ ๋ฐฉํฅ 2px
โข ํค๋ผ์ธ(Keyline): ์ํ 20px, ์ ์ฌ๊ฐํ 18ร18px, ๊ฐ๋กํ 20ร16px, ์ธ๋กํ 16ร20px
โข ์ ๋๊ป: 2px (์ผ๊ด ์ ์ฉ)
ํค๋ผ์ธ์ด ๋ญ๋๊ณ ? ์์ด์ฝ์ ๊ธฐ๋ณธ ํํ๋ฅผ ์ก๋ ๊ฐ์ด๋๋ผ์ธ์ด์ผ. ์ํ ์์ด์ฝ์ ์ํ ํค๋ผ์ธ์, ์ฌ๊ฐํ ์์ด์ฝ์ ์ฌ๊ฐํ ํค๋ผ์ธ์ ๋ง์ถฐ ๊ทธ๋ฆฌ๋ฉด ์๊ฐ์ ํฌ๊ธฐ๊ฐ ํต์ผ๋ผ ๋ณด์ฌ.
๐จ ์ปฌ๋ฌ ์์คํ ์ฐ๋
์์ด์ฝ ์์์ ๋์์ธ ์์คํ ์ ์ปฌ๋ฌ ํ ํฐ๊ณผ ์ฐ๋ํ๋ฉด ์ ์ง๋ณด์๊ฐ ํจ์ฌ ์ฌ์์ ธ:
/* CSS ๋ณ์๋ก ์์ด์ฝ ์์ ๊ด๋ฆฌ */
:root {
--icon-primary: #667eea;
--icon-secondary: #764ba2;
--icon-success: #27ae60;
--icon-warning: #f6a623;
--icon-danger: #e74c3c;
--icon-muted: #adb5bd;
}
/* ๋คํฌ๋ชจ๋ */
@media (prefers-color-scheme: dark) {
:root {
--icon-primary: #a8b2d8;
--icon-muted: #6c757d;
}
}
.icon-primary { color: var(--icon-primary); }
.icon-muted { color: var(--icon-muted); }
๐ฆ ์ปดํฌ๋ํธํ
React, Vue ๊ฐ์ ํ๋ ์์ํฌ๋ฅผ ์ด๋ค๋ฉด ์์ด์ฝ์ ์ปดํฌ๋ํธ๋ก ๋ง๋ค์ด ๊ด๋ฆฌํ๋ ๊ฒ ์ต์ ์ด์ผ:
// React ์์ด์ฝ ์ปดํฌ๋ํธ ์์
const Icon = ({ name, size = 24, color = 'currentColor', strokeWidth = 2 }) => {
const icons = {
home: (
<>
<polyline points="3 9 12 2 21 9" />
<path d="M5 9v11h5v-5h4v5h5V9" />
</>
),
search: (
<>
<circle cx="11" cy="11" r="8" />
<line x1="21" y1="21" x2="16.65" y2="16.65" />
</>
),
// ... ๋ ๋ง์ ์์ด์ฝ๋ค
};
return (
<svg
width={size}
height={size}
viewBox="0 0 24 24"
fill="none"
stroke={color}
strokeWidth={strokeWidth}
strokeLinecap="round"
strokeLinejoin="round"
>
{icons[name]}
</svg>
);
};
// ์ฌ์ฉ
<Icon name="home" size={32} color="#667eea" />
โฟ ์ ๊ทผ์ฑ(Accessibility)์ ๊ณ ๋ คํ ์์ด์ฝ ์ฌ์ฉ
์์ด์ฝ์ด ์์ ๊ฒ๋ ์ค์ํ์ง๋ง, ๋ชจ๋ ์ฌ์ฉ์๊ฐ ์ดํดํ ์ ์์ด์ผ ์ง์ง ์ข์ ๋์์ธ์ด์ผ. ์๊ฐ ์ฅ์ ๊ฐ ์๋ ์ฌ์ฉ์๋ฅผ ์ํ ์คํฌ๋ฆฐ ๋ฆฌ๋ ๋์๋ ํ์์ผ!
ํ ์คํธ ์์ ์์ด์ ์๋ฏธ๋ฅผ ๋ณด์ํ๋ ์์ด์ฝ์ ์คํฌ๋ฆฐ ๋ฆฌ๋๊ฐ ์ฝ์ง ์์๋ ๋ผ.
aria-hidden="true"๋ฅผ ์ถ๊ฐํด.
<button>
<svg aria-hidden="true" ...>...</svg>
๊ฒ์ํ๊ธฐ
</button>
ํ ์คํธ ์์ด ์์ด์ฝ๋ง ์๋ ๊ฒฝ์ฐ ๋ฐ๋์ ๋์ฒด ํ ์คํธ๋ฅผ ์ ๊ณตํด์ผ ํด.
<button aria-label="๊ฒ์">
<svg aria-hidden="true" ...>...</svg>
</button>
<!-- ๋๋ SVG ๋ด๋ถ์ title ํ๊ทธ ์ฌ์ฉ -->
<svg role="img" aria-labelledby="icon-title">
<title id="icon-title">๊ฒ์</title>
...
</svg>
์์ด์ฝ์ ์ ์์๊ณผ ๋ฐฐ๊ฒฝ ์์์ ๋๋น๊ฐ WCAG ๊ธฐ์ค ์ต์ 3:1 ์ด์์ด์ด์ผ ํด. ํนํ ๋ชจ๋ ธ๋ผ์ธ ์์ด์ฝ์ ์ ์ด ์์์ ๋๋น๊ฐ ๋ฎ์ผ๋ฉด ์ ์ ๋ณด์ผ ์ ์์ด.
ํฐ์น ํ๊ฒ์ ์ต์ 44ร44px์ด์ด์ผ ํด (Apple HIG ๊ธฐ์ค). ์์ด์ฝ ์์ฒด๊ฐ 24px์ด๋ผ๋ ํด๋ฆญ ์์ญ์ 44px ์ด์์ผ๋ก ๋ง๋ค์ด์ผ ํด.
๐ฎ ๋ชจ๋ ธ๋ผ์ธ ์์ด์ฝ์ ์ต์ ํธ๋ ๋์ ์์ฉ
๋ชจ๋ ธ๋ผ์ธ์ด ๊ธฐ๋ณธ์ด๋ผ๋ฉด, ์ด๊ฑธ ์์ฉํ ํธ๋ ๋ํ ๋ณํ๋ค๋ ์์๋๋ฉด ์ข์! ๋์์ธ์ ๊ณ์ ์งํํ๋๊น. ๐
1. ์ ๋๋ฉ์ด์ ๋ชจ๋ ธ๋ผ์ธ ์์ด์ฝ
์ ์ ์ธ ์์ด์ฝ์ SVG ์ ๋๋ฉ์ด์ ์ ๋ํ๋ฉด ์์ ๋ค๋ฅธ ์ฐจ์์ด ๋ผ. ํนํ stroke-dasharray์ stroke-dashoffset์ ์ด์ฉํ ์ ๊ทธ๋ฆฌ๊ธฐ ์ ๋๋ฉ์ด์ ์ด ์ธ๊ธฐ์ผ:
/* ์ ์ด ๊ทธ๋ ค์ง๋ ์ ๋๋ฉ์ด์
*/
.icon-path {
stroke-dasharray: 100;
stroke-dashoffset: 100;
animation: draw 0.8s ease forwards;
}
@keyframes draw {
to {
stroke-dashoffset: 0;
}
}
/* ํธ๋ฒ ์ ์ ๋๋ฉ์ด์
ํธ๋ฆฌ๊ฑฐ */
.icon-btn:hover .icon-path {
animation: draw 0.5s ease forwards;
}
2. ์ปฌ๋ฌ ๊ทธ๋ผ๋์ธํธ ๋ชจ๋ ธ๋ผ์ธ
์์ ๋จ์ ์ ๋์ ๊ทธ๋ผ๋์ธํธ๋ฅผ ์ ์ฉํ ๋ชจ๋
ธ๋ผ์ธ์ด ํธ๋ ๋ํด. SVG์ <linearGradient>๋ฅผ stroke์ ์ ์ฉํ๋ฉด ๋ผ:
<svg viewBox="0 0 24 24">
<defs>
<linearGradient id="grad" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#667eea"/>
<stop offset="100%" style="stop-color:#764ba2"/>
</linearGradient>
</defs>
<circle cx="12" cy="12" r="10"
fill="none"
stroke="url(#grad)"
stroke-width="2"/>
</svg>
3. ๋๊ป ๋ณํ๊ฐ ์๋ "์ธ๋ฏธ-๋ชจ๋ ธ๋ผ์ธ"
์์ ํ ๋ชจ๋ ธ๋ผ์ธ์์ ์ด์ง ๋ฒ์ด๋, ์ฃผ์ ์ ์ ๊ตต๊ฒ ๋ณด์กฐ ์ ์ ์๊ฒ ์ฒ๋ฆฌํ๋ ์คํ์ผ์ด์ผ. ์์ ํ ๋ชจ๋ ธ๋ผ์ธ๋ณด๋ค ์ ์ฒด๊ฐ์ด ์์ด์ ์ต๊ทผ ๋ง์ด ๋ณด์ฌ. ์๋ฐํ๋ ๋ชจ๋ ธ๋ผ์ธ์ด ์๋์ง๋ง ๋ชจ๋ ธ๋ผ์ธ์ ๋ฏธ๋๋ฉํ ๊ฐ์ฑ์ ์ ์งํด.
4. ๋ชจ๋ ธ๋ผ์ธ + ์ปฌ๋ฌ ํฌ์ธํธ
์ ์ ๋ชจ๋ ธ๋ผ์ธ์ผ๋ก ์ ์งํ๋, ํน์ ๋ถ๋ถ์๋ง ์์ ์์ ์ฑ์์ ๋ฃ๋ ์คํ์ผ. ์๋ฅผ ๋ค์ด ์๋ฆผ ์์ด์ฝ์์ ์ข ๋ชจ์์ ์ ์ผ๋ก, ์๋ฆผ ์ (dot)๋ง ๋นจ๊ฐ์์ผ๋ก ์ฑ์ฐ๋ ์์ด์ผ. ์ด๊ฒ ์์ฆ ์ฑ UI์์ ๋ง์ด ๋ณด์ด๋ ์คํ์ผ์ด์ผ.
5. ๋ฐ์ํ ์์ด์ฝ (Responsive Icons)
ํ๋ฉด ํฌ๊ธฐ์ ๋ฐ๋ผ ์์ด์ฝ์ ๋ณต์ก๋๊ฐ ๋ฌ๋ผ์ง๋ ๊ฐ๋
์ด์ผ. ํฐ ํ๋ฉด์์๋ ๋ํ
์ผํ ์์ด์ฝ, ์์ ํ๋ฉด์์๋ ๋จ์ํ๋ ์์ด์ฝ์ ๋ณด์ฌ์ฃผ๋ ๊ฑฐ์ง. CSS์ @media ์ฟผ๋ฆฌ์ SVG๋ฅผ ์กฐํฉํด์ ๊ตฌํํ ์ ์์ด.
๐ ์ ๋ช ๋ธ๋๋๋ค์ ๋ชจ๋ ธ๋ผ์ธ ์์ด์ฝ ํ์ฉ
๐ฏ ์ค์ ์์ ๋ฐ๋ก ์ธ ์ ์๋ ๋ชจ๋ ธ๋ผ์ธ ์์ด์ฝ ํ ๋ชจ์
์ด๋ก ์ ์ถฉ๋ถํ ํ์ผ๋๊น, ์ด์ ์ง์ง ํ์ฅ์์ ๋ฐ๋ก ์จ๋จน์ ์ ์๋ ํ๋ค์ ์ญ ์ ๋ฆฌํด๋ณผ๊ฒ! ๐
โ DO โ ์ด๋ ๊ฒ ํด!
ํ ํ๋ก์ ํธ์์ Feather Icons์ Material Icons๋ฅผ ์์ด ์ฐ๋ฉด ์ ๋๊ป, ์คํ์ผ, ๋น์จ์ด ๋ฌ๋ผ์ ์๊ฐ์ ๋ถ์ผ์น๊ฐ ์๊ฒจ. ํ๋์ ์์ด์ฝ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ํํ๊ณ ๊ทธ๊ฒ๋ง ์จ.
16, 20, 24, 32, 40, 48px์ฒ๋ผ 4์ ๋ฐฐ์๋ก ํฌ๊ธฐ๋ฅผ ์ ํ๋ฉด ๊ทธ๋ฆฌ๋ ์์คํ ๊ณผ ์ ๋ง์. ์ด์ํ ํฌ๊ธฐ(์: 22px, 27px)๋ ํผํด.
์์ด์ฝ๊ณผ ํ ์คํธ๋ฅผ ๋๋ํ ๋ฐฐ์นํ ๋
vertical-align: middle์ด๋ flexbox์ align-items: center๋ก ์ ๋ ฌ์ ๋ง์ถฐ. ์ด๊ธ๋๋ฉด ์์ฒญ ์ด์ํด ๋ณด์ฌ.
๋์์ธ ํด์์ ๋ด๋ณด๋ธ SVG์๋ ๋ถํ์ํ ๋ฉํ๋ฐ์ดํฐ๊ฐ ๋ง์. SVGO๋ Jake Archibald์ SVGOMG(svgomg.net)๋ก ์ต์ ํํ๋ฉด ํ์ผ ํฌ๊ธฐ๋ฅผ 60~80%๊น์ง ์ค์ผ ์ ์์ด.
์์ด์ฝ์ ํ ์คํธ ์์ด๋ ์๋ฏธ๊ฐ ์ ๋ฌ๋์ด์ผ ํด. ์ฌ์ฉ์ ํ ์คํธ์์ ์์ด์ฝ๋ง ๋ณด์ฌ์ฃผ๊ณ ์๋ฏธ๋ฅผ ๋ฌผ์ด๋ด. 70% ์ด์์ด ๋ง์ถ์ง ๋ชปํ๋ฉด ํ ์คํธ ๋ ์ด๋ธ์ ์ถ๊ฐํด์ผ ํด.
โ DON'T โ ์ด๊ฑด ํ์ง ๋ง!
width: 48px; height: 48px;์ผ๋ก 24px ์์ด์ฝ์ 2๋ฐฐ ํค์ฐ๋ฉด ์ ๋๊ป๋ ์๋์ ์ผ๋ก ์์ ๋ณด์ฌ. ์๋ ํฌ๊ธฐ์ ๋ง๋ ์์ด์ฝ์ ์ฌ์ฉํ๊ฑฐ๋, SVG์ viewBox๋ฅผ ์กฐ์ ํด์ผ ํด.
๐ง ์ฑ๋ฅ ์ต์ ํ ํ
currentColor๋ฅผ ํ์ฉํ๋ฉด ๊ฐ์ SVG ํ์ผ๋ก ๋ค์ํ ์์์ ํํํ ์ ์์ด. ์์๋ณ๋ก ๋ณ๋ ํ์ผ์ ๋ง๋ค ํ์๊ฐ ์์ด.
๐ค ์ง์ ๋ง๋ค๊น? ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ธ๊น?
์ด ์ง๋ฌธ ์ง์ง ๋ง์ด ๋ฐ๋๋ฐ, ์ ๋ต์ ์ํฉ์ ๋ฐ๋ผ ๋ฌ๋ผ์ผ. ํ๋จ ๊ธฐ์ค์ ์๋ ค์ค๊ฒ!
| ์ํฉ | ์ถ์ฒ | ์ด์ |
|---|---|---|
| ์ผ๋ฐ์ ์ธ ์น/์ฑ ํ๋ก์ ํธ | โ ๋ผ์ด๋ธ๋ฌ๋ฆฌ | ๊ฒ์ฆ๋ ํ์ง, ๋น ๋ฅธ ๊ฐ๋ฐ, ์ ๊ทผ์ฑ ๊ณ ๋ ค๋จ |
| ๊ฐํ ๋ธ๋๋ ์์ด๋ดํฐํฐ ํ์ | โ ์ง์ ์ ์ | ๋ธ๋๋ ๊ณ ์ ์ ์คํ์ผ ํํ ๊ฐ๋ฅ |
| ํน์ํ ๋๋ฉ์ธ (์๋ฃ, ๋ฒ๋ฅ ๋ฑ) | โ ์ง์ ์ ์ | ์ผ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์๋ ํน์ ์์ด์ฝ ํ์ |
| ๋น ๋ฅธ ํ๋กํ ํ์ดํ | โ ๋ผ์ด๋ธ๋ฌ๋ฆฌ | ์๋๊ฐ ์ต์ฐ์ , ๋์ค์ ๊ต์ฒด ๊ฐ๋ฅ |
| ๋๊ท๋ชจ ๋์์ธ ์์คํ | โ ์ง์ ์ ์ | ์ผ๊ด์ฑ๊ณผ ํ์ฅ์ฑ์ ์์ ํ ํต์ ๊ฐ๋ฅ |
| ์๊ท๋ชจ ๊ฐ์ธ ํ๋ก์ ํธ | โ ๋ผ์ด๋ธ๋ฌ๋ฆฌ | ๋น์ฉ ๋๋น ํจ์จ์ด ์๋์ ์ผ๋ก ์ข์ |
์ฐธ๊ณ ๋ก, ๋์์ธ ์ฌ๋ฅ์ ๊ฑฐ๋ํ๋ ์ฌ๋ฅ๋ท์์๋ ์์ด์ฝ ๋์์ธ ์ ๋ฌธ๊ฐ๋ค์ด ํ๋ํ๊ณ ์์ด. ์ง์ ๋ง๋ค๊ธฐ ์ด๋ ต๋ค๋ฉด ์ ๋ฌธ ๋์์ด๋์๊ฒ ์๋ขฐํ๋ ๊ฒ๋ ์ข์ ์ ํ์ด์ผ. ๋ชจ๋ ธ๋ผ์ธ ์์ด์ฝ ์ธํธ ์ ์์ ๋์์ด๋๋ค์ด ์์ฃผ ๋ฐ๋ ์๋ขฐ ์ค ํ๋๊ฑฐ๋ !
๐ ๋ง๋ฌด๋ฆฌ: ๋ชจ๋ ธ๋ผ์ธ ์์ด์ฝ, ์ด์ ๋๋ ต์ง ์์ง?
์, ์ฌ๊ธฐ๊น์ง ์์ผ๋ฉด ์ด์ ๋ชจ๋ ธ๋ผ์ธ ์์ด์ฝ์ ๋ํด ๊ฝค ๋ง์ด ์๊ฒ ๋์ ๊ฑฐ์ผ! ์ฒ์์ "๊ทธ๋ฅ ์ ์ผ๋ก ๊ทธ๋ฆฐ ์์ด์ฝ ์๋?" ์ถ์๋๋ฐ, ์๊ณ ๋ณด๋ฉด ์์ฒญ๋ ๋์์ธ ์ฒ ํ๊ณผ ๊ธฐ์ ์ด ๋ด๊ฒจ ์์ง? ๐
ํต์ฌ์ ๋ค์ ํ๋ฒ ์ ๋ฆฌํด๋ณผ๊ฒ:
์ด ๋ ๊ฐ์ง๋ง ์งํค๋ฉด ๊ธฐ๋ณธ์ ์์ฑ์ด์ผ.
stroke-width, linecap, linejoin, ํฝ์ ๊ทธ๋ฆฌ๋ โ ์ด ๋ค ๊ฐ์ง๊ฐ ํต์ฌ์ด์ผ.
๋คํฌ๋ชจ๋, ํ ๋ง ๋ณ๊ฒฝ, ํธ๋ฒ ํจ๊ณผ๋ฅผ CSS ํ ์ค๋ก ์ฒ๋ฆฌํ ์ ์์ด.
ํํ ๋์ด, ์ ๋ขฐ ๋ฐฐ์ง, ์คํ ํ์์ ๋ชจ๋ ธ๋ผ์ธ ์์ด์ฝ์ ์ ๋ต์ ์ผ๋ก ํ์ฉํด๋ด.
aria-hidden, aria-label, ์์ ๋๋น โ ๋ชจ๋ ์ฌ์ฉ์๋ฅผ ์ํ ๋์์ธ์ด ์ง์ง ์ข์ ๋์์ธ์ด์ผ.
๋ชจ๋
ธ๋ผ์ธ ์์ด์ฝ์ ๋จ์ํจ ์์ ๋ณต์กํจ์ด ์จ์ด ์์ด.
์ ํ๋์ ๋๊ป, ๋์ฒ๋ฆฌ, ๊บพ์ ๋ฐฉ์ โ ์ด ์์ ๋ํ
์ผ๋ค์ด ๋ชจ์ฌ์
์ฌ์ฉ์๊ฐ ๋๋ผ๋ ๋ธ๋๋์ ์ ๋ขฐ๊ฐ๊ณผ ์ ๋ฌธ์ฑ์ ๋ง๋ค์ด๋ด๊ฑฐ๋ .
๋์์ธ์ ๊ฒฐ๊ตญ ๋ํ
์ผ์ ์ธ์์ด์ผ. ๐ฏ
์ด์ ๋ค์ ํ๋ก์ ํธ์์ ์์ด์ฝ์ ๊ณ ๋ฅผ ๋, ๋๋ ์ง์ ๋ง๋ค ๋ ์ค๋ ๋ฐฐ์ด ๋ด์ฉ๋ค์ ๋ ์ฌ๋ ค๋ด. ์ ๋๊ป ํ๋, ๋์ฒ๋ฆฌ ํ๋์๋ ์๋๋ฅผ ๋ด์ ์ ์๋ค๋ฉด โ ๊ทธ๊ฒ ๋ฐ๋ก ์ง์ง ๋์์ด๋์ ๋์ด์ผ! ๐๏ธ
๋ชจ๋ ธ๋ผ์ธ ์์ด์ฝ ๋์์ธ, ์ด์ ์์ ์์ง? ํ์ดํ ! ๐โจ
๊ด๋ จ ํค์๋
๋๊ธ ์์ฑ
์ด ๊ธ์ ๋ํ ์ฌ๋ฌ๋ถ์ ์๊ฐ์ ๋ค๋ ค์ฃผ์ธ์
๋ก๊ทธ์ธ์ด ํ์ํฉ๋๋ค
๋๊ธ์ ์์ฑํ๋ ค๋ฉด ๋จผ์ ๋ก๊ทธ์ธํด์ฃผ์ธ์.
๋๊ธ 0
์ง์์ธ์ ์ฒ - ์ง์ ์ฌ์ฐ๊ถ ๋ณดํธ ๊ณ ์ง
์ง์ ์ฌ์ฐ๊ถ ๋ณดํธ ๊ณ ์ง
- ์ ์๊ถ ๋ฐ ์์ ๊ถ: ๋ณธ ์ปจํ ์ธ ๋ ์ฌ๋ฅ๋ท์ ๋ ์ AI ๊ธฐ์ ๋ก ์์ฑ๋์์ผ๋ฉฐ, ๋ํ๋ฏผ๊ตญ ์ ์๊ถ๋ฒ ๋ฐ ๊ตญ์ ์ ์๊ถ ํ์ฝ์ ์ํด ๋ณดํธ๋ฉ๋๋ค.
- AI ์์ฑ ์ปจํ ์ธ ์ ๋ฒ์ ์ง์: ๋ณธ AI ์์ฑ ์ปจํ ์ธ ๋ ์ฌ๋ฅ๋ท์ ์ง์ ์ฐฝ์๋ฌผ๋ก ์ธ์ ๋๋ฉฐ, ๊ด๋ จ ๋ฒ๊ท์ ๋ฐ๋ผ ์ ์๊ถ ๋ณดํธ๋ฅผ ๋ฐ์ต๋๋ค.
- ์ฌ์ฉ ์ ํ: ์ฌ๋ฅ๋ท์ ๋ช ์์ ์๋ฉด ๋์ ์์ด ๋ณธ ์ปจํ ์ธ ๋ฅผ ๋ณต์ , ์์ , ๋ฐฐํฌ, ๋๋ ์์ ์ ์ผ๋ก ํ์ฉํ๋ ํ์๋ ์๊ฒฉํ ๊ธ์ง๋ฉ๋๋ค.
- ๋ฐ์ดํฐ ์์ง ๊ธ์ง: ๋ณธ ์ปจํ ์ธ ์ ๋ํ ๋ฌด๋จ ์คํฌ๋ํ, ํฌ๋กค๋ง, ๋ฐ ์๋ํ๋ ๋ฐ์ดํฐ ์์ง์ ๋ฒ์ ์ ์ฌ์ ๋์์ด ๋ฉ๋๋ค.
- AI ํ์ต ์ ํ: ์ฌ๋ฅ๋ท์ AI ์์ฑ ์ปจํ ์ธ ๋ฅผ ํ AI ๋ชจ๋ธ ํ์ต์ ๋ฌด๋จ ์ฌ์ฉํ๋ ํ์๋ ๊ธ์ง๋๋ฉฐ, ์ด๋ ์ง์ ์ฌ์ฐ๊ถ ์นจํด๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
์์ง ๋๊ธ์ด ์์ต๋๋ค.