์ ์ฒด ๊ธ (47) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ ํ ํฌ ๋ฆฌ๋๋ค์ด ์๊ฐํ๋ "๊ฐ๋ฐ์ ์์น" ํ์๋ ํ์ต ๋ฃจํด์ด ๋์จํด์ง๊ฑฐ๋, ๋ํํด์ง ๋ ์ฏค ์ฐ์ํ ํ ํฌ Youtube ์ฑ๋์ ๋ค์ด๊ฐ ์ ์ ๊ฐ๋ฐ์ ๋ถ๋ค์ 10๋ถ ํ ์ฝํก์ ๋ณด๋ฉด์ ์์ ๊ถ๊ธํดํ๋ ํค์๋๋ค์ด ๋ฌด์์ธ์ง ํ์ํด๋ณด๊ณค ํ๋ค. (์ด์ ๋์์ ๊ณต๋ถํ๊ธฐ๋ ํ๋ค.) ๊ทธ ์ค์์๋ ์ฃผ๊ธฐ์ ์ผ๋ก ์งํํ๋ ์ปจํ ์ธ , ์ฐ์ํ ํ ํฌ ์ธ๋ฏธ๋๋ ํ์ ๊ฐ๋ฐ์ ๋ถ๋ค์ ์คํผ์น ๋ฐ ์ธํฐ๋ทฐ๋ก ์งง์ ์๊ฐ ์์ ์์ง์ ํ ํฌ ํธ๋ ๋์ ์ด์ง ์์ฅ ๋ถ์๊ธฐ๋ฅผ ํ์ ํ ์ ์์ด ์ ์ฒญํ๋ ํธ์ด๋ค. ์ง๋ 3์, ์ฐ์ํ ํ์ ๋ค์์ ์งํํ๋ ์ฐ์ํ ํ ํฌ ์ธ๋ฏธ๋ ๋ผ์ด๋ธ ์คํธ๋ฆฌ๋ฐ์ ์์ฒญํ ์ ์ด ์๋๋ฐ ์์ฆ์ ๋ฌด๊ธฐ๋ ฅํ ์์ ์ ๋์ด์ผ ๋ณด๋ฉฐ ๋น์ ๋ฉ๋ชจํ๋ ๋ด์ฉ์ ๋ณต๊ธฐํ๋ฉฐ ํฌ์คํ ์ ์ฌ๋ ค๋ณธ๋ค. ํนํ ์์ฃผ ์ ํ๋ ๋ค์๋ ๊ฐ๋ฐ์ ๋ถ๋ค์ ์ง์์๋ต ์ธํฐ๋ทฐ๊ฐ ์ธ์์ ์ด์๋๋ฐ, 7๊ฐ์์ด ์ง๋ ์ง๊ธ ๋ด์ฉ์ ๊ณฑ์น์ด ๋ณด๋ ๊ทธ.. Emotion์ผ๋ก React ์ปดํฌ๋ํธ ๋์์ธํ๊ธฐ Emotion? HTML ์์ ํน์ React ์ปดํฌ๋ํธ์ CSS๋ฅผ ์ ์ฉํ๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ CSS-in-JS ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์์๋ Styled Component ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๊ฐ์ฅ ๋๋ ๋์์ผ๋, MUI(Material UI)๊ฐ ์คํ์ผ๋ง ์์ง์ Emotion์ผ๋ก ์ฑํํ๋ฉด์ ์ด๋ชฉ์ด ์ง์ค๋๊ณ ์์ (Emotion์์๋ styled component์ ์ฅ์ ์ ์ฐจ์ฉํด์ ํ์ฉํ๋ ค๋ ํ์ ์ด ๋๋ณด์) css() ํจ์๋ฅผ ํตํด ๊ฐํธํ React ์ปดํฌ๋ํธ ์คํ์ผ๋ง์ด ๊ฐ๋ฅ ๊ณต์ ๋ฌธ์๊ฐ ๊ต์ฅํ ์น์ ํ๋ฏ๋ก Getting Started ํญ๋ชฉ์ ์ฝ์ด๋ณด๋ ๊ฒ์ด ๊ฐ์ฅ ๋ช ์์ ํจํค์ง ์ค์น (react) vanilla ํ๊ฒฝ์ @emotion/css ํจํค์ง๋ก ์ค์น $ yarn add @emotion/react emotion์์๋ styled .. React ๊ณต์๋ฌธ์ ํบ์๋ณด๊ธฐ (feat.์ฝ์ด ์๋ฐ์คํฌ๋ฆฝํธ) ๋ฆฌ์กํธ ๊ฐ๋ฐ์๋ค์ ๊ณต๋ถ๋ฅผ ์์ํ ์๊ฐ, ์ฌํ ๊ธฐ์ ์ ๋ํ ๋ ํผ๋ฐ์ค ์ฐธ๊ณ ์, ์๋ก์ด ๋ฒ์ ์ด ์ถ์๋๋ฉด ์ด๊น์์ด ๊ณต์๋ฌธ์๋ฅผ ์ฐพ๊ฒ ๋๋ค. ์ ๋ง์ ํ ํฌ ๋ธ๋ก๊ทธ๋ค์ ์ ๋ณด์ ๋น๊ตํด ๊ฐ์ฅ ์ฌํํ๊ณ ๊ฐ์ฅ ์ง๊ด์ ์ด๋ฉฐ ๊ฐ์ฅ ์ ํํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ์ ๋๋ ์ผ ๋ ์ ์๋ค. ํ์๋ ์ต๊ทผ ํ ๋์ ์ฝ์ด ์๋ฐ์คํฌ๋ฆฝํธ ๊ณต๋ถ์ ๋น ์ ธ ์คํ ์ปจํ ์คํธ, ์ค์ฝํ, ๋น๋๊ธฐ์ ๋ํ ๊ธฐ๋ณธ๊ธฐ๋ฅผ ๋ค์ก๋ค. (์ด์ ๋ํ ๋ด์ฉ์ ๋๋ ๋ฐ๊ฐ ๋ง์ ์ ๋ฆฌ ํ ํฌ์คํ ํ ์์ ์ด๋ค) ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ๋์ํ๋ ๋ฐฉ์์ ์ดํดํ๊ณ ๋ค์ ์ฝ๋ ๊ณต์๋ฌธ์๋ ์ข ์๋ฌ๋๋ค. ์์ ์๋ ๊ทธ์ ํ์ด์ค๋ถ์ด ์ ํ ๋ฒ์น๋๋ก. ๋ก๋ง์ ์์ผ๋ฉด ๋ก๋ง์ ๋ฒ์ ๋ฐ๋ฅด๋ผ๋ ๊ฒ ๋ง๋ฅ "๊ทธ๋ฅ ๊ทธ๋ ๊ฒ ์จ์ผ ๋ผ"๋ก ๋ฌธ์๋ฅผ ๋ฐ์๋ค์๋ค๋ฉด, ์ง๊ธ์ "๋ก์ปฌ state๋ฅผ ์ ์ฉํ๊ธฐ ์ํด์ ์ function ์ปด.. ๊ตฌ๊ธ ์คํ๋ฆฐํธ 7๊ธฐ FTOOS, ๋ค๋ฆ์ ํ๊ณ ํ๋กค๋ก๊ทธ ์ง๋ 3์, ํ์ฐฝ VanillaJS๋ก lotto ํ๋ก์ ํธ์ ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ์งํํ๋ ์์ ์ ์๋ ์ผ์ด๋ค. ์ฒ์์ function์ผ๋ก ๊ตฌํ๋์ด ์๋ ๊ฐ์ฒด๋ค์ classํ์ผ๋ก ๋ฆฌํฉํ ๋ง ํด๋ณด๋ฉด์ ES6๋ถํฐ class ๊ฐ๋ ์ด ๋์ ๋๊ณ , ์ด๋ก ์ธํด ์ ์ฐจ ์งํฅํ ์ธ์ด JavaScript๊ฐ OOP ํจ๋ฌ๋ค์์ ๋ฐ๋ฅด๊ณ ์๋ ๊ฒ์ด ๊ธฐ์กด ์คํฌ๋ฆฝํธ ์ธ์ด์ ์ ์ฒด์ฑ์ ๋ฐํ๋ ํ์๊ฐ ์๋๊น ์ถ์ ์๋ฌธ์ด ๋ค์๋ค. function ๊ฐ์ฒด์ class ๊ฐ์ฒด์ ์ฐจ์ด์ ์ด ๊ถ๊ธํด์ง๋ฉด์ ๊ด๋ จ ๊ธฐ์ ํฌ์คํ ์ ์์นํ๋ ์ค ์ฐ์ฐํ ํ ์นด์นด์ค ์ํฐํ๋ผ์ด์ฆ์์ ์๋์ด ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ก ์ผํ๊ณ ์๋ teo์ ๊ธ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ๊ณผ javascript (์ฝ๊ฐ์ ์ญ์ฌ๋ฅผ ๊ณ๋ค์ธ...) ์ ์ ํ๊ฒ ๋๋ค. ํฉํธ๋ง ๋์ดํ ๊ธฐ์ ํฌ์คํ ์ด ์๋ ์ธ์ฌ์ดํธ๋ฅผ ๊ฒฝํ.. 2022 GDG Korea ์ด๋ ฅ์ ๋ฉํ ๋ง ํ๊ธฐ ๋๋ค์์ ์ง์ฅ์ธ์๊ฒ ์ด๋ ฅ์๋ ๋จ์ํ ์ด์ง์ ์ํ "์๋จ"์ด ์๋๊ฒ ๋๋ค. ์ด๋ ฅ์๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ๊ฐฑ์ ํ๊ณ , ์ปค๋ฆฌ์ด๋ฅผ ํ๊ณ ํ๋ ์ผ์ ๋ค์ํ๋ ์ปค๋ฆฌ์ด์ ๋ฐฉํฅ์ฑ์ ์ ๋ฆฝํ ์ ์๋ ์ฃผ์ถง๋์ด ๋๋ค.์ด๋ฅผ ํ ๋๋ก ์ํ๋ ๋ถ์ผ์ ๊ธฐ์ ์์ ์คํผ๋ฅผ ๋ฐ๊ฑฐ๋ JD๋ฅผ ๊ฒํ ํด๋ณด๋ฉด์ ํ IT ์์ฅ์์ ๊ณตํต์ ์ผ๋ก ์๊ตฌํ๋ ์ญ๋์ด ๋ฌด์์ธ์ง ํ์ ํ ์๋ ์๋ค. ์ด์ฒ๋ผ ์ด๋ ฅ์ ๊ด๋ฆฌ๋ ์ํํธ์จ์ด ์์ง๋์ด์๊ฒ ๋น ์ง ์ ์๋ ํ์ ์ญ๋(?) ์ค ํ๋๊ฐ ๋์๋ค. ์ง๋ 4์ 23์ผ, GDG Korea WebTech์์ ์งํํ ์ด๋ ฅ์ ๋ฉํ ๋ง ๊ด๋ จ ์ธ์ ์ ์ฐธ์ฌํ๋ค. ๋จ์ ํธ๊ธฐ์ฌ์ ์ ์ฒญํ ํ์ฌ์๋๋ฐ ๊ต์ฅํ ๋ง์กฑ์ค๋ฌ์ ๊ธฐ์ ๋ค๋ฆ๊ฒ๋๋ง ํ๊ธฐ๋ฅผ ์ ์ด๋ณธ๋ค. ํ์คํ๋ฅผ ํตํด ์ ์ฒญํ๊ณ ๊ฐ๋ฐ์ ์ด๋ ฅ์ ํค์๋๋ก ๊ตฌ๊ธ๋งํ๋ฉด ์ต ์๋จ์ ์์นํ ์ด๋ ฅ์ ์์ฑ๋ฒ ํฌ์คํ ์ผ๋ก ์ ๋ช ํ .. ResizeObserver๋ก ๋ฐ์ํ ๊ตฌํํ๊ธฐ (feat. ์ฒซ PM ์ฒดํ๊ธฐ) ์ง๋ 4์, ๊ณ ๊ฐ์ฌ ์ธก์์ ๋๊ท๋ชจ ํ๋ก์ ํธ ํตํฉ์ ์์ ๋ฐ์ํ ๋์์ ๋ํ ์๊ตฌ์ฌํญ์ด ์๊ฒจ ๊ฐ์์ค๋ฝ๊ฒ ๋ฐ๋๋ผ์ธ์ฑ ํ๋ก์ ํธ๋ฅผ ์งํํ๊ฒ ๋์๋ค. ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํด ์ ๋ ์ขํ๋ก ๊ตฌํ๋์ด ์๋ ๋ด๋ถ ์ปดํฌ๋ํธ ๊ตฌ์กฐ์์ ํน์ ๋ชจ๋ฐ์ผ ๋ธ๋ผ์ฐ์ ์ ์ธ์ฑ ๊ธฐ๋ฅ์ ํตํด ๊ธ๊ผด ํฌ๊ธฐ ๋น์จ(%)์ ๋ณ๊ฒฝํ๋ฉด ์ปจํ ์ธ ๊ฐ ์๋ฆฌ์ง ์๊ณ ๋ฐ์ํ์ฒ๋ผ ๋์ํด์ผ ํ๋ ์๊ตฌ์ฌํญ์ด์๋ค. ์ค์ ๋ก ๋ธ๋ผ์ฐ์ ์์ ๊ธ๊ผด ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ์ ๋ computed style์ font size๋ ๋ณ๊ฒฝํด์ฃผ์ง๋ง notify event๋ฅผ ๋ฐ๋ก ๋ด์ด์ฃผ์ง ์๊ธฐ ๋๋ฌธ์ ๋ด๋ถ ํ๋ ์์ํฌ์ event flow๋ฅผ ํ์ธ ์ ์๊ธฐ์ ์ ์ ํ ๋์์ด ํ์ํ๋ค. ์ ์ด์ ์ปดํฌ๋ํธ๊ฐ ์๋ ์ขํ๋ก ๊ตฌํ๋์ด ์์๋ค๋ฉด ๊ฐ๋จํ flex ๋ฅผ ํตํด ๋ฐ์ํ ๋ ์ด์์์ ๊ตฌ์ถํ ์ ์์๊ฒ ์ง๋ง ๊ธฐ์กด ์ ํ์ ๊ตฌ.. 3์ ํ๊ณ , ์ฝ๋ ๋ฆฌ๋ทฐ ์คํฐ๋์ ๋ฉํ ์ผ์ด์ ํ์ ๋ค ์ด๋๋ง 3์์ด ๋๋๊ฐ๋ค. ์ค๋ฏธํฌ๋ก ํ์ง์ผ๋ก 3์ ์ฒซ ์ฃผ๋ ํ๋ณต์๋ง ํ์ฐ๋๋ผ ์ผ์ฃผ์ผ์ ์ฝ์ ์ทจํด ์ด์๋ค.. (๋๊ฐ ๊ฒฝ๋ฏธํ ๊ฐ๊ธฐ ์ฆ์ธ๋ผ ํ๋์.. ๋ชฉ์ ์นผ์ถค์ ์ถ๋ ๊ธฐ๋ถ์ด์๋ค..!) ๊ทธ๋ ๊ฒ ์ผ์์ ๋ณต๊ทํ ์ง ๋ณด๋ฆ ์งธ. ๊ทธ๋์ ์ปค๋ฐ ์๋๋ฅผ ์ฌ์ง๋ชปํด ๋ถ์ฑ๊ฐ์ ๋๋ผ๋ฉฐ VanillaJS ์ฝ๋ ๋ฆฌ๋ทฐ ์คํฐ๋์ Next.js ํ๋ก์ ํธ ๋ฑ ๊ณํํ๋ ์ผ์ ๋ค์ด ๋ถ๋ฉ๋์ฒ๋ผ ๋์์ ๋งค์ฐ ๋ฐ์ ์ผ์์ ๋ณด๋ด๊ฒ ๋์๋ค. ๋ง ๊ฐ์์๋ ์ผ์ฃผ์ผ์ ํ ๋ฒ์ฉ ํ๊ณ ๋ก์ ์์ฑํ๋ ค ํ์ผ๋.. ๐ ๊ฐ ์ก๊ณ ํฌ์คํ ์ ์ธ ์ฌ์ ๊ฐ ๋์ง ์์ ๊ฐ์ธ notion์๋ง ์กฐ๊ธ์ฉ ์ ๋ฆฌํ๋ ๋ด์ฉ๋ค๊ณผ ๊ฐ์ธ์ ์ธ ๋ฉํ์ด ํ๋ค๋ ธ์ ๋ ๊ทน๋ณตํ๋ ๋ฐฉ๋ฒ๋ค์ ํบ์๋ณด๊ณ ์ ํ๋ค. ๐ 3์์ ์งํํ ๊ฒ๋ค 1. ์ถ๊ทผ ์ 10๋ถ TIL ์ ๋ ์์ฑ 2. React ๊ณต์๋ฌธ์ ์ ๋ 3. Vani.. React #4. Lifecycle Hook vs useEffect React์ Lifecycle์ด๋? ๋ฆฌ์กํธ๋ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ์ผ๋ก ์ค๊ณ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. ๋ฆฌ์กํธ์์ ์ฐ๋ฆฌ๊ฐ ๋ง๋๋ ์ปดํฌ๋ํธ๋ React์์ ๊ฐ๊ฐ์ ์ปดํฌ๋ํธ๋ ์๋ช ์ฃผ๊ธฐ(Lifecycle)๋ฅผ ๊ฐ์ง๋ค. ์ฆ, ์ปดํฌ๋ํธ๋ ์ธ์์ด ์๋ค๋ ๊ฒ์ด๋ค. ์ปดํฌ๋ํธ์ ์๋ช ์ ๋ณดํต ํ์ด์ง์์ ๋ ๋๋ง๋๊ธฐ ์ ์ธ ์ค๋น ๊ณผ์ ์์ ์์ํ์ฌ ํ์ด์ง์์ ์ฌ๋ผ์ง ๋ ๋์ด ๋๋ค. Lifecycle์ ํฌ๊ฒ ์ธ ๊ฐ์ง ์ ํ์ผ๋ก ๋๋ ์ ์๋๋ฐ, ํนํ ์ ๋ฐ์ดํธ๊ฐ ๋๋ ์์ ์ props, state๋ฅผ ํตํ ์ํ ๊ด๋ฆฌ๊ฐ ํ์ํ๋ฏ๋ก ์ฃผ๋ชฉํ๊ธธ ๋ฐ๋๋ค. - ์์ฑ(mount) DOM์ด ์์ฑ๋๊ณ ์น ๋ธ๋ผ์ฐ์ ์์์ ๋ํ๋ ๋ - ์ ๋ฐ์ดํธ(update) props๊ฐ ๋ฐ๋ ๋ state๊ฐ ๋ฐ๋ ๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง ๋ ๋ this.forceUpdate๋ก ๊ฐ์ ๋ .. ์ด์ 1 2 3 4 ยทยทยท 6 ๋ค์