๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ

๐Ÿ“บ Front End71

[Next.js] _document.js๋กœ ๋ ˆ์ด์•„์›ƒ ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•ด์„œ html ๊ณผ body ํƒœ๊ทธ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํ•˜๊ธฐ. Document ์ปดํฌ๋„ŒํŠธ Next.js์—๋Š” ํƒœ๊ทธ์™€ ํƒœ๊ทธ๋ฅผ ์กฐ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. Build ์‹œ์ ์— _document.jsํŒŒ์ผ์„ pages ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์—์„œ ํƒ์ƒ‰ํ•˜๊ณ  ๋ฅผ extends ํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ด์šฉํ•ด์„œ ์ปค์Šคํ…€ ์„ค์ •์„ ๋ฐ›์•„๋“คํžˆ๋Š”๋ฐ, ์ด๋Š” ํ•„์ˆ˜ ํŒŒ์ผ์€ ์•„๋‹ˆ๋ฉฐ, ๋งŒ์•ฝ ์šฐ๋ฆฌ๊ฐ€ ์ปค์Šคํ…€ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ Next์˜ ๋ชจ๋“ˆ์— ์กด์žฌํ•˜๋Š” _document.js ํŒŒ์ผ์„ ์‹คํ–‰์‹œํ‚จ๋‹ค. ํ”„๋กœ์ ํŠธ๊ฐ€ ์ปค์งˆ ์ˆ˜๋ก HTML ํƒœ๊ทธ๋ฅผ ์กฐ์ž‘ํ•ด์•ผํ•  ์ผ๋“ค์ด ๋งŽ์•„์ง€๋ฏ€๋กœ ์šฐ๋ฆฌ๋Š” _document.js์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๊ธฐ๋ณธ ๊ตฌ์กฐ pages ๋””๋ ‰ํ† ๋ฆฌ ์•„๋ž˜์— _document.jsํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค. import Document, { Html, Head, Main, NextScript } from 'next/d.. 2021. 1. 3.
[Next.js] renderPage ํ•จ์ˆ˜๋กœ styled-components ์˜ค๋ฅ˜ ๋ฐฉ์ง€ํ•˜๊ธฐ. React ์—์„œ ์Šคํƒ€์ผ๋ง์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ๋‹จ์—ฐ styled-components๊ฐ€ ์••๋„์ ์œผ๋กœ ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ํ•˜์ง€๋งŒ Next์—์„œ๋Š” styled-components๊ฐ€ ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. ์˜ค๋Š˜ ๊ทธ ์˜ค๋ฅ˜๋“ค์„ ๋ถ„์„ํ•ด๋ณด๊ณ  ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด์ž. ๊ทธ๋ƒฅ styled-components๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฐ€๋‚˜์š”? Next.js ์•ฑ์—์„œ styled-components๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์Šคํƒ€์ผ์ด ์ ์šฉ๋˜์ง€ ์•Š๊ณ  ์ผ์ • ์‹œ๊ฐ„ ์ดํ›„์— ์Šคํƒ€์ผ์ด ์ ์šฉ๋œ๋‹ค. ๋งˆ์น˜ CSS ํŒŒ์ผ์ด ๋กœ๋“œ๋˜์ง€ ์•Š๋‹ค๊ฐ€ ๊ฐ‘์ž๊ธฐ ๋กœ๋“œ๋˜๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ ๋ณด์ด๋Š”๋ฐ, ์ด๋Š” UX์—์„œ ๋‚˜์œ ํ‰๊ฐ€๋กœ ๊ฐ์ธ๋  ์ˆ˜ ์žˆ๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ ์•„์ฃผ ๋ถˆ์พŒํ•œ ๊ฒฝํ—˜์„ ์„ ์‚ฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์™œ ๊ทธ๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋‚˜์š”? Next๋Š” ์šฐ์„  ๋ชจ๋“  ํŽ˜์ด์ง€๊ฐ€ Pre-R.. 2021. 1. 3.
[styled-components] ThemeProvider์—์„œ MediaQuery๋ฅผ ์ ์šฉํ•˜๋Š” 2๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์ด ๊ธ€์€ Styled-components์˜ ThemeProvider์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ์„ ํ–‰ ์ง€์‹์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํ˜น์‹œ ThemeProvider์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํ™•์ธํ•ด๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด ThemeProvider๋กœ ๊ณตํ†ต ์Šคํƒ€์ผ ์†์„ฑ ๊ด€๋ฆฌํ•˜๊ธฐ๋ฅผ ๋ฐฉ๋ฌธํ•ด์„œ ๊ฐ€๋ณ๊ฒŒ ์ฝ๊ณ  ์™€๋ณด์„ธ์š”. ๊ทธ๋Ÿผ ๋” ๋„์›€์ด ๋ ๊ฑฐ์—์š” :) ์–ด๋–ค ์ข…๋ฅ˜์˜ ์–ธ์–ด๋‚˜ ๋„๊ตฌ๊ฐ€ ๋˜์—ˆ๋˜ ์›น ํ”„๋ก ํŠธ์˜ ์Šคํƒ€์ผ๋ง์„ ํ•˜๋Š” ๊ณผ์ •์—๋Š” ๋งŽ์€ ๋…ธ๋ ฅ๊ณผ ํž˜์ด ๋“ค์–ด๊ฐ„๋‹ค. ๊ทธ ์ค‘์—์„œ๋„ ๋ชจ๋ฐ”์ผ๊ณผ ์›น์˜ ์Šคํƒ€์ผ์„ ๋”ฐ๋กœ ๋‚˜๋ˆ„๋Š” ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ ๋ถ€๋ถ„์—์„œ ๊ต‰์žฅํžˆ ๋ฐ˜๋ณต๋˜๋Š” ์ž‘์—…์„ ๋งŽ์ด ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ด ์ž‘์—…์„ ์šฐ๋ฆฌ๋Š” ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ๋‹ค. ๋ฐ”๋กœ ThemeProvider. ์˜ค๋Š˜์€ ์ด ThemeProvider๋ฅผ ํ†ตํ•ด์„œ ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ๋ฅผ ์ข€ ๋” ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณผ ๊ฒƒ์ด๋‹ค. ๊ทธ ์ „์— ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ.. 2021. 1. 2.
[styled-components] ThemeProvider๋กœ ๊ณตํ†ต ์Šคํƒ€์ผ ์†์„ฑ ๊ด€๋ฆฌํ•˜๊ธฐ. ์ง€๋‚œ ์‚ฌ์ดŒ ๋ˆ„๋‚˜์—๊ฒŒ ํ”ผ์•„๋…ธ ์—ฐ์Šต์‹ค ํŽ˜์ด์ง€ ๋งˆ๋ จํ•ด์ฃผ๊ธฐ ํ”„๋กœ์ ํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด์„œ ๊ฐ€์žฅ ํฌ๊ฒŒ ๋Š๊ผˆ๋˜ ์ ์€ ๋ฐ”๋กœ css์—์„œ์˜ ํ†ต์ผ์„ฑ์ด ์—†๋‹ค ๋ผ๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. ์•ฝ 15๊ฐœ์˜ ์ปดํฌ๋„ŒํŠธ์™€ 12๊ฐœ์˜ ์„น์…˜๊ณผ 3๊ฐœ์˜ ํŽ˜์ด์ง€๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฆฌ์•กํŠธ ์•ฑ์„ ๋งŒ๋“ค๋ฉด์„œ ๊ฐ๊ฐ์˜ ์ปดํฌ๋„ŒํŠธ์— ๋งž๋Š” style.js ํŒŒ์ผ์„ ์ž‘์„ฑํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ ๋‹น์‹œ์—๋Š” CSS๋ฅผ ๊ณตํ†ต์œผ๋กœ ๊ด€๋ฆฌํ•  ์ƒ๊ฐ๋ณด๋‹ค๋Š” ๋น ๋ฅด๊ฒŒ ํ”„๋กœ์ ํŠธ๋ฅผ ๋๋‚ด๊ณ ์‹ถ์€ ๋งˆ์Œ์ด์—ˆ์–ด์„œ ๊ณตํ†ต ์Šคํƒ€์ผ์— ๊ด€ํ•œ ์ƒ๊ฐ์˜ ์—ฌ์œ ๊ฐ€ ์—†์—ˆ๋‹ค. ๊ทธ๋ž˜๋„ ๋งˆ์Œ ํ•œ์ผ ์— ๋ถˆ์•ˆ์ด ์žˆ์—ˆ๋Š”๋ฐ, ๊ทธ ๋ถˆ์•ˆ์ด ๊ฐ€์ ธ์˜ฌ ๋ฌธ์ œ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ๋งค ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ์Šคํƒ€์ผ ์ฝ”๋“œ์˜ ์ผ๊ด€์„ฑ์ด ๋–จ์–ด์ง„๋‹ค. => ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ์˜ ์ฆ๊ฐ€ ์Šคํƒ€์ผ ์†์„ฑ๊ฐ’๋“ค์ด ์ค‘๊ตฌ๋‚œ๋ฐฉ์ด๋ผ ์–ด๋–ค ์†์„ฑ์„ ๊ฐ–๊ณ ์žˆ๋Š”์ง€ ์ฝ”๋“œ๋กœ ํ™•์ธ์ด ์–ด๋ ต๋‹ค => ํ˜‘์—…์—์„œ์˜ ๋ฌธ์ œ ์Šคํƒ€์ผ๋งˆ๋‹ค ๋‹ค๋ฅธ ์†์„ฑ.. 2021. 1. 2.
์ •์งํ•˜๊ฒŒ ๋ฐฐ์›Œ๋ณด๋Š” Next.js ์‹œ๋ฆฌ์ฆˆ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ธ”๋กœ๊ทธ ์‹œ๋ฆฌ์ฆˆ๋Š” ์ •์งํ•˜๊ฒŒ ๋ฐฐ์›Œ๋ณด๋Š” Next js ์‹œ๋ฆฌ์ฆˆ๋กœ์จ ์ด 8๋ถ€์ž‘์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. Next.js๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์—์„œ ์ด์•ผ๊ธฐํ•˜๋Š” ๋‚ด์šฉ์„ ์ตœ๋Œ€ํ•œ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ์ง๊ด€์ ์ด๊ฒŒ ๊ตฌ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์•ˆ๋…•ํ•˜์„ธ์š”! ์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž ์žฅ์›์ต์ž…๋‹ˆ๋‹ค. ์ •์งํ•˜๊ฒŒ ๋ฐฐ์›Œ๋ณด๋Š” Next.js ์‹œ๋ฆฌ์ฆˆ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋ณธ ๋‚ด์šฉ์€ ๊ณต์‹ ๋ฌธ์„œ์˜ ๊ต์œก ๋ฐฉํ–ฅ์„ ์ตœ๋Œ€ํ•œ ์ง€ํ‚ค๋ ค ๋…ธ๋ ฅํ–ˆ์œผ๋ฉฐ Next๋ฅผ ๋ฐฐ์šฐ๊ณ ์‹ถ์–ดํ•˜๋Š” ๋ชจ๋“  ์ดˆ๋ณด์ž๋“ค์—๊ฒŒ ๋„์›€์ด ๋˜๋Š” ๊ธ€์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์ƒ ๋…์ž Next.js๋ฅผ ๋ฐฐ์›Œ๋ณด๊ณ  ์‹ถ์€ ์‚ฌ๋žŒ. SEO ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ์ •๋ณด๋ฅผ ์ฐพ๊ณ ์žˆ๋Š” ์‚ฌ๋žŒ. SSR๊ณผ SSG๋ฅผ ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•ด๋ณด๊ณ  ์‹ถ์€ ์‚ฌ๋žŒ. ํ•„์š” ์—ญ๋Ÿ‰ React ๊ฐœ๋ฐœ ๊ฒฝํ—˜ styled-components ๊ฐœ๋ฐœ ๊ฒฝํ—˜ (Optional) ํ•„์š” ์—ญ๋Ÿ‰์€ ๋ฆฌ์•กํŠธ ๊ฐœ๋ฐœ ๊ฒฝํ—˜.. 2020. 12. 31.
์ •์งํ•˜๊ฒŒ ๋ฐฐ์›Œ๋ณด๋Š” Next.js ์‹œ๋ฆฌ์ฆˆ๋ฅผ ๋งˆ์น˜๋ฉฐ... ํ•ด๋‹น ๋ธ”๋กœ๊ทธ ์‹œ๋ฆฌ์ฆˆ๋Š” ์ •์งํ•˜๊ฒŒ ๋ฐฐ์›Œ๋ณด๋Š” Next js ์‹œ๋ฆฌ์ฆˆ๋กœ์จ ์ด 8๋ถ€์ž‘์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. Next.js๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์—์„œ ์ด์•ผ๊ธฐํ•˜๋Š” ๋‚ด์šฉ์„ ์ตœ๋Œ€ํ•œ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ์ง๊ด€์ ์ด๊ฒŒ ๊ตฌ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค. 0. ๋ชฉ์ฐจ 1. create-next-app์œผ๋กœ next ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ธํŒ…ํ•˜๊ธฐ 2. create-next-app์—์„œ ๋งŒ๋‚œ ์ฒซ ๋ฒˆ์งธ ํ•ต์‹ฌ pages. ๊ทธ๋ฆฌ๊ณ  ๋™์  ๋ผ์šฐํŒ… 3. ํŽ˜์ด์ง€๋ฅผ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ Link-Component ๊ทธ๋ฆฌ๊ณ  Pre-Fetch Dynamic Routing๊ณผ Link๋ฅผ ์ด์šฉํ•ด ๊ฐ„๋‹จํ•œ ๊ฒŒ์‹œํŒ์„ ๋งŒ๋“ค์–ด๋ณด์ž. 4. Next.js์—์„œ head ํƒœ๊ทธ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๋ฉ‹์ง„ ๋ฐฉ๋ฒ• ๋ฒˆ์™ธ & ์‹ค์Šต) ์ด๋ฏธ์ง€์™€ ๋™์˜์ƒ์„ ์ €์žฅํ•˜๊ณ  ์‚ฌ์šฉํ•ด๋ณด์ž. 5. ์›น์˜ ๋ฐœ์ „ ๊ณผ์ •์œผ๋กœ ๋ณด๋Š” SSG์™€ SSR 6. next์˜ ๋‘ ๋ฒˆ์งธ ํ•ต์‹ฌ P.. 2020. 12. 31.