๐ Custom Component ๋?
React์์ Custom component๋, ๊ฐ๋ฐ์๊ฐ ์ง์ ์์ฑํ์ฌ ์ฌ์ฌ์ฉํ ์ ์๋ ์ปดํฌ๋ํธ๋ฅผ ์๋ฏธํฉ๋๋ค. ์ด๋ฌํ ์ปดํฌ๋ํธ๋ ๋ณดํต JSX๋ก ์์ฑ๋๋ฉฐ, ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ก๋ถํฐ ์ ๋ฌ๋ ํ๋กํผํฐ๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ๋ ๋๋งํฉ๋๋ค. ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค์ด ๋ค๋ฅธ ์ปดํฌ๋ํธ์์ ์ฌ๋ฌ๋ฒ ์ฌ์ฉํ ์ ์๊ณ , ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ง๋ณด์์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ ํฅ์์ํค๋ ๋ฐ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
๐ CDD ๋?
Component Driven Development ์ ์ฝ์๋ก, ์ปดํฌ๋ํธ๋ฅผ ์ค์ฌ์ผ๋ก ๊ฐ๋ฐํ๋ ๋ฐฉ๋ฒ๋ก ์ ๋งํฉ๋๋ค. ์ด๋ UI๋ฅผ ์์ ๋จ์๋ก ์ชผ๊ฐ์ด ๊ฐ๋ฐํ๊ณ , ๊ฐ๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐ ๋ฐ ํ ์คํธํ๊ณ , ์ด๋ค์ ๋ค์ ์กฐํฉํ์ฌ ํฐ ํ๋ฉด์ ๋ง๋๋ ๊ฒ์ ์ค์ฌ์ผ๋ก ํฉ๋๋ค.
CDD๋ React์ ๊ฐ์ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ๋ ์์ํฌ์์ ํนํ ์ ์ฉํฉ๋๋ค. ์ปดํฌ๋ํธ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ฐํ๋ฉฐ ์ ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ง๋ณด์์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๊ณ , ๋ ๋์ ํ์ง์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
๐ CDD์ ์ฅ์
- ๋ชจ๋ํ : ์ปดํฌ๋ํธ ๋จ์๋ก ๊ฐ๋ฐํ๊ธฐ ๋๋ฌธ์ ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง๊ณ ์ฌ์ฌ์ฉ์ฑ์ด ๋์์ง๋๋ค.
- ๋น ๋ฅธ ํผ๋๋ฐฑ : ์ปดํฌ๋ํธ ๋จ์๋ก ํ ์คํธํ๊ณ ๊ฐ๋ฐํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์๋ ๋น ๋ฅธ ํผ๋๋ฐฑ์ ๋ฐ์ ์ ์์ต๋๋ค.
- ํ์ : ๊ฐ๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐํ๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ๊ฐ๋ฐ์๊ฐ ํ์ ํ ๋ ์ถฉ๋์ด๋ ์ํฅ์ ์ค์ด๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ํ์ง : ์์ ๋จ์๋ก ํ ์คํธํ๊ณ ๊ฐ๋ฐํ๊ธฐ ๋๋ฌธ์ ํ์ง ๊ด๋ฆฌ๊ฐ ์์ํด์ง๋ฉฐ, ํ ์คํธ์ ๋ฒ์๋ฅผ ์ค์ฌ ๋ ํจ์จ์ ์ผ๋ก ํ ์คํธ๋ฅผ ์งํํ ์ ์์ต๋๋ค.
๐ CSS in JS ๋?
์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ ์์์ CSS๋ฅผ ์์ฑํ๋ ๋ฐฉ์์ผ๋ก, ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด ์คํ์ผ์ ์ ์ํฉ๋๋ค. ์ด๋ ๊ฒ ์์ฑ๋ ์คํ์ผ ๊ฐ์ฒด๋ ํ๋ ์์ํฌ์์ ์ ๊ณตํ๋ ์ปดํฌ๋ํธ์ ํจ๊ป ์ฌ์ฉ๋ฉ๋๋ค. React์์๋ styled-components, Emotion ๋ฑ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๐ CSS in JS ์ ์ฅ์
- ์คํ์ผ๊ณผ ์ปดํฌ๋ํธ๊ฐ ๊ฒฐํฉํ์ฌ ์์ด์, ์ปดํฌ๋ํธ์ ์ฌ์ฌ์ฉ์ฑ์ด ๋์์ง๋๋ค.
- CSS ํด๋์ค ์ด๋ฆ ์ถฉ๋์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋์ ์คํ์ผ ์ฝ๋๊ฐ ํจ๊ป ์ ์ง๋ณด์๋๊ธฐ ๋๋ฌธ์, ์ปดํฌ๋ํธ์ ์คํ์ผ์ ์ฝ๊ฒ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
- ์กฐ๊ฑด๋ถ ์คํ์ผ๋ง์ด ์ฝ๊ณ , CSS Prepocessor์ ๋ณ์, ํจ์ ๋ฑ์ ์ฌ์ฉํ ์ ์์ด ์์ฐ์ฑ์ด ๋์์ง๋๋ค.
ํ๋ก์ ํธ์ ๊ท๋ชจ๋ ๋ณต์ก๋๊ฐ ์ ์ ์ปค์ง๊ณ , ํ ๊ตฌ์ฑ์์ ์๋ ๋ง์์ง์ ๋ฐ๋ผ CSS๋ฅผ ์์ฑํ๋๋ฐ ์ผ๊ด๋ ํจํด์ด ํ์ํด์ก์ต๋๋ค. ์ด๋ฌํ ๋ฌธ์ ์ ๋ค์ ํด๊ฒฐํ๊ธฐ ์ํด CSS ์ ์ฒ๋ฆฌ๊ธฐ(CSS Preprocessor)๋ผ๋ ๊ฐ๋ ์ด ๋ฑ์ฅํ์ต๋๋ค. CSS๊ฐ ๊ตฌ์กฐ์ ์ผ๋ก ์์ฑ๋ ์ ์๊ฒ ๋์์ ์ฃผ๋ ๋๊ตฌ์ ๋๋ค.
๐ CSS Preprocessor ์ด๋?
CSS๋ฅผ ์์ฑํ๊ธฐ ์ํ ์ธ์ด๋ก, CSS์ ๊ธฐ๋ฅ์ ํ์ฅํ๊ณ ์์ฐ์ฑ์ ๋์ด๊ธฐ ์ํด ๋ง๋ค์ด์ก์ต๋๋ค. CSS Preprocessor ์์๋ ๋ณ์, ํจ์, ๋ฏน์ค์ธ ๋ฑ์ ๊ธฐ๋ฅ์ ์ ๊ณตํด CSS ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์ด๊ณ , ์ฝ๋์ ์ค๋ณต์ ์ค์ฌ ํจ์จ์ฑ๊ณผ ์ผ๊ด์ฑ์ ๋์ผ ์ ์์ต๋๋ค. ๋ํ ๊ฐ๋ฐ์๋ค ์ฌ์ด์ ์ฝ๋ ์คํ์ผ ์ฐจ์ด๋ ํ์์์ ํ์คํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
ํ์ง๋ง, CSS์์ ํธํ์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๊ณ , ์ ๋ฌธ๋ฒ๊ณผ ๊ธฐ๋ฅ์ ๋ฐฐ์์ ํ๋ ๋จ์ ์ด ์์ต๋๋ค. ๋ฐ๋ผ์ CSS Preprocessor์ ์์ฐ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์ด๋ ์ ์ฉํ ๋๊ตฌ์ด์ง๋ง ํ๋ก์ ํธ์ ์๊ตฌ์ฌํญ๊ณผ ๊ฐ๋ฐ ํ๊ฒฝ์ ๊ณ ๋ คํด ์ฌ์ฉํด์ผ ํฉ๋๋ค.
CSS ์ ์ฒ๋ฆฌ๊ธฐ ์์ฒด๋ง์ผ๋ก๋ ์น ์๋ฒ๊ฐ ์ธ์งํ์ง ๋ชปํ๋ฏ๋ก ์ฌ๊ธฐ์ ๋ง๋ Compiler๋ฅผ ์ฌ์ฉํด์ผ ํ๊ณ , ์ปดํ์ผ์ ํ๊ฒ ๋๋ฉด ์ค์ ๋ก ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ CSS ๋ฌธ์๋ก ๋ณํ์ด ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด CSS ํ์ผ๋ค์ ์ ๊ตฌ์กฐํํ ์ ์๊ฒ ๋์๊ณ , CSS ํ์ผ์ ์๊ฒ ๋ถ๋ฆฌํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๊ฒผ์ต๋๋ค.
๊ฐ์ฅ ์ ๋ช
ํ CSS ์ ์ฒ๋ฆฌ๊ธฐ๋ก, CSS๋ฅผ ํ์ฅํด ์ฃผ๋ ์คํฌ๋ฆฝํ
์ธ์ด์
๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์ฒ๋ผ ํน์ ์์ฑ์ ๊ฐ์ ๋ณ์๋ก ์ ์ธํ์ฌ ํ์ํ ๊ณณ์ ์ ์ธ๋ ๋ณ์๋ฅผ ์ ์ฉํ ์๋ ์๊ณ , ๋ฐ๋ณต๋๋ ์ฝ๋๋ฅผ ํ ๋ฒ์ ์ ์ธ์ผ๋ก ์ฌ๋ฌ ๊ณณ์์ ์ฌ์ฌ์ฉํ ์ ์๋๋ก ํด ์ฃผ๋ ๋ฑ์ ๊ธฐ๋ฅ์ ๊ฐ์ก์ต๋๋ค.
SASS๋ SCSS ์ฝ๋๋ฅผ ์ฝ์ด ์ ์ฒ๋ฆฌํ ๋ค์ ์ปดํ์ผํด์ ์ ์ญ CSS ๋ฒ๋ค ํ์ผ์ ๋ง๋ค์ด ์ฃผ๋ ์ ์ฒ๋ฆฌ๊ธฐ์ ์ญํ ์ ํฉ๋๋ค. ํ์ง๋ง CSS์ ๊ตฌ์กฐํ๋ฅผ ํด๊ฒฐํด์ฃผ๋ ๋์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ง๋๋๋ฐ ์์งํ๊ณ CSS ์ฉ๋์ด ์ปค์ง๋ ๋จ์ ์ด ์๊ฒผ์ต๋๋ค.
๐ SASS
- Sassy CSS์ ์ฝ์๋ก, CSS๋ฅผ ๋ณด๋ค ํจ์จ์ ์ผ๋ก ์์ฑํ ์ ์๋๋ก ๋์์ฃผ๋ ์ ์ฒ๋ฆฌ๊ธฐ์ ๋๋ค. ๊ธฐ์กด์ CSS๋ฌธ๋ฒ๊ณผ ๊ฑฐ์ ๋์ผํ์ง๋ง, ๋ณ์, ํจ์, ์ค์ฒฉ ๋ฑ์ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋ CSS ํ์ฅ ๋ฌธ๋ฒ์ ๋๋ค.
$primary-color
๊ณผ ๊ฐ์ ํ์์ผ๋ก ๋ณ์๋ฅผ ๋ง๋ค์ด, ์ฌ๋ฌ ํด๋์ค์ ์์์ ์ผ๊ด์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.- CSS์ ํจ๊ป ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, SCSS์ฝ๋๋ฅผ CSS๋ก ์ปดํ์ผํ์ฌ ์ฌ์ฉํฉ๋๋ค. CSS์ ์ ์ฌํ ๋ฌธ๋ฒ์ ๊ฐ์ง๊ณ ์์ด ๊ฐ๋ฐ์๋ค์ด ์ฝ๊ฒ ์ ์ํ ์ ์๋ ์ ์ฒ๋ฆฌ๊ธฐ ์ค ํ๋์ ๋๋ค.
๐ ์ปดํ์ผ(Compile)
์์ค ์ฝ๋๋ฅผ ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ๋ค๋ฅธ ์ธ์ด๋ก ๋ฒ์ญํ๋ ๊ณผ์ ์ ๋งํฉ๋๋ค. ์ปดํ์ผ๋ฌ๋ ์์ค ์ฝ๋๋ฅผ ๋ฐ์์ ํด๋น ์ธ์ด์ ๋ฌธ๋ฒ์ ๋ง๊ฒ ๋ถ์ํ๊ณ , ๊ธฐ๊ณ์ด๋ ๋ฐ์ดํธ์ฝ๋ ๋ฑ์ผ๋ก ๋ณํํด ์คํ ๊ฐ๋ฅํ ํ์ผ์ ๋ง๋ญ๋๋ค. ์ปดํ์ผ์ ์์ค ์ฝ๋์ ์ค๋ฅ๋ฅผ ์ฐพ๋ ๊ฒ๋ฟ๋ง ์๋๋ผ, ์์ค ์ฝ๋๋ฅผ ๋ณด๋ค ํจ์จ์ ์ผ๋ก ์คํ ๊ฐ๋ฅํ ํํ๋ก ๋ณํํจ์ผ๋ก์จ ์ํํธ์จ์ด์ ์ฑ๋ฅ๊ณผ ์์ ์ฑ์ ํฅ์ํ๋ ์ญํ ์ ํฉ๋๋ค. ์ปดํ์ผ์ ๊ฒฐ๊ณผ๋ฌผ์ ์ผ๋ฐ์ ์ผ๋ก ์คํ๊ฐ๋ฅํ ํ์ผ์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํํ๋ก ์ ๊ณต๋๋ฉฐ, ์ด๋ฅผ ํตํด ์ํํธ์จ์ด๋ฅผ ๋ฐฐํฌํ๊ณ ์คํํ ์ ์์ต๋๋ค.
SASS๋ฅผ ๋ณด์ํ๊ธฐ ์ํด BEM, OOCSS, SAMCSS ๊ฐ์ ๋ฐฉ๋ฒ๋ก ์ด ๋๋๋์๊ณ ๊ฐ ์ฅ๋จ์ ์ด ์์ง๋ง, ๋ชจ๋ ๋ฐฉ๋ฒ์ ์ฝ๋์ ์ฌ์ฌ์ฉ, ์ฝ๋์ ๊ฐ๊ฒฐํ(์ ์ง ๋ณด์ ์ฉ์ด), ์ฝ๋์ ํ์ฅ์ฑ, ์ฝ๋์ ์์ธก์ฑ์ ์งํฅํฉ๋๋ค.
๋ํ์ ์ธ CSS ๋ฐฉ๋ฒ๋ก ์ผ๋ก BEM์ด ์์ต๋๋ค. Block, Element, Modifier๋ก ๊ตฌ๋ถํ์ฌ ํด๋์ค ๋ช
์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ๊ฐ -
, _
๋ก ๊ตฌ๋ถํฉ๋๋ค. ํด๋์ค ๋ช
์ BEM ๋ฐฉ์์ ์ด๋ฆ์ ์ฌ๋ฌ ๋ฒ ๋ฐ๋ณตํ์ฌ ์ฌ์ฌ์ฉํ ์ ์๋๋ก ํ๋ฉฐ, ๋ ์ผ๊ด๋ ์ฝ๋ฉ๊ตฌ์กฐ๋ฅผ ๋ง๋ค์ด ์ค๋๋ค.
ํ์ง๋ง ์ฌ๊ธฐ์๋ ๋ฌธ์ ์ ์ ์์ต๋๋ค. ํด๋์ค ๋ช ์ ํ์๊ฐ ์ฅํฉํด์ง๊ณ ๊ธด ํด๋์ค ๋ช ๋๋ฌธ์ ๋งํฌ์ ์ด ๋ถํ์ํ๊ฒ ์ปค์ง๊ณ , ์ฌ์ฌ์ฉ ์ ๋ชจ๋ UI ์ปดํฌ๋ํธ๋ฅผ ๋ช ์์ ์ผ๋ก ํ์ฅํด์ผ ํฉ๋๋ค. ๋ SASS์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ง์ ํ ์บก์ํ ๊ฐ๋ ์ด ์์ด์ ๊ฐ๋ฐ์๋ค์ด ์ ์ผํ ํด๋์ค ๋ช ์ ์ ํํ๋๋ฐ ์์กดํ์ต๋๋ค.
์ปดํฌ๋ํธ ๋จ์์ ๊ฐ๋ฐ์ ์บก์ํ์ ์ค์์ฑ์ ๋ถ๋ฌ์๊ณ , CSS๋ ์ปดํฌ๋ํธ ์์ญ์ผ๋ก ๋ถ๋ฌ๋ค์ด๊ธฐ ์ํด ํ์ํ์ต๋๋ค. ๋ํ์ ์ผ๋ก Styled-Component๊ฐ ์์ต๋๋ค.
Styled-Compnent๋ ๊ธฐ๋ฅ์ ํน์ ์ํ๋ฅผ ๊ฐ์ง ์ปดํฌ๋ํธ๋ค๋ก๋ถํฐ UI๋ฅผ ์์ ํ ๋ถ๋ฆฌํด ์ฌ์ฉํ ์ ์๋ ์์ฃผ ๋จ์ํ ํจํด์ ์ ๊ณตํฉ๋๋ค.
๐ CSS in JS ์ ํ์ด์ง ๋ก๋ ์๋
์ผ๋ฐ์ ์ผ๋ก ๊ธฐ์กด์ ์ธ๋ถ CSS ํ์ผ๊ณผ ๋น๊ตํด ๋ค์ ๋ฌด๊ฑฐ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ , ํ์ด์ง ๋ก๋ ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋ก๋ํ๊ณ ์คํํด์ผ ํ๋ฏ๋ก ์ด๊ธฐ ๋ก๋ฉ ์๊ฐ์ด ๋ ์ค๋ ๊ฑธ๋ฆด ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ํฉ์ ๋ฐ๋ผ ํ์ด์ง ๋ก๋ฉ ์๋์ ๋ฏธ์น๋ ์ํฅ์ ๋ค๋ฆ ๋๋ค. CSS ์ฝ๋๊ฐ ์ ์ ๊ฒฝ์ฐ CSS in JS๋ฅผ ์ฌ์ฉํด ๊ทธ ์ฝ๋๋ฅผ ๋์ ์ผ๋ก ์์ฑํ ์ ์๊ณ , ์ฌ์ฉ์๊ฐ ํ์๋ก ํ๋ ์ฝ๋๋ง ๋ก๋๋๋ฏ๋ก ์ด๊ธฐ ๋ก๋ฉ ์๊ฐ์ด ๋จ์ถ๋ ์๋ ์์ต๋๋ค.
CSS in JS๋ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํ ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ์ผ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฌ์ฉํ์ง ์๋ ์คํ์ผ์ ์๋์ผ๋ก ์ ๊ฑฐํ๊ณ , ๋ ๋๋ง ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํด ์คํ์ผ์ ๋์ฑ ํจ์จ์ ์ธ ๋ฐฉ์์ผ๋ก ์ ์ฉํ๋ฏ๋ก์จ ํ์ด์ง ๋ก๋ฉ ์๋๋ฅผ ํฅ์์ํฌ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ํ์ด์ง ๋ก๋ฉ ์๋๋ ์ํฉ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
๐ CSS in JS ์ ๋ฒ๋ค์ ํฌ๊ธฐ
์ผ๋ฐ์ ์ผ๋ก CSS in JS ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฒ๋ค์ ํฌ๊ธฐ๊ฐ ์ฆ๊ฐํฉ๋๋ค. ์ถ๊ฐ์ ์ธ ์ฝ๋์ ๋ก์ง์ ํฌํจํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ ์ผ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์์ฒด CSS ํด์๊ธฐ๋ฅผ ์ฌ์ฉํด CSS ์ฝ๋๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด๋ก ๋ณํํ๊ณ , ์ด ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด ์คํ์ผ์ ์ ์ฉํ๋ ๊ณผ์ ์์ ์ถ๊ฐ์ ์ธ ์ฒ๋ฆฌ๊ฐ ๋ค์ด๊ฐ ๋ฒ๋ค์ ํฌ๊ธฐ๊ฐ ์ปค์ง๋๋ค.
ํ์ง๋ง ์ด๋ฌํ ํฌ๊ธฐ์ ์ฆ๊ฐ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฏธ๋ฏธํ ํธ์ ๋๋ค. ๋๋ถ๋ถ CSS in JS ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด ์์ฑํ๋ ์ฝ๋๋ ์ผ๋ฐ์ ์ธ CSS ์ฝ๋๋ณด๋ค ์ ์ ์ฉ๋์ ์ฐจ์งํ๊ณ ์ผ๋ฐ์ ์ผ๋ก ์ฝ๋๋ฅผ ์์ถํ๊ณ ์ต์ ํํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํด ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ต์ํํ ์ ์์ต๋๋ค.
์ฆ, ๋ฒ๋ค ํฌ๊ธฐ๊ฐ ์ฝ๊ฐ ์ฆ๊ฐํ ์ ์์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ๋ฌด์ํ ์ ์๋ ์์ค์ด๊ณ , ์ด๋ฅผ ์์ํ ์ด์ ์ด ๋์ฑ ๋ง์ต๋๋ค.
๐ Styled Components ๋?
React ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ปดํฌ๋ํธ ์คํ์ผ๋ง์ ๋จ์ํํ๊ณ ๋ชจ๋ํํ ์ ์๋๋ก ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๋๋ค. Styled Components๋ฅผ ์ฌ์ฉํ๋ฉด JS ์ฝ๋ ์์์ CSS ์คํ์ผ์ ์์ฑํ ์ ์์ผ๋ฉฐ, ํด๋์ค ์ด๋ฆ ์ถฉ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
๐ Styled Components ์ ํน์ง
1. CSS-in-JS : Styled Components๋ JavaScript ํ์ผ ์์์ CSS ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ CSS in JS ๊ฐ๋ ์ ํด๋นํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ปดํฌ๋ํธ ์คํ์ผ๋ง๊ณผ ๊ด๋ จ๋ JS์ CSS ์ฝ๋๋ฅผ ํ๋ฐ ๋ชจ์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
2. ์ปดํฌ๋ํธ ๋จ์ ์คํ์ผ๋ง : ์คํ์ผ์ด ๋ชจ๋ํ ๋๊ณ , ์ปดํฌ๋ํธ ๋ณ๋ก ์คํ์ผ๋ง์ ์ ์ฉํ ์ ์์ต๋๋ค. ์ด๋ ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
3. ๋์ ์คํ์ผ๋ง : ๋์ ์ผ๋ก ์คํ์ผ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค. ์ด๋ React์ State๋ Props ๊ฐ์ ํ์ฉํด ์ปดํฌ๋ํธ์ ์คํ์ผ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
4. CSS ๋ณ์ : ๋ณ์๋ฅผ ์ฌ์ฉํด ๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๋๋ ์คํ์ผ ๊ฐ๋ค์ ๋ณ์๋ก ์ ์ธํด ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ ์คํ์ผ๋ง์ ๊ตฌํํ ์ ์์ค๋น๋ค.
5. ํ ๋ง ์ง์ : ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ ์ธ ์คํ์ผ๋ง์ ์ผ๊ด์ฑ ์๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค.
Styled Components๋ CSS in JS ๋ผ๋ ๊ฐ๋ ์ด ๋๋๋๋ฉด์ ๋์จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ํ์ฌ ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. CSS๋ฅผ ์ปดํฌ๋ํธํ ์์ผ์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ์ด๋ฅผ ์ฌ์ฉํด CSS๋ ์ฝ๊ฒ JavaScript ์์ ๋ฃ์ด์ฃผ์ด HTML + CSS + JS๋ฅผ ๋ฌถ์ด ํ๋์ JS ํ์ผ ์์์ ์ปดํฌ๋ํธ ๋จ์๋ก ๊ฐ๋ฐํ ์ ์๊ฒ ๋ฉ๋๋ค.
๐ Styled Components ์ค์น
npm install --save sytled-components
- package.json์ ๋ค์ ์ฝ๋๋ฅผ ์ถ๊ฐ
{ "resolutions" : { "styeld-components" : "^5" }}
import styeld from "styeld-components"
๋ก ๋ถ๋ฌ์์ ์ฌ์ฉ
const ์ปดํฌ๋ํธ๋ช
=
์ผ๋ก ์ปดํฌ๋ํธ๋ฅผ ์ ์ธํฉ๋๋ค. styled.ํ๊ทธ
๋ฅผ ํ ๋นํ๊ณ ๋ฐฑํฑ(`)์์ CSS๋ฌธ๋ฒ๊ณผ ๋๊ฐ์ด ์คํ์ผ ์์ฑ์ ์์ฑํด์ฃผ๋ฉด ์ปดํฌ๋ํธ๊ฐ ๋ง๋ค์ด์ง๋๋ค. React ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ฏ ๋ฆฌํด๋ฌธ ์์ ์์ฑํด์ฃผ๋ฉด ์คํ์ผ์ด ์ ์ฉ๋ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋ฉ๋๋ค.styled()
์ ์ฌํ์ฉํ ์ปดํฌ๋ํธ๋ฅผ ์ ๋ฌํด ์ค ๋ค์, ์ถ๊ฐํ๊ณ ์ถ์ ์คํ์ผ ์์ฑ์ ์์ฑํฉ๋๋ค.${}
์ ์ฌ์ฉํด Props๋ฅผ ์ธ์๋ก ๋ฐ๋ ํจ์๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.Props ๋ก ์กฐ๊ฑด๋ถ ๋ ๋๋งํ๊ธฐ
์คํ์ผ์ ์กฐ๊ฑด๋ถ๋ก ์ค์ ํ ์ ์์ต๋๋ค.
//EX
const Button = styled.button`
background : ${(props) => props.red ? "red" : "white"}
`; // ๋ฐฐ๊ฒฝ์์ ๋ฐ์์จ ๊ฐ์ด ๋ ๋๋ฉด ๋ ๋๋ก, ์๋๋ฉด ํ์ดํธ๋ก ์ง์ ํด์ฃผ๋ ์ฝ๋
Props ๊ฐ์ผ๋ก ๋ ๋๋งํ๊ธฐ
const Button = styled.button`
backgroun : ${(props) => props.color ? props.color : "white"}
`; // props.color ์ ๋ฌด์ ๋ฐ๋ผ ์์ผ๋ฉด ๊ทธ๋๋ก ๊ฐ์ ๊ฐ์ ธ์ ๋ฆฌํดํด์ฃผ๊ณ ์๋๋ฉด ํ์ดํธ๋ก ์ง์ ํ๋ ์ฝ๋
๊ผญ ์ผํญ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ๊ฒ์ ์๋๊ณ JS ์ฝ๋๋ผ๋ฉด ๋ฌด์์ด๋ ๊ฐ๋ฅํฉ๋๋ค.
// ์ฐ์ `createGlobalStyle` ํจ์๋ฅผ ๋ถ๋ฌ์ต๋๋ค.
import { createGlobalStyle } from "styled-components"
//๋ถ๋ฌ์จ ํจ์๋ฅผ ์ฌ์ฉํด ์ค์ ํด์ฃผ๊ณ ์ถ์ ์คํ์ผ์ ์์ฑํฉ๋๋ค.
const GlobalStyle = createGlobalStyle`
button {
padding : 5px;
margin : 2px;
}
`
//๋ง๋ <GlobalStyle> ์ปดํฌ๋ํธ๋ฅผ ์ต์์ ์ปดํฌ๋ํธ์์ ์ฌ์ฉํด์ค๋๋ค.
function App() {
return (
<>
<GlobalStyle />
<Button> ์ ์ญ๋ฒํผ </Button>
</>
);
}
CDD๋ฅผ ์ง์ํ๋ ๋๊ตฌ๋ก Component Explorer(์ปดํฌ๋ํธ ํ์๊ธฐ)๊ฐ ๋ฑ์ฅํ๊ณ , ๋ค์ํ UI ๊ฐ๋ฐ๋๊ตฌ ์ค ํ๋๊ฐ StoryBook ์ ๋๋ค.
๐ StoryBook ์ด๋?
UI ๊ฐ๋ฐ์ ์ํ ์คํ์์ค ๋๊ตฌ๋ก, React, Vue, Angular ๋ฑ์ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ค์๊ฒ ๋ง์ด ์ฌ์ฉ๋๋ ๋๊ตฌ ์ค ํ๋์ ๋๋ค. StoryBook ์ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฐ์๋ค์ ์ปดํฌ๋ํธ์ ๊ฐ๋ณ์ ์ธ ๊ธฐ๋ฅ๊ณผ UI ๋์์ธ์ ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐํ ์ ์์ต๋๋ค. ์ด๋ ๊ฐ๋ฐ์๋ค์ด ์ปดํฌ๋ํธ๋ฅผ ๊ฐ๋ฐํ ๋, ๋์์ธ, ๋ ์ด์์, ๋ก์ง ๋ฑ์ ๋ชจ๋ ๋์์ ๊ณ ๋ คํด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ ์ค์ฌ์ค๋๋ค.
StoryBook์ ๋ค์ํ ์คํ ๋ฆฌ๋ถ ์ปดํฌ๋ํธ๋ฅผ ๊ตฌ์ฑํ์ฌ ๊ตฌ์ฑ์์์ ์๊ฐ์ ๋ชจ์ต ๋ฐ ๋์์ ๋ฌธ์ํํ ์ ์์ต๋๋ค. ๋ค๋ฅธ ๊ฐ๋ฐ์๋ ๋์์ด๋๋ค์ด ์ปดํฌ๋ํธ๋ฅผ ์ดํดํ๊ณ ์ฌ์ฉํ ์ ์๋๋ก ๋์์ค๋๋ค. ๋ํ ๋ค์ํ ์ ๋์จ๊ณผ ํ์ฅ์ฑ์ด ๋ฐ์ด๋๊ธฐ ๋๋ฌธ์, ๋ค์ํ ๊ฐ๋ฐ ํ๋ก์ธ์ค์ ๋ง์ถ์ด ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ง์ง๋ง์ผ๋ก ์คํ์์ค ๋๊ตฌ๋ก ๋ค์ํ ์ปค๋ฎค๋ํฐ์์ ์ฌ์ฉ์๋ค์ ํผ๋๋ฐฑ๊ณผ ๊ธฐ์ฌ๋ฅผ ๋ฐ์ผ๋ฏ๋ก, ์ง์์ ์ธ ๊ฐ์ ๊ณผ ๋ฐ์ ์ด ์ด๋ฃจ์ด์ง๊ณ ์์ด ๋ ๋์ UI ๊ฐ๋ฐ๊ฒฝํ์ ๋์ต๋๋ค.
๊ฐ๊ฐ์ ์ปดํฌ๋ํธ๋ค์ ๋ฐ๋ก ๋ณผ ์ ์๊ฒ ๊ตฌ์ฑํด์ฃผ์ด ํ๋ฒ์ ํ๋์ ์ปดํฌ๋ํธ์์ ์์ ํ ์ ์์ด ์ ์ฒด UI๋ฅผ ํ ๋์ ๋ณด๊ณ ๊ฐ๋ฐํ ์ ์์ต๋๋ค.
StoryBook์ ์ฌ์ฌ์ฉ์ฑ์ ํ๋ํ๊ธฐ ์ํด ์ปดํฌ๋ํธ๋ฅผ ๋ฌธ์ํํ๊ณ , ์๋์ผ๋ก ์ปดํฌ๋ํธ๋ฅผ ์๊ฐํํ์ฌ ์๋ฎฌ๋ ์ด์ ํ ์ ์๋ ๋ค์ํ ํ ์คํธ ์ํ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. ์ฌ์ ์ ๋ฒ๊ทธ๋ฅผ ๋ฐฉ์งํ๋๋ก ๋์์ฃผ๊ณ ํ ์คํธ ๋ฐ ๊ฐ๋ฐ ์๋๋ฅผ ํฅ์์ํค๋ ์ฅ์ ์ด ์๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ๋ํ ์์กด์ฑ์ ๊ฑฑ์ ํ์ง ์๊ณ ๋น๋ํ ์ ์์ต๋๋ค.
StoryBook์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ ๋ฆฝ์ ์ธ ๊ฐ๋ฐํ๊ฒฝ์์ ์คํ๋ฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์ํ ์ํฉ์ ๊ตฌ์ ๋ฐ์ง ์๊ณ UI์ปดํฌ๋ํธ๋ฅผ ์ง์ค์ ์ผ๋ก ๊ฐ๋ฐํ ์ ์๊ณ , ํ์ฌ์ ๋ด๋ถ ๊ฐ๋ฐ์๋ค์ ์ํด ๋ฌธ์ํ ํ์ฌ ํ์ฌ UI๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ฌ์ฉํ๊ฑฐ๋, ์ธ๋ถ ๊ณต๊ฐ์ฉ ๋์์ธ์์คํ ์ ๊ฐ๋ฐํ๊ธฐ ์ํ ๊ธฐ๋ณธ ํ๋ซํผ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
UI ์ปดํฌ๋ํธ๋ค ์นดํ๋ก๊ทธํ
์ปดํฌ๋ํธ ๋ณํ๋ฅผ Stories๋ก ์ ์ฅ
ํซ ๋ชจ๋ ๋ฆฌ๋ก๋ฉ๊ณผ ๊ฐ์ ๊ฐ๋ฐ ํด ๊ฒฝํ ์ ๊ณต
๐ ํซ ๋ชจ๋ ๋ฆฌ๋ก๋ฉ(Hot Module Reloading)
์น ๊ฐ๋ฐ์์ ์ฝ๋ ์์ ์ ํ์ด์ง ์ ์ฒด๋ฅผ ๋ฆฌ๋ก๋ฉํ์ง ์๊ณ ๋ ์์ ํ ์ฝ๋ ๋ถ๋ถ๋ง ๋น ๋ฅด๊ฒ ์ ์ฉํ๋ ๊ธฐ์ ์ ๋๋ค. ์ด๋ ๊ฐ๋ฐ์๋ค์ด ์ฝ๋๋ฅผ ์์ ํ๋ฉด์ ๊ฐ๋ฐ ์์ฐ์ฑ์ ๋์ด๊ณ , ์๋ก๊ณ ์นจ์ ์ํ ์๊ฐ ๋ญ๋น๋ฅผ ์ค์ด๋ ๋ฐ ๋์์ ์ค๋๋ค. ๋ณดํต ์นํฉ๊ณผ ๊ฐ์ ๋ชจ๋ ๋ฒ๋ค๋ฌ์์ ์ง์๋ฉ๋๋ค. ์นํฉ์ ํซ ๋ชจ๋ ๋ฆฌ๋ก๋ฉ์ ์ํด ๊ฐ๋ฐ ์๋ฒ์์ ์์ค ์ฝ๋์ ๋ณ๊ฒฝ ์ฌํญ์ ์ค์๊ฐ์ผ๋ก ๊ฐ์งํ๊ณ , ํ์ํ ๋ชจ๋๋ง ๋ก๋ฉํ์ฌ ์ ์ฉํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํด ๋ ๋น ๋ฅธ ๋ฐ์์ฑ์ ํ๋ณด์ผ ํด์ค๋๋ค.
๋ฆฌ์กํธ๋ฅผ ํฌํจํ ๋ค์ํ ๋ทฐ ๋ ์ด์ด ์ง์
์ฐ์ ๋ฆฌ์กํธ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์ด ์ค๋๋ค. (npx create-react-app ํ๋ก์ ํธ๋ช
)
ํด๋๊ฐ ์์ฑ๋๋ฉด ํด๋ ์์์ Storybook์ ์ค์นํฉ๋๋ค.
npx storybook init
-> package.json์ ๋ณด๊ณ ์ฌ์ฉ์ค์ธ ํ๋ก ํธ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ง๋ ์ฌ์ฉํ๊ฒฝ์ธ ์์์ ๋ง๋ค์ด์ค๋๋ค.
์ค์น๊ฐ ์๋ฃ๋๋ฉด storybook
ํด๋์, /src/stories
ํด๋๊ฐ ์์ฑ๋ฉ๋๋ค.
npm run storybook
์ผ๋ก ์คํํ ์ ์์ต๋๋ค. -> localhost:6006์ผ๋ก ์ ๊ทผํ์ฌ ์คํ์ํต๋๋ค.
๐ ์ด ๋ ์คํ์ค๋ฅ๊ฐ ๋๋ค๋ฉด
npm i @testing-library/dom
์ ์ ๋ ฅํ ํ ๋ค์ ์คํํฉ๋๋ค.
storybook ์ ์ฌ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๊ณ ์ด๋ฒคํธ๋ฅผ ํตํด ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ณผ์ ์ ๊ฑฐ์น์ง ์์๋ ์ํ๋ณํ์ ๋ํ ์ปดํฌ๋ํธ์ ๋ณํ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
ํ์ผ๋ช
.js
ํ์ผ์ ๋ง๋ค๊ณ ๊ฐ์ ์ด๋ฆ์ ํ์ผ๋ช
.stories.js
๋ฅผ ๋ง๋ค๋ฉด storybookํด๋ ์์ ์๋ Storybook์ค์ ํ์ผ์ ์ํด ์์์ ์คํ ๋ฆฌ๋ก ์ธ์ํฉ๋๋ค.
๐ useRef ๋?
๋ฆฌ์กํธ์ Hook ์ค ํ๋๋ก, ํจ์ํ ์ปดํฌ๋ํธ์์ ํด๋์ค ์ปดํฌ๋ํธ์ ์ธ์คํด์ค ๋ณ์์ ์ ์ฌํ ๊ธฐ๋ฅ์ ์ํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฅผ ์ฌ์ฉํด DOM ๋ ธ๋๋ ๋ณ์๋ฅผ ์ ์ฅํ๊ณ , ์ด๋ฅผ ์ปดํฌ๋ํธ์ ๋ค๋ฅธ ๋ถ๋ถ์์ ์ฐธ์กฐํ๊ฑฐ๋ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์ปดํฌ๋ํธ์ state์ ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ์ ์ ์ฅํ๊ฑฐ๋ ๊ด๋ฆฌํ ์ ์์ผ๋ฉฐ, ์ต์ ํ๋ ์ฑ๋ฅ๊ฐ์ ์๋ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ฉ๋๋ค.
๋ณดํต useEffect์ ํจ๊ป ์ฌ์ฉ๋๋ฉฐ, useEffect ๋ด๋ถ์์ ์์ฑ๋ DOM ์์๋ ๋ณ์์ ์ ๊ทผํ๊ฑฐ๋ ์์ ํ ์ ์๊ณ , useRef๋ ์ต์ด ๋ ๋๋ง ์ดํ์๋ ๋ณ์๋ DOM ์์์ ๊ฐ์ ์ ์งํ๋ฏ๋ก ์ปดํฌ๋ํธ๊ฐ ๋ค์ ๋ ๋๋ง๋์ด๋ ๊ฐ์ด ์ ์ง๋ฉ๋๋ค. ์ฆ ์ผ๋ฐ์ ์ธ state์ ๋ฌ๋ฆฌ ์ปดํฌ๋ํธ์ ์ํ๋ฅผ ๋ณ๊ฒฝํ์ง ์์ผ๋ฏ๋ก ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฆฌ๋ ๋๋งํ์ง ์์ต๋๋ค.
๐ useRef๋ฅผ ์ฌ์ฉํ๋ ์์
ํฌ์ปค์ค๋ฅผ ๊ฐ์ ธ์ค๊ฑฐ๋, ์ด๋ค DOM ์์์ ํฌ๊ธฐ๋ ์์น๋ฅผ ๊ฐ์ ธ์ค๋ ์์ , ํจ์ํ ์ปดํฌ๋ํธ์์ ์ธ์คํด์ค ๋ณ์์ ์ ์ฌํ ๋์์ ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ ๋ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค.
DOM ์๋ฆฌ๋จผํธ ์ฃผ์๊ฐ์ ํ์ฉํด์ผํ๋ ๊ฒฝ์ฐ, React๋ก ๋ชจ๋ ๊ฐ๋ฐ ์๊ตฌ์ฌํญ์ ์ถฉ์กฑํ ์ ์์ต๋๋ค. ์ด๋ฐ ์์ธ์ ์ธ ์ํฉ์์ useRef
๋ก DOM๋
ธ๋, ์๋ฆฌ๋จผํธ, React ์ปดํฌ๋ํธ ์ฃผ์๊ฐ์ ์ฐธ์กฐํ ์ ์์ต๋๋ค.
const ์ฃผ์๊ฐ์_๋ด๋_๊ทธ๋ฆ = useRef(์ฐธ์กฐ์๋ฃํ)
// ์ด์ ์ฃผ์๊ฐ์_๋ด๋_๊ทธ๋ฆ ๋ณ์์ ์ด๋ค ์ฃผ์๊ฐ์ด๋ ๋ด์ ์ ์์ต๋๋ค.
return (
<div>
<input ref={์ฃผ์๊ฐ์_๋ด๋_๊ทธ๋ฆ} type="text" />
{/* React์์ ์ฌ์ฉ ๊ฐ๋ฅํ ref๋ผ๋ ์์ฑ์ ์ฃผ์๊ฐ์_๋ด๋_๊ทธ๋ฆ์ ๊ฐ์ผ๋ก ํ ๋นํ๋ฉด*/}
{/* ์ฃผ์๊ฐ์_๋ด๋_๊ทธ๋ฆ ๋ณ์์๋ input DOM ์๋ฆฌ๋จผํธ์ ์ฃผ์๊ฐ ๋ด๊น๋๋ค. */}
{/* ํฅํ ๋ค๋ฅธ ์ปดํฌ๋ํธ์์ input DOM ์๋ฆฌ๋จผํธ๋ฅผ ํ์ฉํ ์ ์์ต๋๋ค. */}
</div>);
์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋ ๋๋๋ผ๋ ์์ ์ฃผ์๊ฐ์ด ๋ฐ๋์ง ์๋ ํน์ฑ์ ํ์ฉํด ์ ํ๋ ์ํฉ์์ useRef
๋ฅผ ํ์ฉํ ์ ์์ต๋๋ค.
๐ useRef ๋ฅผ ์ฌ์ฉํด DOM์ ์กฐ์ํ๋ฉด์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์ปดํฌ๋ํธ๋ฅผ ๋ฆฌ๋ ๋๋งํ ์ ์์ต๋๋ค. ๋ค๋ฅธ state๋ props๊ฐ ๋ณ๊ฒฝ๋ ๋ ๋ฆฌ๋ ๋๋ง์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ๋๋ ์ปดํฌ๋ํธ ๋ด๋ถ์์ 'forceUpdate'ํจ์๋ฅผ ํธ์ถํด ๊ฐ์ ๋ก ๋ฆฌ๋ ๋๋ง์ ํ ์๋ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ๋ฐฉ๋ฒ์ ๊ถ์ฅ๋์ง ์์ต๋๋ค.
ํ์ง๋ง ๋๋ถ๋ถ์ ๊ฒฝ์ฐ์ React ๋ฌธ๋ฒ์ ๋ฒ์ด๋ useRef
๋ฅผ ๋จ์ฉํ๋ ๊ฒ์ ๋ถ์ ์ ํฉ๋๋ค. ์ฃผ์ํด์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.