๋ฐ๋จ - ์ ๊ฐ
์ด๋ ํ์ฌ์ ์ด๋ ๋ ์กฐ์ง์ ๋์์ด๋๊ฐ ์ ์ฌํ๊ฒ ๋๋ฉด์ ํ์ฌ์๋ ๋์์ธ์์คํ ์ด ์๊ธฐ๊ฒ ๋๋๋ฐ โฆ
๋์์ธ์์คํ
๊ทธ๊ฑฐ ํฐ ํ์ฌ๋ค์ด๋ ํ๋๊ฑฐ ์๋์ผ?
์ต์ํ์ ๋
ธ๋ ฅ์ผ๋ก ๋์์ธ์์คํ
์ ์งํ๊ธฐ - ์ง๊ธ๋ถํฐ ํ๋ฒ ์์๋ณด๊ฒ ์ต๋๋ค.
๋์์ธ์์คํ ์ ์์ ์ฃผ๊ธฐ
๋ชจ๋ ์ฝ๋๊ฐ ๊ทธ๋ ๋ฏ, ๋์์ธ ์ญ์ ์์ ์ฃผ๊ธฐ๊ฐ ์์ต๋๋ค. ์๋ช
์ด ์๋ค๋ ๊ฑด ์ฃฝ์๋ ์๋ค๋ ๋ป โฆ
ํ์ด๋๊ณ ์ฃฝ์ด๊ฐ๋ ๋์์ธ ํ ํฐ๋ค์ ์ ๊ด๋ฆฌํด ์ฃผ์ด์ผ๊ฒ ์ฃ ?
ํ์ฌ ์ํฉ์ ๋ํ ์ฌ์ ์ง์
- shadcn์ด๋ antd ๊ฐ์ ์ปดํฌ๋ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ ํ์ฌ ์ฌ์ฉํฉ๋๋ค.
- ๋งํฌ์
์ ๋์์ธ ์์กด๋๊ฐ ๋ฎ์ต๋๋ค. design token (variable)์ ์ ๊ท ์ ์ฉ์ด ํ์ํ ํ์ผ์ด ์์ต๋๋ค.
์ด๋ฒ ๋์
์๋์์๋ ์์ ์ฃผ๊ธฐ๋ฅผ ์ด 4๋จ๊ณ๋ก ๋๋ด์ต๋๋ค.
์ ๋ ํ๋ก ํธ ๊ฐ๋ฐ์์ด๊ธฐ ๋๋ฌธ์ .. ๋์์ธ ์ชฝ์ ์ด๋ฐ์ ๋ฐ ์ถ์๊ฐ ์ผ์ด๋ฌ์ต๋๋ค.
- (๋์์ด๋) ํผ๊ทธ๋ง์์ ์ฌ์ ์ ์๋ ๋์์ธํ ํฐ ์์
- (๋์์ด๋/FE) ํผ๊ทธ๋ง์์ ๋์์ธ ํ ํฐ์ ํฌํจํ Global CSS ์ถ์ถ
- (FE) ํผ๊ทธ๋ง์์ ์ปดํฌ๋ํธ ๋งํฌ์ ์ ํ์ํ css/scss ์ถ์ถ
- (FE) ํ๋ก์ ํธ ์ ์ฉ
- ๋์์ธ ํ ํฐ์ ํฌํจํ global.css ์ ์ ์ญ ์ ์ฉ
- ์ปดํฌ๋ํธ ๋จ์ ๋งํฌ์ ์ ์ฉ
์ด๋ฒ ๊ธ์์๋ 1๋ฒ 2๋ฒ์ ๋ํด ๋ค๋ค๋ณผ๊น์.
๊ทธ๋ผ ๋ ์ธ ๊ณ
1. ์ฌ์ ์ ์๋ ๋์์ธ ํ ํฐ ์์
ํฌ๊ฒ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ํผ๊ทธ๋ง ์์ฒด์ ๊ธฐ๋ฅ (variable library) ์ฌ์ฉํ๊ธฐ / Tokens Studio ๋ฑ 3rd Party ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ธฐ.
ํผ๊ทธ๋ง dev mode์์ ์ปดํฌ๋ํธ ๋จ์ ๋งํฌ์ ์ ์ง์ํ๊ธด ํ์ง๋ง, ๊ฒฐ๊ตญ global css ๋จ์๋ก ์ ์ฉํ๊ธฐ ์ํด์๋ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉ์ด ํ์ํด๋ณด์ฌ ์ด๋ฒ ์๋์์๋ ์ฒ์๋ถํฐ ์ธ๋ถ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ๊ธฐ๋ก ํ์ต๋๋ค.
์๋ฐ์์ผ๋ก ๋ฐ๊ฟ ์ ์์ต๋๋ค.
๋์์ธ ํ ํฐ์ ๊ฐ ์์ ์ ์ํด์๋ ๋์์ธ ์์คํ
์ด ์ด๋ค ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑ๋๋์ง์ ๋ํ ์ดํด๊ฐ ํ์ํ๋ฐ์.
์ฐ์ ๋์์ธ ํ ํฐ์ด๋? ์์ ๋ฑ ๋ ์ด์ ๋ถ๋ฆฌํ ์ ์๋ ์ํ ๋ฏนํ ๋์์ธ ์์ฑ์ ์ด๋ฆ์ ๋ถ์ฌํ์ฌ ๋ณ์๋ก ๋ง๋ ๊ฒ์
๋๋ค.
์ด๋, ๋์์ธ ์์คํ
์ ์ฌ๋ฌ ๊ณ์ธต์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค๋ ์ ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํ๋ฐ์, ๋ณดํต Raw Value
- Primitive
- Semantic
- Component
4๊ฐ ๊ณ์ธต์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
์๋ฅผ ๋ค์ด์ ์ฐ๋ฆฌ ์์คํ
์ primary ์์์ด #FF0000 ์ด๋ผ๋ฉด, ๋ค์๊ณผ ๊ฐ์ด 4๊ฐ ๊ณ์ธต์ ๊ฑธ์ณ์ ์ ์๋์ด ์๊ฒ ๋ค์.
Raw Value | Primitive | Semantic | Component |
---|---|---|---|
#FF0000 | red-100 | bg-primary | button-bg-primary |
๋ง์ฝ์ button-bg-primary์ ์์์ ๋นจ๊ฐ์์์ ํ๋์์ผ๋ก ๋ณ๊ฒฝํ๊ณ ์ถ์ผ๋ฉด,
- primitive์ธ red-100์ raw value #FF0000์ #0000FF๋ก ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ๋ ์๊ฒ ์ง๋ง,
- bg-primary์ ๊ฐ์ #0000FF์ ๊ฐ์ ๊ฐ๊ณ ์๋ blue-100๋ก ์ฃผ๋ ํธ์ด ๊ตฌ์กฐ๋ฅผ ์ ์ ์งํ๋ ๋ฐฉ๋ฒ์ด๊ฒ ์ฃ .
๋์์ธ ์์คํ ์ ๋์์ธ ํ ํฐ๋ ์ญ์ key(name):value๋ก ๊ตฌ์ฑ๋์ด ์๋ ๋ค๋ฅธ ๋ณ์๋ค๊ณผ ๊ฐ์์, ์ฐธ์กฐํ๊ณ ์๋ ๊ฐ์ด ๋ณ๊ฒฝ๋๊ฑฐ๋ ์์ผ๋ฉด ๊ทธ์ ๋ฐ๋ฅธ side effect๊ฐ ๋ฐ์ํฉ๋๋ค.
2. ๊ธ๋ก๋ฒ ํ ํฐ ๋ด๋ณด๋ด๊ธฐ
Tokens Studio - JSON Schema Tokens Studio์์๋ ๋ค์๊ณผ ๊ฐ์ด JSON ์คํค๋ง๋ก ๋์์ธ ํ ํฐ์ ๋ด๋ณด๋ด๋ ๊ธฐ๋ฅ์ด ์์ต๋๋ค.
์ฐ๋ฆฌ ๋ชจ๋๊ฐ ์์ํ ๋๋ก JSON์ด ์์ผ๋ฉด .. ์ฝ๋ํ ์์ผ์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์๊ธฐ ๋ง๋ จ์
๋๋ค.
style dictionary ๋ฌธ์์์ ํ์ธํ ์ ์๋๋ฐ์,
{
"source": ["tokens/**/*.json"],
"platforms": {
"scss": {
"transformGroup": "scss",
"prefix": "sd",
"buildPath": "build/scss/",
"files": [
{
"destination": "_variables.scss",
"format": "scss/variables"
}
],
"actions": ["copy_assets"]
},
"android": {
"transforms": ["attribute/cti", "name/snake", "color/hex", "size/remToSp", "size/remToDp"],
"buildPath": "build/android/src/main/res/values/",
"files": [
{
"destination": "style_dictionary_colors.xml",
"format": "android/colors"
}
]
}
}
}
ํ๋ซํผ์ ๋ฐ๋ฅธ ๋ณํ๋ ๊ฐ๋ฅํ๊ณ , ์คํค๋ง ์ ์ธ์ ๋ฐ๋ผ์ ๋ณผ ํ์ผ๊ณผ ๋ณํํ ํ์ผ์ ๋ํ ์ ์๋ง ์ ํด์ฃผ๋ฉด ์ ๋ณํํด์ค๋๋ค. ๋์์ธ ํ ํฐ์ ๋ณ๊ฒฝ์ฌํญ์ CI์ ๋ฌถ์ด์ผ ํ๋์ง๋ ๊ณ ๋ฏผ๋๋ ์ฌํญ์ธ๋ฐ์, ์ํฐ๋์ ๋์์ธ์์คํ ํผ๊ทธ๋ง ๋๊ธ์์ ํํธ๋ฅผ ์ป์์ต๋๋ค.
์ด์ฐจํผ ๋ณ๊ฒฝ์ ์ huamn followup์ด ํ์ํ ๋ถ๋ถ์ด๊ธฐ ๋๋ฌธ์, ์๋ํ๋ฅผ ํ์ง ์๊ณ ์๋ค๋ ๊ฒ์ผ๋ก ์ดํดํ์ด์.
1๊ฐ ์ปดํฌ๋ํธ์ ์์ ์ด ์๋, ๋์์ธ ํ ํฐ ๋จ์์ ์์ ์ ์ ์ญ์ ์ด๊ณ / ๋ฐ์ํ ์ ์๋ ์ฌ์ด๋์ดํํธ์ ๋ฒ์๊ฐ ๋์์ผ๋ก, ์์
์ ์๋ํ๋ฅผ ํ๋, ์๋ ์ ์ฉ๋๊ธฐ์๋ ๋ฌด๋ฆฌ๊ฐ ์๊ฒ ๋ค๋ ๋ฐ ๋์ํ์ต๋๋ค.
๋ค์ ์๊ฐ์ ..
์ค๋๋ ์ญ์ ์ฉ๋์ฌ๋ฏธ์
๋๋ค.
๋ค์ ์ฃผ์ ์ปดํฌ๋ํธ ๋งํฌ์
์ถ์ถ๊ณผ ์ฝ๋๋ก ๋ณด๋ ์์๋ก ๋์์ค๊ฒ ์ต๋๋ค.