๐Ÿ“ 8์ฃผ์ฐจ ์œ„ํด๋ฆฌ ํŽ˜์ดํผ ๋ฏธ์…˜

pjw__98ยท2023๋…„ 12์›” 31์ผ
1
post-thumbnail
๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป 2์ฃผ๊ฐ„ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งˆ์น˜๊ณ .. 

์œ„ํด๋ฆฌ ํŽ˜์ดํผ ๋ฏธ์…˜์€ ์ž ์‹œ ์ค‘๋‹จํ•˜๊ณ  ๊ธฐ์ดˆ ํ”„๋กœ์ ํŠธ๋ฅผ ๋๋‚ด๊ณ ์„œ์•ผ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.
ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์ด๊ฒŒ ๊ธฐ์ดˆํ”„๋กœ์ ํŠธ๊ฐ€ ๋งž๋‚˜? ์‹ถ์—ˆ๋‹ค.
ํ•˜์ง€๋งŒ ํ”„๋กœ์ ํŠธ๋ฅผ ๋๋‚ธ ํ›„ ํ˜„์žฌ ๋‚˜๋Š” ์–ผ๋งˆ๋‚˜ ์„ฑ์žฅํ–ˆ๋Š”๊ฐ€?
ํ”„๋กœ์ ํŠธ๋ฅผ ๋งˆ์น˜๊ณ  ๋‚˜๋Š” ์ž์‹ ์žˆ๊ฒŒ ๋ฆฌ์•กํŠธ๋ฅผ ์ž˜ ๋‹ค๋ฃฐ์ˆ˜ ์žˆ๋‹ค!๊นŒ์ง€๋Š” ์•„๋‹Œ๊ฒƒ ๊ฐ™๋‹ค.
์–ด๋Š์ •๋„ ์ฝ”๋“œํ๋ฆ„์„ ํ•ด์„ํ•  ์ˆ˜ ์žˆ์„์ •๋„?.. 
๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐœ๋…์— ๋Œ€ํ•ด ํ•™์Šต์„ ํ•œ๋‹ค๋ฉด ํ•™์Šต ๋‚ด์šฉ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์„์ •๋„? ์ˆ˜์ค€์ธ๊ฒƒ ๊ฐ™๋‹ค.
๊ทธ๋ ‡๋‹ค. ์ฆ‰, ํ•œ์ฐธ ๊ณต๋ถ€ํ•  ๋•Œ๋‹ค.
ํ”„๋กœ์ ํŠธ๋ฅผ ๋งˆ์น˜๊ณ  8์ฃผ์ฐจ , 11์ฃผ์ฐจ ์œ„ํด๋ฆฌ ํŽ˜์ดํผ ๋ฏธ์…˜์„ ๋ฐ›์•˜๋‹ค.
8์ฃผ์ฐจ ์œ„ํด๋ฆฌ ํŽ˜์ดํผ ๋ฏธ์…˜์€ ์•„๋ž˜ 2๊ฐ€์ง€ ์ฃผ์ œ๋ฅผ ์ œ์‹œํ•ด ์ฃผ์—ˆ๋‹ค.

๋ณธ์ธ์ด ์ƒ๊ฐํ•˜๋Š” CSS-in-JS์˜ ์žฅ์ ๊ณผ ๋‹จ์ ์„ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป CSS-in-JS๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋ถ€ํ„ฐ ์‚ดํŽด๋ณด์ž

๐ŸŽฏ CSS-in-JS๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

์ด๋ฆ„์—์„œ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ๋“ฏ์ด CSS-in-JS๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋˜๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ์—์„œ ์ง์ ‘ CSS๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ ์Šคํƒ€์ผ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“Œ CSS-in-JS ์žฅ์ 

JavaScript ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜๋ฅผ ์Šคํƒ€์ผ ๋‚ด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ, props์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ์Šคํƒ€์ผ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ ๋ฐ ์Šคํƒ€์ผ์„ ์ปดํฌ๋„ŒํŠธ๋กœ ํ•œ์ •ํ•˜์—ฌ ์ด๋ฆ„ ์ถฉ๋Œ๊ณผ ํŠน์ •์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ ๋“ฑ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด์ ์„ ์ œ๊ณตํ•ด์ค€๋‹ค.
CSS-in-JS์˜ ๊ฐ€์žฅ ํฐ ์žฅ์  ์ค‘ ํ•˜๋‚˜๋Š” ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์Šคํƒ€์ผ๋ง์„ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
๋˜ํ•œ JavaScript์™€ ์œ ์‚ฌํ•œ ๊ตฌ๋ฌธ์œผ๋กœ ์Šคํƒ€์ผ์„ ์ž‘์„ฑํ•˜๋ฉด ํŠนํžˆ JavaScript ๋ฌธ๋ฒ•์— ์ต์ˆ™ํ•œ ๊ฐœ๋ฐœ์ž์˜ ๊ฒฝ์šฐ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€ ๊ด€๋ฆฌ์„ฑ์ด ํ–ฅ์ƒ๋  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ๋ณด๋‹ค ์‘์ง‘๋ ฅ ์žˆ๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ๋ฒ ์ด์Šค๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“Œ CSS-in-JS ๋‹จ์ 

