๐Ÿ’ป์šฉ๋‡ฝ ๊ฐœ๋ฐœ ๋…ธํŠธ๐Ÿ’ป
article thumbnail
[React] ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ๊ณ ์ฐฐ (feat. redux-tookit, recoil, zustand, jotai)

๐Ÿ“– ๋“ค์–ด๊ฐ€๋ฉฐ ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” React์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ƒํƒœ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•ด์„œ ๊ฐ๊ฐ์˜ ํŠน์ง•๊ณผ ๊ฐœ์ธ์ ์ธ ๊ฒฌํ•ด๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ํฌ์ŠคํŒ…์—์„œ ๋‹ค๋ฃฐ ์ฃผ์š” ๋„ค ๊ฐ€์ง€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. react-redux & redux-toolkit recoil zustand jotai React์—์„œ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ•จ๊ป˜ ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค ๋ณด๋ฉด ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋„ค ๊ฐ€์ง€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘ ํ•˜๋‚˜์ฏค์€ ๋ถ„๋ช… ์•Œ๊ณ  ๊ณ„์‹œ๋ฆฌ๋ผ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์œ„ ์ด๋ฏธ์ง€๋Š” ์ตœ๊ทผ 1๋…„๊ฐ„ ๋„ค ๊ฐ€์ง€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ NPM ๋™ํ–ฅ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ ์ถ”์„ธ๋กœ ๋ดค์„ ๋•Œ 1์œ„: redux (react-redux & redux-tookit) 2์œ„: zustand 3์œ„: jotai 4์œ„: recoil ์œ„ ์ˆœ์œ„๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ ์˜ˆ์ œ์™€ ํ•จ๊ป˜ ํŠน์ง•์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Redux..

article thumbnail
[Next.js] vanilla-extract๋กœ ๋‹คํฌ๋ชจ๋“œ(dark mode) ๊ตฌํ˜„ํ•˜๊ธฐ (feat.next-themes)

๐Ÿ“– ๋“ค์–ด๊ฐ€๋ฉฐ Next.js 14๋ฒ„์ „ app router ํ”„๋กœ์ ํŠธ์˜ styled-comoponents์—์„œ vanilla-extarct๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ง„ํ–‰ํ•จ์— ์žˆ์–ด์„œ ๋‹คํฌ๋ชจ๋“œ ๊ธฐ๋Šฅ๋„ ๊ฐ™์ด ์ง„ํ–‰ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋ฒˆ ๋‹คํฌ๋ชจ๋“œ๋ฅผ ์ ์šฉํ•˜๋ฉด์„œ next-themes๋ฅผ ํ™œ์šฉํ•ด ๋ดค๋Š” ๋ฐ ์‚ฌ์šฉ ๊ฒฝํ—˜์ด ๋งค์šฐ ์ข‹์•˜์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, app router์—์„œ vanilla-extract๋กœ ๋‹คํฌ๋ชจ๋“œ๋ฅผ ๊ตฌํ˜„ํ•จ์— ์žˆ์–ด์„œ ์ฐธ๊ณ ์ž๋ฃŒ๊ฐ€ ๋งŽ์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธ€์„ ์ž‘์„ฑํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์ด์ œ Next.js app router์—์„œ vanilla-extract + next-themes๋ฅผ ํ™œ์šฉํ•œ ๋‹คํฌ๋ชจ๋“œ๋ฅผ ํ•œ๋ฒˆ ๊ตฌํ˜„ํ•ด ๋ด…์‹œ๋‹ค. ๐Ÿง next-themes ์†Œ๊ฐœ https://github.com/pacocoursey/next-them..

article thumbnail
[Next.js] styled-components์—์„œ vanilla-extract๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ง„ํ–‰ (app router)

๐Ÿ“– ๋“ค์–ด๊ฐ€๋ฉฐ ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์—์„œ Next.js 14๋ฒ„์ „์˜ ์•ฑ ๋ผ์šฐํ„ฐ์—์„œ styled-components๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ „์— Next.js 11๋ฒ„์ „์—์„œ 14๋ฒ„์ „์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋‚จ์•„์žˆ๋˜ ๋ถ€๋ถ„์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์•ฑ ๋ผ์šฐํ„ฐ์—์„œ ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ง€์›ํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด์„œ, ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ ํ™œ์šฉ ํ•ด๋ณด๊ณ ์ž ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ๋จผ์ € ์™œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ง„ํ–‰ํ–ˆ๊ณ , ์™œ vanilla-extract๋ฅผ ์„ ํƒํ–ˆ๋Š”์ง€ ๊ฐ„๋žตํžˆ ์„ค๋ช…ํ•ด ๋ณผ๊ฒŒ์š”. ๐Ÿ” ์•ฑ ๋ผ์šฐํ„ฐ(app router)์—์„œ styled-components์˜ ๋ฌธ์ œ์  styled-components๋Š” ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, styled-components๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด 'use client'๋ฅผ ๋ช…์‹œํ•จ์œผ๋กœ์จ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ•์ œ์ ์œผ๋กœ ์‚ฌ์šฉํ•ด..

