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..
Next.js
์ฑํ
์
๋ ฅ์ฐฝ์ ์ด๋ชจ์ง ์์ด์ฝ์ ๋๋ฅด๋ฉด, ์ด๋ชจํฐ์ฝ ํค๋ณด๋๊ฐ ๋์ ์ด๋ชจ์ง๋ฅผ ์
๋ ฅํ ์ ์๊ฒ ๊ตฌํํ๊ณ ์ถ์๋ค. 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 } ..