CSS-in-JS๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•ด์•ผํ•œ๋‹ค. ์šฉ๋Ÿ‰์ด ์–ผ๋งˆ ๋˜์ง€ ์•Š์ง€๋งŒ์„ค์น˜ ํ•จ์œผ๋กœ์„œ ๋ฒˆ๋“ค ํฌ๊ธฐ๊ฐ€ ์ฆ๊ฐ€ํ•œ๋‹ค.

์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ ์š”์†Œ๋“ค์„ ์ง€์ •ํ•˜์—ฌ ์Šคํƒ€์ผ์„ ์„ ์–ธํ•  ์‹œ ์ปดํฌ๋„ŒํŠธ ๋‚ด์˜ ์ฝ”๋“œ ๊ธธ์ด๊ฐ€ ๊ธธ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

CSS-in-JS๋Š” ๋Œ€ํ‘œ์ ์œผ๋กœ styled-component Eomotion ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

๐Ÿ’ก Reference
CSS-in-JS

Presentational & Container ๋””์ž์ธ ํŒจํ„ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

๐ŸŽฏ React์—์„œ UI์™€ ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ•œ ํŒจํ„ด์œผ๋กœ, Presentational์€ UI ํ‘œํ˜„์— ์ค‘์ ์„ ๋‘๋ฉฐ ์ƒํƒœ๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๋Š” ์ปดํฌ๋„ŒํŠธ, Container๋Š” ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋ฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„์— ์ค‘์ ์„ ๋‘๋ฉฐ ์ƒํƒœ๋ฅผ ๊ฐ€์ง„ ์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.

๐Ÿ“Œ Presentational ์ปดํฌ๋„ŒํŠธ ํŠน์ง•:

UI ์ค‘์‹ฌ ์ฝ”๋“œ: UI๋ฅผ ํ‘œํ˜„ํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ๋ณด์ผ์ง€์— ์ง‘์ค‘.
์ˆœ์ˆ˜ ํ•จ์ˆ˜: ์ฃผ๋กœ ์ˆœ์ˆ˜ํ•˜๋ฉฐ ์™ธ๋ถ€์—์„œ props๋ฅผ ํ†ตํ•ด ์˜ํ–ฅ์„ ๋ฐ›์Œ.
์žฌ์‚ฌ์šฉ์„ฑ ๊ฐ•์กฐ: ๋‹จ์ˆœํ•˜๊ฒŒ UI๋ฅผ ํ‘œํ˜„ํ•˜๋ฏ€๋กœ ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’์Œ.
๋…๋ฆฝ์ ์ธ ๋™์ž‘: ๋‹ค๋ฅธ ๋งฅ๋ฝ๊ณผ ๋…๋ฆฝ์ ์œผ๋กœ ์ผ๊ด€๋œ ๋™์ž‘์„ ํ•จ.
์‹œ๊ฐ์  ์ƒํƒœ๋งŒ ์ฒ˜๋ฆฌ: UI์˜ ์ƒํƒœ๋งŒ ๋‹ค๋ฃจ๊ณ  ๋กœ์ง์„ ํฌํ•จํ•˜์ง€ ์•Š์Œ.

๐Ÿ“Œ Container์ปดํฌ๋„ŒํŠธ ํŠน์ง•:

๊ธฐ๋Šฅ ์ค‘์‹ฌ ์ฝ”๋“œ: ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋ฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„์— ์ค‘์ .
๋น„์ˆœ์ˆ˜ ํ•จ์ˆ˜: ์™ธ๋ถ€ ๋งฅ๋ฝ์— ์˜ํ–ฅ์„ ๋ฐ›์•„ ๋™์ ์œผ๋กœ ๋™์ž‘ํ•จ.
๋‹ค๋ฅธ ๋งฅ๋ฝ์— ์˜ํ–ฅ: ์™ธ๋ถ€ ์ƒํƒœ, ๋ผ์ดํ”„์‚ฌ์ดํด ๋“ฑ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์Œ.
Presentational ์ปดํฌ๋„ŒํŠธ ํ™œ์šฉ: Presentational ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ props๋ฅผ ์ „๋‹ฌํ•˜์—ฌ UI๋ฅผ ์‚ฌ์šฉ.
์ฝ”๋“œ์˜ โ€˜๊ด€์‹ฌ์‚ฌโ€™ ๋ถ„๋ฆฌ: UI์™€ ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ž„.

์ด๋Ÿฌํ•œ ํŒจํ„ด์€ React Hook ๋„์ž… ์ดํ›„ Container ์ปดํฌ๋„ŒํŠธ์˜ ์—ญํ• ์ด Hook์œผ๋กœ ๋Œ€์ฒด๋˜๊ธฐ๋„ ํ•˜๋ฉฐ, ์ฝ”๋“œ์˜ ์œ ์—ฐ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ด๋Š” ๋ฐ ๊ธฐ์—ฌํ•จ.

๐Ÿ’กReference
code-it
ChatGPT

profile
โ˜„๏ธ

0๊ฐœ์˜ ๋Œ“๊ธ€