Next.js

SSR์™€ CSR์˜ SEO CSR (React.js) CSR(ClientSide Rendering)์˜ ๊ฒฝ์šฐ ์ดˆ๊ธฐ์— ๋นˆ html ๋ฌธ์„œ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ด‡์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ธฐ ์–ด๋ ต๊ธฐ๋•Œ๋ฌธ์— SEO์— ๋ถˆ๋ฆฌํ•˜๋‹ค.   SSR(Next.js)ํ•˜์ง€๋งŒ, SSR(ServerSide Rendering)์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•œ ํŽ˜์ด์ง€๋ฅผ ์„œ๋ฒ„์—์„œ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•ด ๋ธŒ๋ผ์šฐ์ €์— ๋ณด๋‚ด๋Š” ๋ฐฉ์‹์œผ๋กœ, ์ด๋ฏธ ์„œ๋ฒ„์ชฝ์—์„œ ๋งŒ๋“ค์–ด์ง„ ์™„์„ฑ๋œ html์„ ๊ฒ€์ƒ‰์—”์ง„๋“ค์ด ํฌ๋กค๋ง์ด ๊ฐ€๋Šฅํ•˜๊ธฐ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰์— ์œ ๋ฆฌํ•ด์ง„๋‹ค. SEO ์ง„๋‹จโœ… SSR์˜ ์žฅ์ ์ธ SEO ์„ฑ๋Šฅ ์ตœ์ ํ™” ์ž‘์—…ํ•˜๊ธฐ ์ „, SEO checkup์„ ํ•ด๋ณด์•˜๋‹ค.https://pagespeed.web.dev/analysis/https-balanco-vercel-app/hxv2uh2yl9?form_factor..
์ฑ„ํŒ… ์ž…๋ ฅ์ฐฝ์— ์ด๋ชจ์ง€ ์•„์ด์ฝ˜์„ ๋ˆ„๋ฅด๋ฉด, ์ด๋ชจํ‹ฐ์ฝ˜ ํ‚ค๋ณด๋“œ๊ฐ€ ๋‚˜์™€ ์ด๋ชจ์ง€๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค.  emoji-picker-react const [showPicker, setShowPicker] = useState(false); const [message, setMessage] = useState("");const onEmojiClick = (event, emojiObject) => { setMessage((prevMessage) => prevMessage + emojiObject.emoji); setShowPicker(false); }; return ( setMessage(e.target.value)} > ..
DebounceDebounce๋Š” ๊ณผ๋„ํ•œ ์š”์ฒญ์œผ๋กœ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์„ฑ๋Šฅ ์ €ํ•˜ ๋ฌธ์ œ๋ฅผ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋‹ค.input์ฐฝ์— ์—ฐ์†์ ์œผ๋กœ ๊ฐ’์„ ์ž…๋ ฅํ• ๋•Œ, ์ด๋ฒคํŠธ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•˜๊ณ  ๊ทธ๋•Œ๋งˆ๋‹ค ๋„คํŠธ์›Œํฌ ์š”์ฒญ์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๋Ÿฐ ๊ฒฝ์šฐ์— ์ง€์†์ ์ธ ์š”์ฒญ์œผ๋กœ ์ธํ•ด ๋„คํŠธ์›Œํฌ ์šฉ๋Ÿ‰๊ณผ ๋ฐฑ์—”๋“œ ๋“ฑ ๊ณผ๋ถ€ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์„ฑ๋Šฅ๋ฉด์—์„œ ์ข‹์ง€ ๋ชปํ•˜๋‹ค.(์œ ๋ฃŒ API์„ ์‚ฌ์šฉํ• ๊ฒฝ์šฐ์—” ๋น„์šฉ๋ฉด์œผ๋กœ๋„ ๋ฌธ์ œ๊ฐ€๋ฐœ์ƒํ•œ๋‹ค..๐Ÿซ ) ๐Ÿ‘‰๐Ÿป Debounce๋ฅผ ์‚ฌ์šฉํ•ด, ์—ฐ์†์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ ์ค‘ ๋งˆ์ง€๋ง‰ ์ด๋ฒคํŠธ(๊ฒ€์ƒ‰ํ•  ํ‚ค์›Œ๋“œ) ๋งŒ์„ ๊ธฐ์ ์œผ๋กœ ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ๋ณด๋‚ด, ์‚ฌ์šฉ์ž ์ž…๋ ฅ๊ณผ ๊ฐ™์€ ๋นˆ๋ฒˆํ•œ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ• ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.  useDebounce : ์‚ฌ์šฉ์ž ์ •์˜ Hookimport { useState, useEffect } ..
Yuuuki
'Next.js' ํƒœ๊ทธ์˜ ๊ธ€ ๋ชฉ๋ก