2024. 3. 24. 21:16ใEducation/Megaptera
๐ 24.03.18 ~ 24.03.24
๋์์ธ ์์คํ ์ ๋ํด ์ดํดํ๊ณ styled-components๋ฅผ ํ์ฉํ์ฌ CSS in JS๋ฅผ ํ์ตํ๋ ์ฃผ์ฐจ์๋ค.
๐ฉ๐ป๐ป ๋๋ ์ด๋ฒ์ฃผ์ ๋ฌด์์ ๋ฐฐ์ ๋๊ฐ?
์ด๋ฒ์ฃผ๋ ๋์์ธ ์์คํ ์ ์ดํดํ๊ณ CSS in JS์ ๋ํ์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ styled-components ํ์ตํ๋ ์ฃผ์ฐจ์๋ค. CSS in JS ๋ํด ๊ถ๊ธํ์๋๋ฐ ํ์ตํ๊ฒ ๋์ด์ ์ฌ๋ฏธ์์๋ค. CSS์ ์ญ์ฌ๋ฅผ ๊ณต๋ถํ๋ฉด์ Web์ ์ญ์ฌ๊น์ง ์๊ฒ ๋๋ ์ฃผ์ฐจ์๋ค.
์ ํ์ ์ฒ์ ๋ง๋ค ๋๋ ์ด๊ธฐ์ ์ธ์ด ๊ท์น๋ค์ด ์ ์ดํ๋๊ณ ๋ฐ์๋์ง๋ง ์๊ฐ์ด ์ง๋ ์๋ก ๊ท์น๋ค์ด ์ด๊ธ๋๊ณ ์ ์ฐจ ์ฌ๋ผ์ง๋ ๋ฑ ๋ถํํ์์ด ํ์ฐ์ ์ผ๋ก ๋ฐ์ํ๋ค. ์๋ก์ด ํ๋ก์ ํธ ๊ตฌ์ฑ์๊ณผ ํ์ด ๊ด์ฌํ๊ณ , ํ๋ก์ ํธ๊ฐ ํ์ฅ๋๋ฉด์ ์ด๋ฌํ ํ์์ ๊ฐ์ํ๋๊ณ ๊ฒฐ๊ตญ ์ ํ์ ์ฌ์ฉ์ ๊ฒฝํ์ ํฐ ์ํฅ์ ๋ฏธ์น ์ ์๋ค. ์ด๋ฌํ ํผ๋์ ๋ฐฉ์งํ๊ณ ์ง์๋ฅผ ์ธ์ฐ๋ ์ญํ ์ ๋์์ธ ์์คํ ์ด๋ผ๊ณ ํ๋ค. ๋์์ธ ์์คํ ์ ๋ค์ด๋ ๋ดค์ผ๋, ๋์์ธ ์์คํ ์ ๊ตฌ์ถ ํด๋ณธ์ ์ ์๋ค. ์์ฌ์ ์๋น์ค๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ฉด ์ผ๊ด๋ UI๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด์๋ ํ์ํ๋ค๊ณ ์๊ฐ๋๋ค. ๋์์ด๋๋๊ณผ ์ํต์ ํตํด ๊ท์น ๋ง๋ค๊ณ ๊ท์น๋๋ก ์ฌ์ฉํ๊ธฐ ์ํด์ ๋๋ฃ ๊ฐ๋ฐ์๋ค๊ณผ์ ์ํต๋ ํ์ํด ๋ณด์ธ๋ค.
CSS in JS์ JavaScript๋ฅผ ์ฌ์ฉํด์ ๊ตฌ์ฑ์์์ ์คํ์ผ์ ์ง์ ํ๋ ์คํ์ผ๋ง ๊ธฐ์ ์ ์๋ฏธํ๋ค.
ํ์ด์ค๋ถ์ ์ฑ์ฅ์ผ๋ก ์ธํด React๋ฅผ ๋น๋กฏํ Framework๊ฐ ๋ง๋ค์ด์ง๋ฉด์ ๋ฌธ์ ๊ธฐ๋ฐ์ด ์๋ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ์ ๊ฐ๋ฐ ๋ฐฉ์์ด ์๋ฆฌ์ก๊ฒ ๋์๊ณ , ๋ฌธ์๋ฅผ ํธํ๊ฒ ๊พธ๋ฐ ์ ์๋๋ก ์ค๊ณ๋ CSS๋ ๋ฌธ์๋ฅผ ๊พธ๋ฏธ๋ ๋ฐ ์์ด์ ์ ์ฉํ์ง๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ค๋ฌ์ด UI์ ๋ชจ๋๊ณผ ์ปดํฌ๋ํธ์ ๋ฐฉ์์ ๊ฐ๋ฐ ๋ฐฉ์๊ณผ๋ ๋ง์ง ์์๋ค. ๊ทธ๋์ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ์ ๊ฐ๋ฐ๋ฐฉ์์์ CSS๋ฅผ ๋์ฑ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํด ๋์จ ๊ฐ๋ ์ด CSS in JS์ด๋ค.
CSS in JS๋ฅผ ๋ํํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ Styled-Components๋ React์ Props๋ฅผ ์ ๋ฌ๋ฐ์ ์กฐ๊ฑด๋ถ ์คํ์ผ๋ง์ ๊ฐ๋ฅํ๊ฒ ํ๋ค. ES6 ์ต์ ๋ฌธ๋ฒ Tagged Template Literals์ ์ฌ์ฉํด์ ์์ฑํ๋ค. Template Literals๋ ์ ์๊ณ ์์์ผ๋, ํด๋น ๋ฌธ๋ฒ์ ์ฒ์ ๋ค์ด๋ณด์๋ค. ์์ง๋ ์๋ฒฝํ๊ฒ ๋ฌธ๋ฒ์ ์ดํดํ์ง ๋ชปํด์ ์ถ๊ฐ์ ์ธ ๊ณต๋ถ๊ฐ ํ์ํด ๋ณด์ธ๋ค. ์ฌ์ฉ๋ฒ์ ๊ฐ๋จํ์ผ๋ ๋ฌธ์ ๋ Props๋ก ์กฐ๊ฑด๋ถ ์คํ์ผ๋ง์ ํ๋ ๋ฐฉ์์ด ์ต์ํ์ง ์์ ํท๊ฐ๋ ธ๋ค. ๋ํ Styled-Components๋ฅผ ์ด๋ค ๊ธฐ์ค์ผ๋ก ๋ถ๋ฆฌํด์ผ ํ ์ง ๊ณ ๋ฏผ์ ๋ง์ด ํ๋ค. ๊ณตํต์ผ๋ก ์ฌ์ฉ๋๋ ๋ถ๋ถ์ด ์๋ค๋ฉด ๋ถ๋ฆฌํ๊ณ ๊ทธ๋ ์ง ์๋ค๋ฉด ์ปดํฌ๋ํธ์ ์์นํ๋๋ก ํ๋ค. ๋ถ๋ฆฌ๋ ์ปดํฌ๋ํธ๋ฅผ ์กฐํฉํ๋ค ๋ณด๋ ์คํ์ผ๋ง ๋ ์ปดํฌ๋ํธ๋ฅผ ์ธ์งํ๊ธฐ ์ํด์ Styled-Components๋ก ๋ง๋ ์ปดํฌ๋ํธ๋ ๋์๋ Style ๋ถ์ฌ์ ์ฌ์ฉํ๋ค.
๋คํฌ๋ชจ๋๋ฅผ ์ฒ์ ๊ตฌํํด๋ณด์๋๋ฐ ๊ธฐ๋ณธ ํ ๋ง์ ๋คํฌ ํ ๋ง๋ฅผ ์ผ๋์ผ๋ก ๋งค์นญ ๋๊ฒ ํ๊ธฐ ์ํด์ ๋์์ธ ์์์ ์ด์ฌํ ๋ด์ผ ํ๋ค. ์ฒ์์๋ ์๊ฐ ์์ด ํน์ ๊ธฐ์ค์ ์ ์ก์ง ์๊ณ ๊ณผ์ ๋ฅผ ํ๊ธฐ ์์ํ๋๋ฐ ๋งค์นญ๋์ง ์์ ๋ค์ ์ ๋์ ํด์ผ ํ๋ค. ์ฝ๊ฒ ์๊ฐํ๋๋ฐ ๋ง์ ๊ณผ์ ๋ฅผ ํตํด ๊ตฌํํด ๋ณด๋ Styled-Components๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๊ณ ์ถ์ด ์ฌ์ฉํ๋ ์์๋ค์ ๋ง์ด ๋ณด๋ ค๊ณ ํ๋ค. ์ญ์๋ ํต์ฌ์ Props! ์กฐ๊ฑด๋ถ ์คํ์ผ๋ง์ ๊ฐ์ ์ ์ ํ์ฉํ๋ ๊ฒ ํต์ฌ์ธ ๊ฒ ๊ฐ๋ค.
๋คํฌ๋ชจ๋๋ฅผ ๊ตฌํํ๊ธฐ ์ํด usehooks๋ฅผ ์ฌ์ฉํ์ง ์๊ณ Context API๋ฅผ ์ฌ์ฉํด์ ๊ตฌํํด๋ณด์๋ค. ContextAPI๋ฅผ ํตํด ์๋ก์ด ThemeProvider์ ๋ง๋ค๊ณ ๊ธฐ์กด Styled-component๊ฐ ์ ๊ณตํ๋ ThemeProvider๋ฅผ ์ปค์คํ ํ๋ ๋ฐฉ์์ผ๋ก ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค. ์ง์ ๊ตฌํํด ๋ณด๋ ์ฌ๋ฏธ์์๊ณ useLayoutEffect hook๋ ์ฌ์ฉํด ๋ณด์๋ค. useEffect์ ์ฐจ์ด์ ์ด ์์๋๋ฐ ์ด๋ฒคํธ ํธ์ถ ์์ ์ ์ฐจ์ด๋ฅผ ๊ฒฝํํด ๋ณผ ์ ์์๋ค.
๐ฏ ํ์ต์ด ๋ ํ์ํ ๋ถ๋ถ
๊ณผ์ ๋ฅผ ํ๋ฉด์ store ์์ฑ์ useSyncExternalStore hook์ ์ฌ์ฉํด๋ณด์๋ค.
๋๋ต ๋์์๋ฆฌ๋ฅผ ์ดํดํด์ ์ ์ฉํ์ผ๋ ๋ฌธ์ ๋ Test ์ฝ๋์์ ์ด๋ป๊ฒ Mocking ํด์ผ ํ ์ง ๋ชจ๋ฅด๊ฒ ๋ค.
ChatGPT์๊ฒ ๋ฌผ์ด๋ณด์์ผ๋ ๋๋ต์ด ์ ๋ด ๋ง์์ ๋ค์ง ์์๋ค. ๋ ๊ณ ๋ฏผํ๊ณ ์๋ํด ๋ณด์์ผ๊ฒ ๋ค.
ํ ์คํธ์ฝ๋๋ ์ ์ ์ต์ํด์ง๊ณ ์๋ค. ๊ทธ๋ฌ๋ ์์ง ๊ณผ์ ์์๋ง ์ฌ์ฉ์ค์ด์ฌ์ ๋ค๋ฅธ ๋ฏธ๋ํ๋ก์ ํธ ํ ๋๋
์๋ํด ๋ณผ ํ์์ฑ์ ๋๊ผ๋ค. ์ฝ๋๋ฅผ ์ธ์๋ฒ๋ ค์ ์ต์ํด์ง๊ณ ์์ง ์๋๊ฐ..๋ผ๋ ์๋ฌธ์ด ๋ค๊ธฐ ์์ํ๋ค.
์ด๋ฒ์ฃผ๋ ์ด์ฌํ ๊ณต๋ถํ์ง ์์๋ค. Styled-Components ๋ง๊ณ Tailwind CSS, emotion ์ฌ์ฉ๋ฒ๋ ํ์ตํด๋ณด์๊ณ
์ค์ค๋ก ํ์ต ๊ณํ์ ์ธ์ ์ง๋ง.... Styled-Components๋ง ํ์ตํ๊ฒ ๋์๋ค.
๊ณผ์ ๋ฅผ ํ๋๋ฐ Styled-Components ์ฌ์ฉํด์ ๊ตฌํํ๋๋ฐ ์ค๋ ๊ฑธ๋ ธ๋ค. CSS ๋ผ๊ณ ๋๋ฌด ์ฝ๊ฒ ์๊ฐํ๋ ๊ฑฐ ๊ฐ๋ค. ๋ ์์ ๋ฐ์ฑํ์.
'Education > Megaptera' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก ํธ์๋ ์์กด์ฝ์ค 10๊ธฐ] 10์ฃผ์ฐจ ํ๊ณ (0) | 2024.04.08 |
---|---|
[ํ๋ก ํธ์๋ ์์กด์ฝ์ค 10๊ธฐ] 9์ฃผ์ฐจ ํ๊ณ (0) | 2024.03.31 |
[ํ๋ก ํธ์๋ ์์กด์ฝ์ค 10๊ธฐ] 7์ฃผ์ฐจ ํ๊ณ (0) | 2024.03.18 |
[ํ๋ก ํธ์๋ ์์กด์ฝ์ค 10๊ธฐ] 6์ฃผ์ฐจ ํ๊ณ (0) | 2024.03.11 |
[ํ๋ก ํธ์๋ ์์กด์ฝ์ค 10๊ธฐ] 5์ฃผ์ฐจ ํ๊ณ (0) | 2024.03.03 |