๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • What would life be If we had no courage to attemp anything?
Development/React.js

์›ํ‹ฐ๋“œ ํ”„๋ฆฌ์˜จ๋ณด๋”ฉ ์ฑŒ๋ฆฐ์ง€ ์‚ฌ์ „ ๊ณผ์ œ (CSR / SSR with Next.js)

by DevIseo 2022. 9. 28.

์›ํ‹ฐ๋“œ ํ”„๋ฆฌ์˜จ๋ณด๋”ฉ ์ฑŒ๋ฆฐ์ง€ 10์›” (CSR / SSR with Next.js)

https://www.wanted.co.kr/events/pre_challenge_fe_3

 

ํ”„๋ฆฌ์˜จ๋ณด๋”ฉ ํ”„๋ก ํŠธ์—”๋“œ ์ฑŒ๋ฆฐ์ง€ 3์ฐจ | ์›ํ‹ฐ๋“œ

AI ์ฑ„์šฉ, ์—ฐ๋ด‰ ์ •๋ณด, ์ด๋ ฅ์„œ, ์ปค๋ฆฌ์–ด ์ฝ˜ํ…์ธ ๊นŒ์ง€ ์ปค๋ฆฌ์–ด ์„ฑ์žฅ์— ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ, ์›ํ‹ฐ๋“œ์—์„œ ๋งŒ๋‚˜๋ณด์„ธ์š”.

www.wanted.co.kr

CSR(Client-side Rendering)์ด๋ž€ ๋ฌด์—‡์ด๋ฉฐ, ๊ทธ๊ฒƒ์˜ ์žฅ๋‹จ์ ์— ๋Œ€ํ•˜์—ฌ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.


๐Ÿ”ŽCSR (Client Side Rendering)

  • ๋ชจ๋“ ๊ฒƒ์„ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ฒ˜๋ฆฌ ํ•˜๋Š”๊ฒƒ
  • HTML์€ ๋นˆ ํŒŒ์ผ์ด๊ณ , ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ๋‹ด๊ฒจ์žˆ๋Š” JS์™€ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ์ธ JSON์„ ๋‹ค์šด๋ฐ›์•„์™€์„œ ํ™”๋ฉด์— ๊ทธ๋ ค์ค€๋‹ค. (์‚ฌ์ดํŠธ์˜ ์š”์†Œ๋“ค์„ ์ง์ ‘ ๋ Œ๋”๋ง)
  • ๋‹จ์ 
    • ํŽ˜์ด์ง€ ๋กœ๋”ฉ์ด ์˜ค๋ž˜๊ฑธ๋ฆฐ๋‹ค.
    • ๋™์  ๋ Œ๋”๋ง์ด๋ผ SEO๊ฐ€ ์ข‹์ง€์•Š๋‹ค.
    • ๊ทœ๋ชจ ์žˆ๋Š” ์‚ฌ์ดํŠธ๋ผ๋ฉด ๋กœ๋”ฉ ์†๋„๊ฐ€ ๋Š๋ ค์ง„๋‹ค.
  • ์žฅ์ 
    • ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๋ถ€๋ถ„์ ์œผ๋กœ ๋ Œ๋”๋ง ๊ฐ€๋Šฅ

 

 

 

SPA(Single Page Application)๋กœ ๊ตฌ์„ฑ๋œ ์›น ์•ฑ์—์„œ SSR(Server-side Rendering)์ด ํ•„์š”ํ•œ ์ด์œ ์— ๋Œ€ํ•˜์—ฌ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.


๐Ÿ”ŽSPA (Single Page Application)

  • ์‚ฌ์šฉ์ž๊ฐ€ ํ•œ ํŽ˜์ด์ง€์— ๋จธ๋ฌด๋ฅด๋ฉด์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„์—์„œ ๋ฐ›์•„์™€์„œ ๋ถ€๋ถ„์ ์œผ๋กœ๋งŒ ์—…๋ฐ์ดํŠธ
  • ํ•˜๋‚˜์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ฌ์šฉํ•˜๋“ฏ ์‚ฌ์šฉ์„ฑ์ด ์ข‹์•„์ง
  • SPA ํŠธ๋ Œ๋“œ + ์‚ฌ์šฉ์ž๋“ค์˜ PC์„ฑ๋Šฅ ํ–ฅ์ƒ + JS ํ‘œ์ค€ํ™” + ๊ฐ•๋ ฅํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฐ”ํƒ•์œผ๋กœ
    • Angular, Vue, React ๋“ฑ CSR ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๊ฐœ๋ฐœ๋˜์–ด CSR์˜ ์‹œ๋Œ€๋กœ ์ ‘์–ด๋“ฌ!

