SSR

๋ฆฌ์•กํŠธ๋กœ ๊ฐœ๋ฐœํ•ด์˜ค๋ฉด์„œ ๋ณดํ†ต ๋ฐฑ์—”๋“œ๋กœ request์š”์ฒญ์„ ๋ณด๋‚ด์„œ json์„ ๋ฐ›์•„์˜ค๋Š” ์š”์ฒญ์ด ๋Œ€๋ถ€๋ถ„์ด์—ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ธ”๋กœ๊ทธ ํŽ˜์ด์ง€ ๊ฐ™์ด ์œ ์ €๊ฐ€ ์ƒ์„ฑํ•˜๊ณ  ๋ณด๋Š” ํŽ˜์ด์ง€๋„ application/json response ํƒ€์ž…์œผ๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ๊ถ๊ธˆํ•ด์„œ ์ฐพ์•„๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค. ์ฐพ์•„๋ณด๋˜ ์ค‘ application/json ํƒ€์ž…์œผ๋กœ ํ†ต์‹ ํ•˜๋Š” ๊ณณ๊ณผ text/html๋กœ ํ†ต์‹ ํ•˜๋Š” ๊ณณ์ด ์žˆ์—ˆ๋‹ค.

application/json ํƒ€์ž… (d2.naver.)

jsontype