article thumbnail
[Web] OAuth์˜ ๋“ฑ์žฅ ๋ฐ OAuth 2.0 ๊ฐœ๋…์— ๋Œ€ํ•ด์„œ ์‰ฝ๊ฒŒ ์•Œ์•„๋ด์š”.

๐Ÿ“– ๋“ค์–ด๊ฐ€๋ฉฐ ์ตœ๊ทผ ๋‹ค์–‘ํ•œ ์›น ์„œ๋น„์Šค๋ฅผ ์ ‘ํ•ด๋ณด๋ฉด ๊ฐ„ํŽธํ•œ SNS ๋กœ๊ทธ์ธ์œผ๋กœ ์‰ฝ๊ฒŒ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๊ฐ„ํŽธํ•œ SNS ๋กœ๊ทธ์ธ์ด ๋ฐ”๋กœ OAuth2.0 ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ, OAuth๊ฐ€ ์–ด๋–ค ๋ฐฐ๊ฒฝ์—์„œ ๋“ฑ์žฅํ•˜์˜€๊ณ , ํ˜„์žฌ๋Š” ์–ด๋–ป๊ฒŒ ํ‘œ์ค€ํ™”๋˜์–ด OAuth2.0์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š”์ง€, ๊ทธ ํ๋ฆ„์— ๋Œ€ํ•œ ๊ฐœ๋…์„ ํ•จ๊ป˜ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿง OAuth ๋“ฑ์žฅ๋ฐฐ๊ฒฝ ์›น ์„œ๋น„์Šค์˜ ๋‹ค์–‘์„ฑ์ด ์ฆ๊ฐ€ํ•˜๋ฉด์„œ, ์•ˆ์ „ํ•˜๊ฒŒ ์ •๋ณด๋ฅผ ๊ณต์œ ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ํ•„์š”์„ฑ์ด ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด OAuth(Open Authorization)๋ผ๋Š” ๊ฐœ๋…์ด ํƒ„์ƒํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•œ ๊ฐ€์ง€ ์˜ˆ๋ฅผ ๋“ค์–ด ๋ณผ๊ฒŒ์š”. ์šฐ๋ฆฌ์˜ ์„œ๋น„์Šค๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์‚ฌ์šฉ์ž์˜ ๊ตฌ๊ธ€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”? ์‚ฌ์šฉ์ž๊ฐ€ ๊ตฌ๊ธ€์— ๋Œ€..

article thumbnail
[Web] ์›น ์†Œ์ผ“(Web Socket)์ด๋ž€? ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ๊ณผ ๋ชฉ์ , ๋™์ž‘ ๋ฐฉ์‹ (feat. Polling, Long polling, Server-Sent Event)

๐Ÿ“– ๋“ค์–ด๊ฐ€๋ฉฐ ์ด๋ฒˆ ํฌ์ŠคํŒ…์€ ์›น ์†Œ์ผ“(Web Scoket)์— ๋Œ€ํ•œ ํฌ์ŠคํŒ…์„ ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธ€์„ ์ฝ์œผ์‹œ๋Š” ๋ถ„๋“ค์€ ์•„๋งˆ ์›น ์†Œ์ผ“์ด ๋ฌด์—‡์ธ์ง€ ์ •๋„๋Š” ์•Œ๊ณ  ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋งž์Šต๋‹ˆ๋‹ค. ์‹ค์‹œ๊ฐ„ ํ†ต์‹ ์ด ํ•„์š”ํ•  ๋•Œ ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์™œ ์‹ค์‹œ๊ฐ„ ํ†ต์‹ ์„ ํ•  ๋•Œ ์›น ์†Œ์ผ“์„ ์‚ฌ์šฉํ•˜๋Š”์ง€, ๊ธฐ์กด์—๋Š” ์–ด๋–ค ๋ฐฉ์‹์„ ์‚ฌ์šฉํ–ˆ๊ณ , ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด ์ฃผ๋Š”์ง€, ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ๋“ฑ๋“ฑ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์›น ์†Œ์ผ“์˜ ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ ์ดˆ๊ธฐ์˜ ์ธํ„ฐ๋„ท ํ†ต์‹  ๋ฐฉ์‹์€ ์ฃผ๋กœ HTTP๋ฅผ ์ด์šฉํ•œ ํด๋ผ์ด์–ธํŠธ(์š”์ฒญ) - ์„œ๋ฒ„(์‘๋‹ต) ๋ชจ๋ธ์„ ํ†ตํ•ด ์ง„ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญ(Request)์„ ๋ณด๋‚ด๊ณ , ์„œ๋ฒ„๊ฐ€ ์ด์— ์‘๋‹ต(Response)ํ•˜๋Š” ๋ฐ˜์ด์ค‘ ํ†ต์‹  ๋ฐฉ์‹์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹์ด ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ•˜๋Š” ๋“ฑ์˜ ๊ฐ„๋‹จํ•œ ์ž‘์—…์—๋Š” ..

article thumbnail
[JavaScript] ์‹คํ–‰ ์ปจํ…์ŠคํŠธ(Execution Context)๊ฐ€ ๋ฌด์—‡์ผ๊นŒ์š”?

๋“ค์–ด๊ฐ€๋ฉฐ ๐Ÿ“– ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐ ์žˆ์–ด์„œ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ(Execution Context)์˜ ๊ฐœ๋…์— ๋Œ€ํ•ด์„œ ์ˆ™์ง€ํ•˜๋Š” ๊ฒƒ์€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ•ต์‹ฌ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜๋กœ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์ฝ”๋“œ์˜ ์‹คํ–‰ ์ˆœ์„œ์™€ ๋ฐฉ์‹์„ ๊ฒฐ์ •ํ•˜๊ฒŒ ๋˜์ฃ . ์‹คํ–‰ ์ปจํ…์ŠคํŠธ(Excution Context)๋ž€โ“ ์‹คํ–‰ํ•  ์ฝ”๋“œ์— ์ œ๊ณตํ•  ํ™˜๊ฒฝ ์ •๋ณด๋“ค์„ ๋ชจ์•„๋†“์€ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋™์  ์–ธ์–ด๋กœ์„œ์˜ ์„ฑ๊ฒฉ์„ ๊ฐ€์žฅ ์ž˜ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๊ฐ€ ํ™œ์„ฑํ™”๋˜๋Š” ์‹œ์ ์— ์•„๋ž˜์™€ ๊ฐ™์€ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ด์ŠคํŒ…(hoisting) ์™ธ๋ถ€ ํ™˜๊ฒฝ ์ •๋ณด ๊ตฌ์„ฑ this ๊ฐ’ ์„ค์ • ๋“ฑ๋“ฑ ์ด๋กœ ์ธํ•ด ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ๋Š” ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์—†๋Š” ํŠน์ดํ•œ ํ˜•์ƒ๋“ค์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋™์ž‘ ๊ณผ์ • ๋™์ผํ•œ ํ™˜๊ฒฝ์— ์žˆ๋Š” ์ฝ”๋“œ๋“ค์„ ์‹คํ–‰ํ•  ๋•Œ ํ•„์š”ํ•œ ํ™˜๊ฒฝ ์ •๋ณด..

article thumbnail
[JavaScript] ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ํŒจํ„ด์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ด…์‹œ๋‹ค. (Callback, Promise, Generator, async/await)

๐Ÿ“– ๋“ค์–ด๊ฐ€๋ฉฐ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ํŒจํ„ด์„ ์•Œ์•„๋ณด๊ธฐ ์•ž์„œ, ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”? ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ž€? ํŠน์ • ์ฝ”๋“œ์˜ ์—ฐ์‚ฐ์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์ „์ฒด ์ฝ”๋“œ์˜ ์‹คํ–‰์„ ์ค‘๋‹จํ•˜์ง€ ์•Š๊ณ , ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋™์ž‘ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” '๋น„๋™๊ธฐ ํ•จ์ˆ˜'๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์˜ ํ•œ๊ณ„์ ์€ ์ž‘์—… ์™„๋ฃŒ ์‹œ์ ์„ ์˜ˆ์ธกํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๊ฒƒ์€ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์˜ ๋ณธ์งˆ์ ์ธ ํŠน์„ฑ์ด๋ฉฐ, ์ด๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ(single-threaded) ๊ธฐ๋ฐ˜์˜ ์–ธ์–ด๋กœ, ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ž‘์—…๋งŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์ฝ”๋“œ๊ฐ€ ์ž‘์„ฑ๋œ ์ˆœ์„œ๋Œ€๋กœ, ์œ„์—์„œ ์•„๋ž˜๋กœ, ๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋น„๋™๊ธฐ์ ์ธ ..