๐Ÿ”ŽSSR (Server Side Rendering)

  • ์ด๋ฏธ ๋งŒ๋“ค์–ด์ ธ ์žˆ๋Š” HTML ํŒŒ์ผ์„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋„˜๊ฒจ์ค€๋‹ค.
  • ์žฅ์ 
    • **ํŽ˜์ด์ง€ ๋กœ๋”ฉ์ด ๋นจ๋ผ์ง„๋‹ค.**
    • **์ด๋ฏธ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ SEO๊ฐ€ CSR๋ณด๋‹ค ์ข‹๋‹ค.**
  • ๋‹จ์ 
    • ์ƒˆ๋กœ๊ณ ์นจ์ด ์ผ์–ด๋‚ ๋•Œ๋งˆ๋‹ค ์ „์ฒด์ ์ธ ์›น ์‚ฌ์ดํŠธ๋ฅผ ์„œ๋ฒ„์—์„œ ๋‹ค์‹œ ์ƒˆ๋กœ ๋ฐ›์•„์™€์•ผํ•œ๋‹ค.
    • ์„œ๋ฒ„์— ๊ณผ๋ถ€ํ•˜๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.
    •  
  • nextJS์—์„œ SSR ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ณ„๋„์˜ ์„œ๋ฒ„๊ฐ€ ๋Œ์•„๊ฐ€์•ผํ•œ๋‹ค.
  • ์„œ๋ฒ„์—์„œ ํŽ˜์ด์ง€์˜ ์š”์†Œ๋“ค ์ค‘ ๋ฐ”๋กœ ๋‚˜ํƒ€๋‚˜์•ผ ํ•˜๋Š” ๊ฒƒ๋“ค์„ ์ง€์ •ํ•˜์—ฌ์„œ ์„œ๋ฒ„์— ๋ฏธ๋ฆฌ ์—…๋กœ๋“œ ํ•œ๋‹ค.
  • ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ฒซ ๋กœ๋”ฉ์€ ๋น ๋ฅด๊ฒŒ + CSR์˜ ์žฅ์ ์„ ์‚ด๋ฆฌ๋Š” ์ฝ”๋“œ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

Next.js ํ”„๋กœ์ ํŠธ๋ฅผ ์„ธํŒ…ํ•œ ๋’ค yarn start ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ๋ฅผ nextjs github ๋ ˆํฌ์ง€ํ† ๋ฆฌ์—์„œ ์ฐพ์€ ๋’ค, ํ•ด๋‹น ํŒŒ์ผ์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์„ค๋ช…์„ ์ฒจ๋ถ€ํ•ด์ฃผ์„ธ์š”.


pages/_app.js๊ฐ€ ์‹คํ–‰

import '../styles/globals.css'

function MyApp({Component, pageProps}) {
	return <Component {...pageProps}
}

export default MyApp
  • `_app`์€ ์„œ๋ฒ„๋กœ ์š”์ฒญ์ด ๋“ค์–ด์™”์„ ๋•Œ ๊ฐ€์žฅ ๋จผ์ € ์‹คํ–‰๋˜๋Š” ์ปดํฌ๋„ŒํŠธ๋กœ, ํŽ˜์ด์ง€์— ์ ์šฉํ•  ๊ณตํ†ต ๋ ˆ์ด์•„์›ƒ์˜ ์—ญํ• 
  • ์ดํ›„ `_document.js`๊ฐ€ ์‹คํ–‰๋˜์–ด _app.js์—์„œ ๊ตฌ์„ฑํ•œ html์ด ์–ด๋–ค ํ˜•ํƒœ๋กœ ๋“ค์–ด๊ฐˆ์ง€ ๊ตฌ์„ฑ

 

 

Reference

https://heokknkn.tistory.com/29

https://merrily-code.tistory.com/154

https://velog.io/@kjh1551/SPA-SEO-SSR-CSR-TTV-TTI-nextJS#seo-search-engine-optimization

https://hanamon.kr/spa-mpa-ssr-csr-%EC%9E%A5%EB%8B%A8%EC%A0%90-%EB%9C%BB%EC%A0%95%EB%A6%AC/

 

๋Œ“๊ธ€