text/html ํƒ€์ž… (https://ohou.se/contents/card_collections/9229412?affect_type=CardIndex&affect_id=0)

htmltype

์ด๋ ‡๊ฒŒ ๋‘ ์ข…๋ฅ˜์˜ ํƒ€์ž…์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์•Œ๊ฒ ๋‹ค. ์ฒซ๋ฒˆ์งธ ์‚ฌ์ง„์ฒ˜๋Ÿผ json์œผ๋กœ ํ†ต์‹ ํ•  ๊ฒฝ์šฐ์—๋Š” ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ์„œ๋ฒ„์— json์„ ์š”์ฒญํ•œ ํ›„ json์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๊ทธ ๋•Œ ํด๋ผ์ด์–ธํŠธ์ธก์—์„œ ๋ Œ๋”๋งํ•˜๊ฒŒ๋œ๋‹ค. ๋‚ด๊ฐ€ ์ง€๊ธˆ๊นŒ์ง€ ํ•ด์™”๋˜ ๋ฆฌ์•กํŠธ๋Š” csr์ด๋ฏ€๋กœ ์ด๋Ÿฐ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ–ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ text/html์˜ ๊ฒฝ์šฐ preview๋ฅผ ๋ณด๋ฉด ์œ ์ €๋“ค์ด ๋ณด๋˜ ํŽ˜์ด์ง€์™€ ๋˜‘๊ฐ™์€ ํŽ˜์ด์ง€๊ฐ€ ๋ Œ๋”๋ง๋˜์—ˆ๋‹ค.

preview

htmltype-preview ์ด response๋ฅผ ๋ณด๋‚ด์ฃผ๊ธฐ ์œ„ํ•ด์„œ ์„œ๋ฒ„์ธก์—์„œ ssr์„ ์‚ฌ์šฉํ•ด html+css๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ด๋‹ค.

์•„๋ž˜ ๋‹ค์ด์–ด๊ทธ๋žจ์„ ๋ณด์ž

ssr-diagram

์ด ๋‹ค์ด์–ด๊ทธ๋žจ์œผ๋กœ ๋ณด์•„ํ•˜๋‹ˆ ssr์€ js๋ฐ fetch์š”์ฒญ์„ ๋‚˜์ค‘์œผ๋กœ ๋ฏธ๋ฃจ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์–ด๋–ป๊ฒŒ ๋ฆฌ์•กํŠธ ์ฝ”๋“œ๋ฅผ html, css๋งŒ ๋จผ์ € ์„œ๋ฒ„์—์„œ ๋ Œ๋”๋งํ•ด์„œ ๋‚ด๋ ค์ฃผ์–ด์•ผ ํ• ๊นŒ?

์‚ฌ์‹ค ์ด๋Š” csr๋กœ ์ฝ”๋”ฉํ•˜๋˜ ๋ฆฌ์•กํŠธ๋กœ๋Š” ๊ตฌํ˜„ํ•˜๊ธฐ๊ฐ€ ๋ฒˆ๊ฑฐ๋กœ์šด ๋ถ€๋ถ„์ด ๋งŽ๋‹ค. ์„œ๋ฒ„์—์„œ ๋ Œ๋”๋งํ•˜๋„๋ก ์„ค์ •ํ•ด์•ผํ•  ๊ฒƒ์ด ๋งŽ๊ณ  ๊ธฐ์ˆ ์ ์œผ๋กœ๋„ js๋งŒ ๋”ฐ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์‰ฝ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฆฌ์•กํŠธ์—์„œ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์„ ์œ„ํ•ด ๊ถŒ์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ๋ฐ”๋กœ next.js๋ผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. ์ด ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ssr์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค€๋‹ค. ์ฆ‰ ์„œ๋ฒ„์—์„œ ๋ฆฌ์•กํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด์„œ ๋ Œ๋”๋งํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

์ด ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์„ค์ •ํ•ด์•ผํ•  ๋ถ€๋ถ„๋“ค์„ ๋งŽ์ด ์ค„์—ฌ์ฃผ๊ณ , ๊ฐœ๋ฐœ์ž๋Š” ๋ฆฌ์•กํŠธ ์ฝ”๋“œ์—๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. ์‚ฌ์‹ค์ƒ ๋ฆฌ์•กํŠธ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์„ ํ•˜๋ฉด next.js๋ฅผ ์“ด๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค. ์ด๋ฏธ tencent, netflix ๋“ฑ ๋งŽ์€ ๊ธฐ์—…๋“ค์˜ next.js์‚ฌ์šฉ์œผ๋กœ ์ธํ•ด ๊ฒ€์ฆ๋˜์—ˆ๋‹ค. (๋„ค์ด๋ฒ„ ๋ธ”๋กœ๊ทธํŒ€์—์„œ๋„ csr์—์„œ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์œผ๋กœ ์ „ํ™˜ํ•  ๋•Œ next.jsํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์„ ํƒํ•˜์ง€ ์•Š์€ ๊ฒƒ์„ ํ›„ํšŒ ํ•œ๋‹ค๊ณ  ํ•  ์ •๋„๋‹ˆ ๋ญ..)

nextJS

๊ทธ๋ ‡๋‹ค๋ฉด ๋งŽ์€ ๊ธฐ์—…๋“ค์ด ์™œ ssr์„ ์‚ฌ์šฉํ• ๊นŒ? ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์„ ํ•จ์œผ๋กœ์จ ์–ป๋Š” ์ด๋“์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

  1. ๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ ํ™” ๊ฒ€์ƒ‰ ์—”์ง„์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— js๋Š” ๊ฒ€์ƒ‰ ์กฐ๊ฑด์—์„œ ์ œ์™ธ๋œ๋‹ค. (๋ฌผ๋ก  ๊ตฌ๊ธ€์€ js๋„ ๊ฒ€์ƒ‰ํ•˜์ง€๋งŒ ๊ตฌ๊ธ€ ์—ญ์‹œ ssr์— ๋” ๊ฐ€์‚ฐ์ ์„ ์ค€๋‹ค.) js๋ฅผ ์‹คํ–‰ํ•ด ๋ Œ๋”๋งํ•˜๋Š” csr์— ๋น„ํ•ด ssr์€ html,css๋ฅผ ๋จผ์ € ๋ Œ๋”๋งํ•ด ํด๋ผ์ด์–ธํŠธ์— ๋ณด๋‚ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰ ์—”์ง„์— ์˜ํ•ด ๊ฒ€์ƒ‰๋˜๊ธฐ ์ข‹์€ ์กฐ๊ฑด์ด๋‹ค.

  2. ๋น ๋ฅธ ์ฒซ ํŽ˜์ด์ง€ ๋ Œ๋”๋ง ์‚ฌ์‹ค ๋‚˜๋Š” ์ด๊ฒƒ์ด ์ œ์ผ ํฐ ์žฅ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. csr์€ ์‚ฌ์šฉ์ž์˜ ๊ธฐ๊ธฐ ์„ฑ๋Šฅ์˜ ์˜ํ–ฅ์„ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž๋งˆ๋‹ค ๋ Œ๋”๋ง ์†๋„๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๊ณ , ๊ธฐ๋ณธ์ ์œผ๋กœ js๋ฅผ ๋ชจ๋‘ ๋กœ๋”ฉํ•œ ์‹œ์ ์— html์ด ๋กœ๋”ฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ฒซ ํŽ˜์ด์ง€ ๋ Œ๋”๋ง์ด ๋А๋ฆฌ๋‹ค. ๋ฐ˜๋ฉด ssr์€ ์‚ฌ์šฉ์ž์˜ ํ™˜๊ฒฝ์— ์ƒ๊ด€ ์—†์ด ๋˜‘๊ฐ™์ด ์„œ๋ฒ„์—์„œ ๋ Œ๋”๋งํ•ด์„œ ๋ณด๋‚ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์ฒซ ํŽ˜์ด์ง€ ๋ Œ๋”๋ง์ด ๋น ๋ฅด๋‹ค. ๊ทธ์— ๋”ฐ๋ผ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ์ข‹์•„์ง€๋Š” ๊ฒƒ์€ ๋‹น์—ฐํ•˜๋‹ค.

๋ฌผ๋ก  ssr์—๋„ '์„œ๋ฒ„ ๋ Œ๋”๋ง์— ๋”ฐ๋ฅธ ์„œ๋ฒ„ ๋ถ€ํ•˜'๊ฐ™์€ ๋‹จ์ ์ด ์žˆ๊ฒ ์ง€๋งŒ ๊ทธ๋ณด๋‹ค ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์–ป๋Š” ์ด๋“์ด ํ˜„์—…์—์„œ ๋” ํดํ…Œ๋‹ˆ๊นŒ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

react ssr์— ๋Œ€ํ•ด์„œ ์ž˜ ์„ค๋ช…ํ•ด์ฃผ์‹  ์˜์ƒ์ด ์žˆ์œผ๋‹ˆ ๋ณต์Šต์ด ํ•„์š”ํ•˜๋ฉด ๋‹ค์‹œ ๋ณด๋„๋ก ํ•˜์ž. ๋งํฌ : https://tv.naver.com/v/16970015#comment_focus

์˜์ƒ ์•ˆ์˜ ํฌ์ธํŠธ : waterfall

ssr-effect ๋ธ”๋ฃจ ๋ผ์ธ๊นŒ์ง€ : ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTML์„ ์ „๋ถ€ ์ฝ๊ณ  DOM ํŠธ๋ฆฌ๋ฅผ ์™„์„ฑํ•˜๊ธฐ๊นŒ์ง€์˜ ๊ธฐ๊ฐ„ (์ด๋ฏธ์ง€ ํŒŒ์ผ์ด๋‚˜ ์Šคํƒ€์ผ์‹œํŠธ ๋“ฑ์˜ ๊ธฐํƒ€ ์ž์›์€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.)

๋ธ”๋ฃจ ๋ผ์ธ๋ถ€ํ„ฐ ๋ ˆ๋“œ ๋ผ์ธ๊นŒ์ง€ : componentdidmount๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ๋ฆฌ์•กํŠธ ์ดˆ๊ธฐํ™” ๋ฐ ์ด๋ฏธ์ง€, ์™ธ๋ถ€์Šคํƒ€์ผ์‹œํŠธ๊นŒ์ง€ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ฒƒ์ด ๋๋‚˜๊ธฐ๊นŒ์ง€์˜ ๊ธฐ๊ฐ„

๋ ˆ๋“œ ๋ผ์ธ ์ดํ›„ : ์„œ๋น„์Šคjs ๋กœ๋”ฉ ๋ฐ/์‹คํ–‰. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋Œ“๊ธ€๋ž€์ด ๋งจ ์•„๋ž˜์— ์žˆ์–ด์„œ ๋ณด์ด์ง€ ์•Š๋Š”๋ฐ ๋ ˆ๋“œ ๋ผ์ธ ์ด์ „์— ๋™์ž‘ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ค„ ํ•„์š”๋Š” ์—†์œผ๋ฏ€๋กœ ๋ ˆ๋“œ ๋ผ์ธ ์ดํ›„๋ถ€ํ„ฐ ๋ Œ๋”๋งํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋ธ”๋ฃจ ๋ผ์ธ๋ถ€ํ„ฐ ๋ ˆ๋“œ๋ผ์ธ๊นŒ์ง€์˜ ๊ธฐ๊ฐ„, ์ฆ‰ DOMContentLoaded๋ถ€ํ„ฐ load๊นŒ์ง€์˜ ๊ธฐ๊ฐ„์„ ์ค„์ด๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๋‹ค.

Last updated