article thumbnail
[Next.js] Turbopack์—์„œ SVG ๊ด€๋ จ Element type is invalid: expected a string ์—๋Ÿฌ ํ•ด๊ฒฐ

๐Ÿ“– ๋“ค์–ด๊ฐ€๋ฉฐ Next.js 13 ๋ฒ„์ „ ์ดํ›„์—๋Š” Rust ์–ธ์–ด๋กœ ๊ฐœ๋ฐœ๋œ Turbopack์ด ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Next 14 ๋ฒ„์ „์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ง„ํ–‰ํ•˜๊ณ  Turbopack์œผ๋กœ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์‹คํ–‰ํ–ˆ์„ ๋•Œ ๋งž์ดํ•œ ๋ฌธ์ œ์— ๋Œ€ํ•ด์„œ ์ •๋ฆฌํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ ๋ฐœ์ƒ โ— Turbopack์œผ๋กœ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์‹คํ–‰ํ•˜์ž ์•„๋ž˜์™€ ๊ฐ™์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ์˜ค๋ฅ˜์— ๋Œ€ํ•ด ๊ฒ€์ƒ‰ํ•ด ๋ณด๋‹ˆ "์ปดํฌ๋„ŒํŠธ์˜ ์ด๋ฆ„์ด ์ž˜๋ชป๋˜์—ˆ๊ฑฐ๋‚˜, import ๊ฒฝ๋กœ๊ฐ€ ์ž˜๋ชป ์ž…๋ ฅ๋˜์—ˆ์„ ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค"๋Š” ์„ค๋ช…์„ ์ฐพ์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋”ฐ๋ผ import ๋œ ๋ถ€๋ถ„์„ ์ž˜ ํ™•์ธํ•ด ๋ณด๋ผ๋Š” ์กฐ์–ธ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ์ œ ์ฝ”๋“œ์—์„œ๋Š” import๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ด๋ฃจ์–ด์กŒ๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์ •ํ•  ๋ถ€๋ถ„์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋‹ค์‹œ ํ™•์ธํ•ด ๋ณธ ๊ฒฐ๊ณผ 'DarkModeBtn' ์ปดํฌ๋„Œ..

article thumbnail
[Web] CSR vs SSR vs SSG vs ISR ๊ฐ ๋ Œ๋”๋ง ๋ฐฉ์‹ ์‰ฝ๊ฒŒ ์•Œ์•„๋ณด๊ธฐ

๐Ÿ“– ๋“ค์–ด๊ฐ€๋ฉฐ ๋จผ์ €, ์›น ๋ Œ๋”๋ง(Web Rendering)์ด๋ž€ ์›น ํŽ˜์ด์ง€๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ฃผ๋Š” ๊ณผ์ •์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ Œ๋”๋ง ๋ฐฉ์‹์— ๋”ฐ๋ผ์„œ ๋กœ๋”ฉ ์†๋„, ๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ ํ™”(SEO), ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ๋“ฑ์ด ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์„ ๊ฐ„๋‹จํžˆ ๋น„์œ ํ•˜์ž๋ฉด, ๋ ˆ์Šคํ† ๋ž‘์—์„œ ์š”๋ฆฌ๋ฅผ ์ฃผ๋ฌธํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ ˆ์Šคํ† ๋ž‘์—์„œ ์†๋‹˜(์‚ฌ์šฉ์ž)์ด ๋ฉ”๋‰ด(์›น ํŽ˜์ด์ง€)๋ฅผ ์ฃผ๋ฌธํ•˜๊ณ , ์š”๋ฆฌ์‚ฌ(์„œ๋ฒ„)๊ฐ€ ์š”๋ฆฌ(์›นํŽ˜์ด์ง€)๋ฅผ ์ค€๋น„ํ•˜๊ณ , ์›จ์ดํ„ฐ(๋ธŒ๋ผ์šฐ์ €)๊ฐ€ ์š”๋ฆฌ๋ฅผ ์†๋‹˜์—๊ฒŒ ๊ฐ€์ ธ๋‹ค์ฃผ๋Š” ๊ณผ์ •๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์š”๋ฆฌ์‚ฌ๊ฐ€ ์š”๋ฆฌ๋ฅผ ์ค€๋น„ํ•˜๋Š” ๊ณผ์ •์ด ๋ฐ”๋กœ ๋ Œ๋”๋ง(Rendering)์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ค‘์š”ํ•œ ์›น ๋ Œ๋”๋ง์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜ ์•Œ์•„๋ณผ ๋ Œ๋”๋ง ๋ฐฉ์‹๋“ค์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(Client Side Rendering, CS..