ํ”„๋กœ์ ํŠธ

CSR์˜ ๋Œ€ํ‘œ์ ์ธ ๋‹จ์  ์ค‘ ํ•˜๋‚˜์ธ ์ทจ์•ฝํ•œ SEO ์ ์ˆ˜์™€ ๋ชจ๋“ ์‚ฌ๋žŒ๋“ค์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์›น ์ ‘๊ทผ์„ฑ ๊ฐœ์„ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผํ•œ๋‹ค.    ์›น ์ ‘๊ทผ์„ฑ๊ณผ SEO์„ ๊ฐœ์„ ํ•˜๊ธฐ ์ด์ „์˜ ์ ์ˆ˜์ด๋‹ค.์ ‘๊ทผ์„ฑ์€ ํŽ˜์ด์ง€ ๋งˆ๋‹ค ์ƒ์ดํ•˜์ง€๋งŒ, ๊ฐ€์žฅ ๋‚ฎ์€ ๋ฉ”์ธํŽ˜์ด์ง€์˜ ์ ์ˆ˜๊ฐ€ 69์ , SEO ์ ์ˆ˜๋Š” 83์ ์„ ๊ธฐ๋กํ•˜์˜€๋‹ค. SEO : ๊ฒ€์ƒ‰์—”์ง„ ์ตœ์ ํ™”๐Ÿ” React์˜ SEO๋ฆฌ์•กํŠธ์™€ ๊ฐ™์€ SPA๋Š” SSR๊ณผ๋Š” ๋‹ฌ๋ฆฌ, ์ดˆ๊ธฐ์— HTML์ด ์ตœ์†Œํ•œ์˜ ๋‚ด์šฉ์„ ํฌํ•จํ•˜๊ณ , ๋Œ€๋ถ€๋ถ„์˜ ์ฝ˜ํ…์ธ ๋Š” JS๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์ธก์—์„œ ๋ Œ๋”๋ง์ด ๋˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ๋ชจ๋“  ํฌ๋กค๋Ÿฌ๊ฐ€ ์•„๋‹Œ ๋งŽ์€ ํฌ๋กค๋Ÿฌ๋“ค์ด JS๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ด์™€ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.(๊ตฌ๊ธ€๋ด‡์€ JS๋ฅผ ์ง€์›ํ•ด์„œ SEO๊ฐ€ ๋‚˜์˜์ง€ ์•Š๋‹ค๊ณ  ํ•จ)Next.js๋ฅผ ์ด์šฉํ•œ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋ณ„๋‹ค๋ฅธ ์ž‘์—…์„ ..
์ง„ํ–‰์ค‘์ธ ํ”„๋กœ์ ํŠธ๋Š” ๋ฐ˜๋ ค๋™๋ฌผ์˜ ๊ธฐ๋ก๊ณผ ์‚ฌ์ง„ ๊ณต์œ ๊ฐ€ ์ฃผ๋œ ๊ธฐ๋Šฅ์ธ ๋งŒํผ, ์ด๋ฏธ์ง€ ์ตœ์ ํ™” ์ž‘์—…์ด ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.๋ฒˆ๋“ค์‚ฌ์ด์ฆˆ๋ฅผ ์—ด์‹ฌํžˆ ์ค„์—ฌ๋„ KB๋‹จ์œ„์ง€๋งŒ.. ์ด๋ฏธ์ง€๋Š” ๋‹จ์œ„๋ถ€ํ„ฐ MB์ด๋ฏ€๋กœ, ์ด๋ฏธ์ง€ ์ตœ์ ํ™”๋Š” ํ•„์ˆ˜์ด๋‹ค. Next.js์˜ ์ด๋ฏธ์ง€ ์ตœ์ ํ™”Next.js๋Š” next/image๋ฅผ ํ†ตํ•ด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด๋ฏธ์ง€ ์ตœ์ ํ™” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์ค€๋‹ค.But, ๋ฆฌ์•กํŠธ๋Š” ์ด์™€ ๊ฐ™์€ ์ด๋ฏธ์ง€ ์ตœ์ ํ™”๋ฅผ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์ฃผ์ง€ ์•Š์œผ๋ฏ€๋กœ, ์ง์ ‘ ์ตœ์ ํ™” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผํ•œ๋‹ค...!๐Ÿซฃ  ์ž๋™ resizingWebp ๊ฐ™์€ ์ตœ์‹  ์ด๋ฏธ์ง€ ํฌ๋งท ์ง€์›Lazy Loading๋กœ ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์†๋„ ํ–ฅ์ƒCDN ์ง€์›์ด๋ฏธ์ง€ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•๋“ค์„ ๊ณต๋ถ€ํ•ด๋ฉด์„œ, ์ ์šฉํ•ด๋ณด์•˜๋‹ค.  1. browser-image-compression ํ™œ์šฉํ•œ ์ด๋ฏธ์ง€ ํญ, ํƒ€..
์‚ฌ์ง„ ๊ณต์œ ๊ฐ€ ๋ฉ”์ธ ์„œ๋น„์Šค ํŠน์„ฑ ์ƒ, ํ…์ŠคํŠธ๋ณด๋‹จ ์ด๋ฏธ์ง€์˜ ๊ด€์‹ฌ๋„๊ฐ€ ๋†’๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฏธ์ง€๋ฅผ ๋จผ์ € ๋ฐฐ์น˜ํ•˜์˜€๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๋ณด๋‹ˆ, ์šฐ๋ คํ–ˆ๋˜๋Œ€๋กœ ์ด๋ฏธ์ง€๊ฐ€ ๋กœ๋”ฉ๋˜๊ณ ๋‚˜์„œ ํ…์ŠคํŠธ๊ฐ€ ๋ฐ€๋ฆฌ๊ฒŒ๋˜๋ฉด์„œ ๋Œ€๊ทœ๋ชจ ๋ ˆ์ด์•„์›ƒ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜์˜€๋‹ค. ์—ฌ๋Ÿฌ์žฅ์˜ ์ด๋ฏธ์ง€์˜ ๊ฒฝ์šฐ์— CLS ์ ์ˆ˜๊ฐ€ 0.8๋กœ ์–ด๋งˆ์–ด๋งˆํ•˜๋‹ค... ๐Ÿ‘‰๐Ÿป placeholder๋กœ ๋ ˆ์ด์•„์›ƒ์ด ๋ฐ€๋ฆฌ๋Š” ํ˜„์ƒ์„ ๋ฐฉ์ง€ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.  โ—๏ธ ๋ฌธ์ œ์ ์ฒ˜์Œ์—” ์ด๋ฏธ์ง€๋ฅผ ์—…๋กœ๋“œํ•˜๋Š” ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ, ๊ฒŒ์‹œ๋ฌผ์˜ ์ด๋ฏธ์ง€๊ฐ€ ๊ทœ์ •๋œ ์‚ฌ์ด์ฆˆ (1:1, 3:4)์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋ฏธ์ง€ ์ž˜๋ฆผํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜๋Š”๊ฒƒ์„ ํ”ผํ•˜๊ณ  ์‹ถ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด์™€ ๊ฐ™์ด ์ด๋ฏธ์ง€ ์‚ฌ์ด์ฆˆ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์—†์—ˆ๋‹ค.ํ•˜์ง€๋งŒ, ์ด ๋ฐฉ์‹์„ ์œ ์ง€ํ•œ๋‹ค๋ฉด ๊ธฐ์กด์˜ ์›๋ณธ๋น„์œจ์„ ์ด๋ฏธ์ง€ ๋กœ๋”ฉ์ „์—” ์•Œ์ˆ˜๊ฐ€ ์—†๋‹ค๋ณด๋‹ˆ placeholder์„ ์ •์˜ํ•˜๊ธฐ๊ฐ€ ๋‚œ๊ฐํ•ด์ง„๋‹คplaceholder๋งŒ ..
โ—๏ธfirebase store์—์„œ๋Š” ๋ถ€๋ถ„ ํ…์ŠคํŠธ ๊ฒ€์ƒ‰์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค. ex) ๊ท€์—ฌ์šด ํ˜ธ๋‘๋ผ๋Š” ์œ ์ €๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ, ํ˜ธ๋‘๋ผ๊ณ  ๊ฒ€์ƒ‰ํ•˜๋ฉด ์ฟผ๋ฆฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ์ ‘๋‘์–ด๊ฐ€ ์ผ์น˜ํ•˜๋„๋ก ์ž…๋ ฅํ•ด์•ผ ์ฐพ๊ณ ์žํ•˜๋Š” ์œ ์ €๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋‹ค ์ด์™€ ๊ฐ™์€ ์ƒํ™ฉ์ด๋ผ๋ฉด, ๊ฒ€์ƒ‰๊ธฐ๋Šฅ์— ํฐ ์˜๋ฏธ๊ฐ€ ์—†๋Š”๊ฒƒ ๊ฐ™์•„ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด๋กœ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•ด๊ฒฐํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค.  export const cleaningText = (text: string): string => { // ํŠน์ˆ˜๋ฌธ์ž ๋ฐ ๊ณต๋ฐฑ ์ œ๊ฑฐ, ๋‹ค์–‘ํ•œ ์–ธ์–ด ์ง€์› const regEx = /[`~!@#$%^&*()_|+\-=?;:'",.\{\}\[\]\\\/ ]/gim; const cleanText = text.replace(regEx, "").toLowerCase(); return ..
CSR์˜ ๋Œ€ํ‘œ์ ์ธ ์ดˆ๊ธฐ ๋กœ๋”ฉ์†๋„๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•œ ์ž‘์—…๋“ค์„ ์ˆ˜ํ–‰ํ•ด๋ณด์•˜๋‹ค. 1. React.lazy์™€ Suspense ์ ์šฉํ•˜๊ธฐ SPA์˜ ๋Œ€ํ‘œ์ ์ธ ๋‹จ์ ์œผ๋กœ, ์ตœ์ดˆ ๋กœ๋“œ์‹œ ํ•„์š”ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ํŒŒ์ผ์„ ๋‹ค์šด๋ฐ›๊ธฐ ๋•Œ๋ฌธ์—, ์ดˆ๊ธฐ ๋กœ๋”ฉ์†๋„๊ฐ€ ๊ธธ์–ด์ง„๋‹ค๋Š” ์ ์ด ์žˆ๋‹ค. ์ด๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•œ ๋Œ€ํ‘œ์ ์ธ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์ค‘ ํ•˜๋‚˜๊ฐ€ lazy Loading์ด๋‹ค. ๋™์  load  ํ•ด๋‹น ๋ชจ๋“ˆ์ด ํ•„์š”ํ•  ๋•Œ๋งŒ ๋กœ๋“œ → ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…(code splitting)๊ณผ ์ง€์—ฐ ๋กœ๋”ฉ(lazy loading)์„ ๊ฐ€๋Šฅ → ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ํŽ˜์ด์ง€๋‚˜ ๊ธฐ๋Šฅ์— ์ ‘๊ทผํ•  ๋•Œ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋งŒ ๋‹ค์šด๋กœ๋“œ๋ฉ๋ƒฅ์ƒํ™œ ์„œ๋น„์Šค์˜ ๋ผ์šฐํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜๋˜์–ด ์žˆ๋‹ค.const PATHS = { main: "/main", logIn: "/", signUp: "/signup", f..
์ข‹์•„์š”๋Š” ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜๋Š”๊ฒƒ์ด ๋” ํšจ์œจ์ ์ด๋ผ๊ณ  ํŒ๋‹จํ•˜์—ฌ ์ด์— ๋Œ€ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์˜€๋‹ค. ๊ฒŒ์‹œ๊ธ€๊ณผ ๋Œ“๊ธ€, ๋Œ€๋Œ“๊ธ€์— ์ข‹์•„์š”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋„๋ก ๊ตฌํ˜„๋˜์–ด ์žˆ๊ณ , ์ข‹์•„์š”์— ๋Œ€ํ•œ collection ๋˜ํ•œ ๋ถ„๋ฆฌํ•ด๋‘๊ณ , post์™€ comment๋Š” likeCount ํ•„๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์„œ, ์ข‹์•„์š”๊ฐ€ ๋ณ€๊ฒฝ๋ ๋•Œ๋งˆ๋‹ค ์ฟผ๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š๋„๋ก ํ•˜์˜€๋‹ค.  ๐Ÿ“Ž DB collection ์ฐธ๊ณ https://s-organization-335.gitbook.io/meongnang Firebase DB ์„ค๊ณ„ | ์„ฑ๋Šฅ ์ตœ์ ํ™” & ๊ธฐ์ˆ ์  ์˜์‚ฌ๊ฒฐ์ •๐Ÿ‘ค User Users FieldType ใ„ด Following FieldType ใ„ด Follower FieldType Follow ์ •๋ณด๋ฅผ User ํ…Œ์ด๋ธ”์—์„œ ํ•œ๋ฒˆ..
๋กœ๊ทธ์ธ ์ƒํƒœ ์œ ์ง€ ๋กœ๊ทธ์ธ ์ƒํƒœ ์ „์—ญ ๊ด€๋ฆฌfirebase๋Š” ๋กœ๊ทธ์ธ์ด๋‚˜ ํšŒ์›๊ฐ€์ž…์„ ํ•˜๋ฉด, ์ด์™€ ๊ฐ™์ด user์ •๋ณด๋ฅผ ๋ฆฌํ„ดํ•ด์ค€๋‹ค.์ด ์œ ์ € ์ •๋ณด๋ฅผ ํ†ตํ•ด ๋กœ๊ทธ์ธ ์ƒํƒœ์™€, ํ”„๋กœํ•„, ๋ณธ์ธ์˜ ๊ฒŒ์‹œ๊ธ€/๋Œ“๊ธ€ ์—ฌ๋ถ€๊ฐ™์€ ์ž‘์—…๋“ค์„ ํ• ๊ฒƒ์ด๋ฏ€๋กœ ์ „์—ญ(zustand)์œผ๋กœ user์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.์ฒ˜์Œ์—” ์ƒˆ๋กœ๊ณ ์นจ์ด ๋ฐœ์ƒํ•ด๋„ ์ „์—ญ ์ƒํƒœ ์ดˆ๊ธฐํ™”๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก, zustand์˜ persist ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ localStorage์— ๋‹ด์•„ ์ด ๋กœ๊ทธ์ธ ์ƒํƒœ(์œ ์ € ์ •๋ณด ์กด์žฌ ์—ฌ๋ถ€)๋ฅผ ์œ ์ง€๊ฐ€ ๋˜๋„๋ก ํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.ํ•˜์ง€๋งŒ, ์ฐพ์•„๋ณด๋‹ˆ firebase ์ธ์ฆ ์‹œ์Šคํ…œ์ด ์‚ฌ์šฉ์ž์˜ ๋กœ๊ทธ์ธ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด, ์ธ์ฆ ํ† ํฐ์„ ์‚ฌ์šฉํ•˜๊ณ  ์ด ์ธ์ฆํ† ํฐ์˜ ์‹œ๊ฐ„์ด ์•ฝ 1์‹œ๊ฐ„ ์ •๋„์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ด ํ† ํฐ์ด ๋งŒ๋ฃŒ๋˜๊ฑฐ๋‚˜ ๊ฐฑ์‹ ์— ์‹คํŒจํ•˜๋ฉด ๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€์—๋Š” ๋กœ๊ทธ์ธ์ƒํƒœ์ด์ง€๋งŒ..
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..
Yuuuki
'ํ”„๋กœ์ ํŠธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก