๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ

(33)
Next.js Image ์•Œ์•„๋ณด๊ธฐ Next.js์—์„œ๋Š” ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ์ตœ์ ํ™”๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•œ๋‹ค Next.js๋ฅผ ์“ฐ์ง€ ์•Š์•˜์„ ๋•Œ๋Š” Lazy loading๋“ฑ ์„ฑ๋Šฅ์„ ์œ„ํ•ด ๊ณ ๋ คํ•ด์•ผํ•  ์‚ฌํ•ญ์ด ๋งŽ์•˜๋Š”๋ฐ Next.js์—์„œ๋Š” ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณต์„ ํ•ด์ค€๋‹ค๊ณ ํ•œ๋‹ค. ํ•œ๋ฒˆ ์‚ดํŽด๋ณด๋ฉด์„œ ๊ณต๋ถ€ํ•ด๋ณด์ž Image ์ปดํฌ๋„ŒํŠธ์— ๋‚ด์žฅ๋œ ์ตœ์ ํ™”๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค ํ–ฅ์ƒ๋œ ์„ฑ๋Šฅ - ์ตœ์‹  ์ด๋ฏธ์ง€ ํ˜•์‹์„ ์‚ฌ์šฉํ•˜๋ฉฐ ๊ฐ ๋””๋ฐ”์ด์Šค์— ๋งž๋Š” ์˜ฌ๋ฐ”๋ฅธ ํฌ๊ธฐ์˜ ์ด๋ฏธ์ง€๋ฅผ ์ œ๊ณตํ•œ๋‹ค ์‹œ๊ฐ์  ์•ˆ์ •์„ฑ - ์ž๋™์œผ๋กœ CLS (Cumulative Layout Shift) ๋ฅผ ๋ฐฉ์ง€ํ•ด์ค€๋‹ค ๋น ๋ฅธ ํŽ˜์ด์ง€ ๋กœ๋“œ - ์ด๋ฏธ์ง€๊ฐ€ ๋ทฐํฌํŠธ์— ๋“ค์–ด ์™”์„ ๋•Œ๋งŒ ๋กœ๋“œ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๊ธฐ ํŽ˜์ด์ง€ ๋กœ๋“œ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค ์œ ์—ฐํ•œ ์—์…‹ - ์™ธ๋ถ€์— ์ €์žฅ๋œ ์ด๋ฏธ์ง€์˜ ๊ฒฝ์šฐ์—๋„ ํฌ๊ธฐ ์กฐ์ •์ด ๊ฐ€๋Šฅ ํ•„์ˆ˜ props src ์ •์ ์œผ๋กœ ๊ฐ€์ ธ์˜จ ์ด๋ฏธ์ง€ ํŒŒ์ผ ์™ธ๋ถ€ URL ..
Next.js์˜ Pre-rendering Next.js๋Š” ๋ชจ๋“  ํŽ˜์ด์ง€๋ฅผ Pre-renderingํ•œ๋‹ค ์ฆ‰, Next.js๋Š” ํด๋ผ์ด์–ธํŠธ์ธก์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋กœ๋“œ๋˜๊ธฐ ์ „์— ๋ฏธ๋ฆฌ HTML์„ ์ƒ์„ฑํ•œ๋‹ค Pre-rendering์€ ๋” ๋‚˜์€ ์„ฑ๋Šฅ๊ณผ SEO์— ์ตœ์ ํ™” ๋˜์–ด ์žˆ๋‹ค. Static Generation , Server-side Rendering Next.js์—๋Š” Static Generation, Server-side Rendering ๋‘๊ฐ€์ง€ ํ˜•ํƒœ์˜ Pre-rendering ๋ฐฉ์‹์„ ์ œ๊ณตํ•œ๋‹ค ๋‘๊ฐ€์ง€ Rendering ๋ฐฉ์‹์˜ ์ฐจ์ด์ ์€ ํŽ˜์ด์ง€์— ๋Œ€ํ•œ HTML์„ ์–ธ์ œ ์ƒ์„ฑ ํ•˜๋А๋ƒ์— ๋”ฐ๋ฅธ ์ฐจ์ด์ด๋‹ค. Static Generation - HTML์€ ๋นŒ๋“œ ์‹œ ์ƒ์„ฑ๋˜๋ฉฐ ์‚ฌ์šฉ์ž ์š”์ฒญ์— ๋”ฐ๋ผ ์žฌ์‚ฌ์šฉ๋œ๋‹ค. Server-side Rendering - HTML์€ ์‚ฌ์šฉ์ž ์š”์ฒญ๋งˆ๋‹ค ์ƒ..
Next.js์˜ _app๊ณผ _document ์•Œ์•„๋ณด๊ธฐ Next.js์—๋Š” _document, _app ๋‘๊ฐœ์˜ ๊ธฐ๋ณธ ํŽ˜์ด์ง€๊ฐ€ ์žˆ๋‹ค _app, _document๋Š” ํ”„๋กœ์ ํŠธ์— ๊ณตํ†ต์ ์œผ๋กœ ์ ์šฉ ๋˜์–ด์•ผํ•  ๋‚ด์šฉ๋“ค์„ ์ž‘์„ฑํ•ด์•ผํ•œ๋‹ค. App App ์ปดํฌ๋„ŒํŠธ๋Š” ์•ฑ์ด ์‹œ์ž‘ํ•  ๋•Œ ๊ฐ€์žฅ ๋จผ์ € ํ˜ธ์ถœ๋˜๋Š” ์ปดํฌ๋„ŒํŠธ์ด๋‹ค. ํ”„๋กœ์ ํŠธ์˜ ๊ธ€๋กœ๋ฒŒ ์ž‘์—…๋“ค์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ์— ์ ํ•ฉํ•œ ์ปดํฌ๋„ŒํŠธ์ด๋‹ค ์˜ˆ์‹œ ํŽ˜์ด์ง€ ๋ณ€๊ฒฝ ์‹œ์—๋„ ๋ ˆ์ด์•„์›ƒ๊ณผ ์ƒํƒœ๊ฐ’์„ ์œ ์ง€ componentDidCatch๋ฅผ ํ†ตํ•œ ์—๋Ÿฌ ํ•ธ๋“ค๋ง ํŽ˜์ด์ง€์— ์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ ์‚ฝ์ž… Global CSS ์ถ”๊ฐ€ Header, Footer์™€ ๊ฐ™์€ ๊ณตํ†ต ๋ ˆ์ด์•„์›ƒ ์ถ”๊ฐ€ const App = ({ Component, pageProps }) => { return ( ); }; export default App; ๊ธฐ๋ณธ์ ์ธ _app ์ปดํฌ๋„ŒํŠธ์˜ ๊ตฌ์กฐ์ด๋ฉฐ props๋กœ Component์™€..
Next.js ์•Œ์•„๋ณด๊ธฐ Next.js์˜ ๊ฐœ๋…์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋Š” ๊ธ€ ์ตœ๊ทผ์— ์•Œ๊ฒŒ ๋œ ์ •๋ณด๋“ค์„ ์ •๋ฆฌํ•˜๋Š” ๋А๋‚Œ์œผ๋กœ ์ž‘์„ฑํ•ด๋ณด๋ ค ํ•œ๋‹ค Next.js๋Š” vercel ํŒ€์—์„œ ๋งŒ๋“  React Framework์ด๋‹ค. ์„œ๋ฒ„์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์„ ํ•จ์œผ๋กœ ์–ป๋Š” ์ด๋“ ? CSR์˜ ๋‹จ์  CSR์˜ ๊ฒฝ์šฐ ๋ชจ๋“  JS ํŒŒ์ผ์„ ๋กœ๋“œํ•œ ์ดํ›„์— ์‚ฌ์šฉ์ž๊ฐ€ ์›น์„ ๋ณด๊ฒŒ ๋œ๋‹ค → ์ฆ‰ JS ํŒŒ์ผ์„ ๋กœ๋“œํ•˜๊ธฐ ์ „ ๊นŒ์ง€ ์‚ฌ์šฉ์ž๋Š” ๋งŽ์€ ์‹œ๊ฐ„์„ ๋Œ€๊ธฐํ•ด์•ผ ํ•œ๋‹ค ๐Ÿ‘‰ ์„œ๋ฒ„์‚ฌ์ด๋“œ ๋ Œ๋”๋ง ์ฆ‰ ์„œ๋ฒ„์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋กœ๋”ฉํ•˜๊ณ  ์œ ์ €๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” html (๋ฏธ๋ฆฌ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ Œ๋”๋ง๋œ ํŽ˜์ด์ง€)์„ ๋ณผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ €๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ์‹œ๊ฐ„์„ ๋‹จ์ถ• ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. CSR์˜ ๋‹จ์  SEO - CSR์˜ ๊ฒฝ์šฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋กœ๋“œ ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์›นํŽ˜์ด์ง€๋ฅผ ๋ณผ ์ˆ˜ ์—†๋‹ค -> ๋น„์–ด์žˆ๋Š” (index.html) ๊ตฌ๊ธ€ ..
๋ณ€์ˆ˜์˜ ํ˜ธ์ด์ŠคํŒ…, TDZ์˜ ๊ฐœ๋… ๋ฐ”๋กœ์•Œ๊ธฐ ํ˜ธ์ด์ŠคํŒ… (Hoisting) ์ด๋ž€ ? JavaScript์—์„œ ํ˜ธ์ด์ŠคํŒ…(hoisting)์ด๋ž€, ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์„ ์–ธ ์ „์— ๋ฏธ๋ฆฌ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. -MDN- ํ•จ์ˆ˜ ์•ˆ์— ์žˆ๋Š” ์„ ์–ธ๋“ค์„ ๋ชจ๋‘ ๋Œ์–ด์˜ฌ๋ ค์„œ ํ•ด๋‹น ํ•จ์ˆ˜ ์œ ํšจ ๋ฒ”์œ„(์‹คํ–‰ ์ปจํ…์ŠคํŠธ)์˜ ์ตœ์ƒ๋‹จ์— ์„ ์–ธํ•˜๋Š” ๊ฒƒ. ํ˜ธ์ด์ŠคํŒ…์˜ ๋Œ€์ƒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ๋ชจ๋“  ์„ ์–ธ์„ ํ˜ธ์ด์ŠคํŒ…ํ•œ๋‹ค. ๋ณดํ†ต ํ˜ธ์ด์ŠคํŒ…์€ var ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜์—์„œ๋งŒ ์ผ์–ด๋‚œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ let, const ์—์„œ๋„ ํ˜ธ์ด์ŠคํŒ…์ด ์ผ์–ด๋‚œ๋‹ค. ๋ณ€์ˆ˜์˜ ์ƒ์„ฑ ๋‹จ๊ณ„๋ฅผ ์•Œ์•„๋ณด๋ฉด์„œ ์ดํ•ดํ•ด๋ณด์ž ๋ณ€์ˆ˜๋Š” 3๊ฐœ์˜ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ ์ƒ์„ฑ์ด ๋œ๋‹ค. 1. ์„ ์–ธ๋‹จ๊ณ„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ณ€์ˆ˜์˜ ์„ ์–ธ์€ var, const, let ํ‚ค์›Œ๋“œ๋กœ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ES6์—์„œ const์™€ let์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค. ์„ ์–ธ๋‹จ๊ณ„์—์„œ๋Š” ..
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹ฑ๊ธ€์Šค๋ ˆ๋“œ์ง€๋งŒ ๋น„๋™๊ธฐ๋กœ ๋™์ž‘ํ•˜๋Š” ์ด์œ  ์šฐ์„  ๊ธ€์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ์Šค๋ ˆ๋“œ์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ๊ฐœ๋…๋ถ€ํ„ฐ ์ดํ•ดํ•˜๊ณ  ๊ฐ€๋ฉด ์ข‹์„ ๋“ฏํ•˜๋‹ค. ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ ์ฐจ์ด ํ”„๋กœ์„ธ์Šค๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ ์‹คํ–‰์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์„ ๋งํ•˜๋ฉฐ, ์Šค๋ ˆ๋“œ๋Š” ์ด ํ”„๋กœ์„ธ์Šค ์•ˆ์—์„œ ์‹คํ–‰๋˜๋Š” ํ๋ฆ„ ๋‹จ์œ„๋ฅผ ๋งํ•œ๋‹ค. ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค ์ตœ์†Œ ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๊ฐ๊ฐ ๋ณ„๋„์˜ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๋…๋ฆฝ์ ์œผ๋กœ ํ• ๋‹น๋ฐ›๋Š”๋‹ค. (code, data, heap, stack) ์Šค๋ ˆ๋“œ๋Š” ์ด์ค‘์— stack๋งŒ ๋”ฐ๋กœ ํ• ๋‹น๋ฐ›๊ณ  ๋‚˜๋จธ์ง€ ์˜์—ญ์€ ์Šค๋ ˆ๋“œ๋ผ๋ฆฌ ์„œ๋กœ ๊ณต์œ ํ•œ๋‹ค. ํ”„๋กœ์„ธ์Šค : ์ž์‹ ๋งŒ์˜ ๊ณ ์œ  ๊ณต๊ฐ„๊ณผ ์ž์›์„ ํ• ๋‹น๋ฐ›์•„ ์‚ฌ์šฉ ์Šค๋ ˆ๋“œ : ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์™€ ๊ณต๊ฐ„๊ณผ ์ž์›์„ ๊ณต์œ ํ•˜๋ฉด์„œ ์‚ฌ์šฉ ์ฆ‰ ์Šค๋ ˆ๋“œ๋Š” ์‹คํ–‰๋˜๋Š” ํ๋ฆ„์˜ ๋‹จ์œ„์ด๋ฉฐ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ๋Š” ์ด ์Šค๋ ˆ๋“œ๊ฐ€ ๋‹ค์ค‘์ ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๋ฒˆ์— ๋งŽ์€ ์ผ๋“ค์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ..
Couch Coding ( ์นด์šฐ์น˜ ์ฝ”๋”ฉ ) - CampUs ํ”„๋กœ์ ํŠธ ํšŒ๊ณ  ์นด์šฐ์น˜์ฝ”๋”ฉ์—์„œ ์ง„ํ–‰ํ•˜๋Š” 6์ฃผ๊ฐ„์˜ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋์ด ๋‚ฌ๋‹ค. 6์ฃผ๊ฐ„ ํŒ€์› ๋ชจ๋‘๊ฐ€ ์—ด์ •์ ์œผ๋กœ ์ž„ํ•ด์ฃผ์–ด์„œ ๋งˆ๋ฌด๋ฆฌ๊ฐ€ ์ž˜ ๋œ ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค ์ƒˆ๋ฒฝ๊นŒ์ง€ ๋‚จ์•„ ๊ฐœ๋ฐœํ•˜๋ฉฐ ํŒ€์œผ๋กœ ์ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด ์ •๋ง ๋ฉ‹์ง„ ์ผ์ด๋ผ๋Š” ๊ฒƒ์„ ๋А๋ผ๊ฒŒ ๋œ ๊ฒƒ ๊ฐ™๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ๋А๋ผ๊ณ  ๋ฐฐ์› ๋˜ ๊ฒƒ๋“ค์„ ๊ธฐ๋กํ–ˆ์—ˆ๊ณ , ์ด์ œ๋Š” ํšŒ๊ณ ๋ฅผ ์จ๋ณด์ž ํ•œ๋‹ค. CampUs ํ”„๋กœ์ ํŠธ์— ์ฐธ์—ฌํ•˜๊ฒŒ ๋œ ๊ณ„๊ธฐ ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ๋“ค์ด ๋‹ค์–‘ํ•œ ์•„์ด๋””์–ด๋ฅผ ๋ƒˆ์—ˆ๋Š”๋ฐ, ์†”์งํžˆ ๋ง‰ ๋Œ๋ฆฐ๋‹ค๊ฑฐ๋‚˜ ํ•˜๋Š” ์•„์ด๋””์–ด๋Š” ์—†์—ˆ๋‹ค. ๊ทธ ๋‹น์‹œ๋งŒ ํ•ด๋„ ๋‚ด ์ž์‹ ๊ฐ์ด ๋ฐ”๋‹ฅ์„ ๊ธฐ์–ด ๋‹ค๋‹ ๋•Œ์—ฌ์„œ ์–ด๋”œ ๊ฐ€๋“  1์ธ๋ถ„๋งŒ ํ•˜๋ฉด ์ข‹๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์„ ํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค ์–ด๋А ํŒ€, ์–ด๋–ค ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋“  ํŒ€์› ๋ถ„๋งŒ ์ž˜ ๋งŒ๋‚˜๋ฉด ์ข‹๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ์บ ํ•‘์žฅ์„ ์ถ”์ฒœ ์„œ๋น„์Šค ํŒ€์— ์ฐธ์—ฌํ•˜๊ฒŒ ๋˜์—ˆ๊ณ  ํŒ€์›๋ถ„๋“ค๊ณผ ์งง์€ ๋Œ€ํ™”๋ฅผ ๋‚˜..
Couch Coding ( ์นด์šฐ์น˜ ์ฝ”๋”ฉ ) - ReactKakaoMapSDK ์ด์šฉํ•˜์—ฌ ๋งˆ์ปค, ์ปค์Šคํ…€ ์˜ค๋ฒ„๋ ˆ์ด ์ƒ์„ฑํ•˜๊ธฐ (์นด์นด์˜ค๋งต) ์šฐ๋ฆฌ ํŒ€์ด ํ˜„์žฌ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ๋Š” CampUs ์„œ๋น„์Šค๋Š” ์ง€๋„๋ฅผ ํ†ตํ•ด ์บ ํ•‘์žฅ์˜ ์ขŒํ‘œ๋ฅผ ํ™•์ธํ•˜๊ณ  ์บ ํ•‘์žฅ์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค์ด๋‹ค ์œ„ ์‚ฌ์ง„์ฒ˜๋Ÿผ ์บ ํ•‘์žฅ์„ ๊ฒ€์ƒ‰ํ•˜๋ฉด ๊ทธ ๊ฒฐ๊ณผ์— ๋”ฐ๋ฅธ ์ขŒํ‘œ๊ฐ€ ์ง€๋„์— ๋“ฑ๋ก๋˜๊ณ  ๋งˆ์ปค๋ฅผ ํด๋ฆญํ–ˆ์„ ๋•Œ ์‚ฌ์ง„๊ณผ ๊ฐ™์•„ '์ปค์Šคํ…€ ์˜ค๋ฒ„๋ ˆ์ด'๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋ง ํ•œ๋‹ค. ์ด์ „์— kakaoMap API๋ฅผ ํ†ตํ•ด ๋ฆฌ์•กํŠธ์—์„œ ๊ฐœ๋ฐœ์„ ํ–ˆ์„ ๋•Œ ๋ฆฌ์•กํŠธ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ๊ฐ€ ์กฐ๊ธˆ ๋ถˆํŽธํ•˜๋‹ค๊ณ  ๋А๋‚€์ ์ด ์žˆ์–ด์„œ ํŽธ๋ฆฌํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์—†์„๊นŒ ์ฐพ์•„๋ณด๋‹ค๊ฐ€ https://github.com/JaeSeoKim/react-kakao-maps-sdk GitHub - JaeSeoKim/react-kakao-maps-sdk: React components for using kakao map api React components for ..