SSR
๋ฆฌ์กํธ๋ก ๊ฐ๋ฐํด์ค๋ฉด์ ๋ณดํต ๋ฐฑ์๋๋ก request์์ฒญ์ ๋ณด๋ด์ json์ ๋ฐ์์ค๋ ์์ฒญ์ด ๋๋ถ๋ถ์ด์๋ค. ๊ทธ๋ฐ๋ฐ ๋ธ๋ก๊ทธ ํ์ด์ง ๊ฐ์ด ์ ์ ๊ฐ ์์ฑํ๊ณ ๋ณด๋ ํ์ด์ง๋ application/json response ํ์ ์ผ๋ก ์๋ํ๋์ง ๊ถ๊ธํด์ ์ฐพ์๋ณด๊ฒ ๋์๋ค. ์ฐพ์๋ณด๋ ์ค application/json ํ์ ์ผ๋ก ํต์ ํ๋ ๊ณณ๊ณผ text/html๋ก ํต์ ํ๋ ๊ณณ์ด ์์๋ค.
application/json ํ์
(d2.naver.)
text/html ํ์
(https://ohou.se/contents/card_collections/9229412?affect_type=CardIndex&affect_id=0)
์ด๋ ๊ฒ ๋ ์ข ๋ฅ์ ํ์ ์ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ์๊ฒ ๋ค. ์ฒซ๋ฒ์งธ ์ฌ์ง์ฒ๋ผ json์ผ๋ก ํต์ ํ ๊ฒฝ์ฐ์๋ ํด๋ผ์ด์ธํธ ์ธก์์ ์๋ฒ์ json์ ์์ฒญํ ํ json์๋ต์ ๋ฐํํ๋ฉด ๊ทธ ๋ ํด๋ผ์ด์ธํธ์ธก์์ ๋ ๋๋งํ๊ฒ๋๋ค. ๋ด๊ฐ ์ง๊ธ๊น์ง ํด์๋ ๋ฆฌ์กํธ๋ csr์ด๋ฏ๋ก ์ด๋ฐ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
๊ทธ๋ฐ๋ฐ text/html์ ๊ฒฝ์ฐ preview๋ฅผ ๋ณด๋ฉด ์ ์ ๋ค์ด ๋ณด๋ ํ์ด์ง์ ๋๊ฐ์ ํ์ด์ง๊ฐ ๋ ๋๋ง๋์๋ค.
preview
์ด response๋ฅผ ๋ณด๋ด์ฃผ๊ธฐ ์ํด์ ์๋ฒ์ธก์์ ssr์ ์ฌ์ฉํด html+css๋ฅผ ๊ตฌํํ ๊ฒ์ด๋ค.
์๋ ๋ค์ด์ด๊ทธ๋จ์ ๋ณด์

์ด ๋ค์ด์ด๊ทธ๋จ์ผ๋ก ๋ณด์ํ๋ ssr์ js๋ฐ fetch์์ฒญ์ ๋์ค์ผ๋ก ๋ฏธ๋ฃจ๋ ๊ฒ์ ์ ์ ์๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ป๊ฒ ๋ฆฌ์กํธ ์ฝ๋๋ฅผ html, css๋ง ๋จผ์ ์๋ฒ์์ ๋ ๋๋งํด์ ๋ด๋ ค์ฃผ์ด์ผ ํ ๊น?
์ฌ์ค ์ด๋ csr๋ก ์ฝ๋ฉํ๋ ๋ฆฌ์กํธ๋ก๋ ๊ตฌํํ๊ธฐ๊ฐ ๋ฒ๊ฑฐ๋ก์ด ๋ถ๋ถ์ด ๋ง๋ค. ์๋ฒ์์ ๋ ๋๋งํ๋๋ก ์ค์ ํด์ผํ ๊ฒ์ด ๋ง๊ณ ๊ธฐ์ ์ ์ผ๋ก๋ js๋ง ๋ฐ๋ก ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ฝ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค. ํ์ง๋ง ์ด๋ฅผ ํด๊ฒฐํ ์ ์๋๋ก ๋ฆฌ์กํธ์์ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง์ ์ํด ๊ถ์ฅํ๋ ๋ฐฉ๋ฒ์ด ์๋ค. ๋ฐ๋ก next.js๋ผ๋ ํ๋ ์์ํฌ์ด๋ค. ์ด ํ๋ ์์ํฌ๋ ์ฌ์ฉํ๋ ๊ฒ๋ง์ผ๋ก๋ ssr์ ๊ฐ๋ฅํ๊ฒ ํด์ค๋ค. ์ฆ ์๋ฒ์์ ๋ฆฌ์กํธ ์ฝ๋๋ฅผ ์คํํด์ ๋ ๋๋งํด์ฃผ๋ ๊ฒ์ด๋ค.
์ด ํ๋ ์์ํฌ๋ ๊ฐ๋ฐ์๊ฐ ์ค์ ํด์ผํ ๋ถ๋ถ๋ค์ ๋ง์ด ์ค์ฌ์ฃผ๊ณ , ๊ฐ๋ฐ์๋ ๋ฆฌ์กํธ ์ฝ๋์๋ง ์ง์คํ ์ ์๊ฒ ํด์ค๋ค. ์ฌ์ค์ ๋ฆฌ์กํธ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง์ ํ๋ฉด next.js๋ฅผ ์ด๋ค๊ณ ๋ณด๋ฉด ๋๋ค. ์ด๋ฏธ tencent, netflix ๋ฑ ๋ง์ ๊ธฐ์ ๋ค์ next.js์ฌ์ฉ์ผ๋ก ์ธํด ๊ฒ์ฆ๋์๋ค. (๋ค์ด๋ฒ ๋ธ๋ก๊ทธํ์์๋ csr์์ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง์ผ๋ก ์ ํํ ๋ next.jsํ๋ ์์ํฌ๋ฅผ ์ ํํ์ง ์์ ๊ฒ์ ํํ ํ๋ค๊ณ ํ ์ ๋๋ ๋ญ..)

๊ทธ๋ ๋ค๋ฉด ๋ง์ ๊ธฐ์ ๋ค์ด ์ ssr์ ์ฌ์ฉํ ๊น? ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง์ ํจ์ผ๋ก์จ ์ป๋ ์ด๋์ ํฌ๊ฒ ๋ ๊ฐ์ง๊ฐ ์๋ค.
๊ฒ์ ์์ง ์ต์ ํ ๊ฒ์ ์์ง์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ์ง ์๊ธฐ ๋๋ฌธ์ js๋ ๊ฒ์ ์กฐ๊ฑด์์ ์ ์ธ๋๋ค. (๋ฌผ๋ก ๊ตฌ๊ธ์ js๋ ๊ฒ์ํ์ง๋ง ๊ตฌ๊ธ ์ญ์ ssr์ ๋ ๊ฐ์ฐ์ ์ ์ค๋ค.) js๋ฅผ ์คํํด ๋ ๋๋งํ๋ csr์ ๋นํด ssr์ html,css๋ฅผ ๋จผ์ ๋ ๋๋งํด ํด๋ผ์ด์ธํธ์ ๋ณด๋ด์ฃผ๊ธฐ ๋๋ฌธ์ ๊ฒ์ ์์ง์ ์ํด ๊ฒ์๋๊ธฐ ์ข์ ์กฐ๊ฑด์ด๋ค.
๋น ๋ฅธ ์ฒซ ํ์ด์ง ๋ ๋๋ง ์ฌ์ค ๋๋ ์ด๊ฒ์ด ์ ์ผ ํฐ ์ฅ์ ์ด๋ผ๊ณ ์๊ฐํ๋ค. csr์ ์ฌ์ฉ์์ ๊ธฐ๊ธฐ ์ฑ๋ฅ์ ์ํฅ์ ๋ฐ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์๋ง๋ค ๋ ๋๋ง ์๋๊ฐ ๋ค๋ฅผ ์ ์๊ณ , ๊ธฐ๋ณธ์ ์ผ๋ก js๋ฅผ ๋ชจ๋ ๋ก๋ฉํ ์์ ์ html์ด ๋ก๋ฉ๋๊ธฐ ๋๋ฌธ์ ์ฒซ ํ์ด์ง ๋ ๋๋ง์ด ๋๋ฆฌ๋ค. ๋ฐ๋ฉด ssr์ ์ฌ์ฉ์์ ํ๊ฒฝ์ ์๊ด ์์ด ๋๊ฐ์ด ์๋ฒ์์ ๋ ๋๋งํด์ ๋ณด๋ด์ฃผ๊ธฐ ๋๋ฌธ์ ์ฒซ ํ์ด์ง ๋ ๋๋ง์ด ๋น ๋ฅด๋ค. ๊ทธ์ ๋ฐ๋ผ ์ฌ์ฉ์ ๊ฒฝํ์ด ์ข์์ง๋ ๊ฒ์ ๋น์ฐํ๋ค.
๋ฌผ๋ก ssr์๋ '์๋ฒ ๋ ๋๋ง์ ๋ฐ๋ฅธ ์๋ฒ ๋ถํ'๊ฐ์ ๋จ์ ์ด ์๊ฒ ์ง๋ง ๊ทธ๋ณด๋ค ์ฌ์ฉํจ์ผ๋ก์จ ์ป๋ ์ด๋์ด ํ์ ์์ ๋ ํดํ ๋๊น ์ฌ์ฉํ๋ค๊ณ ์๊ฐํ๋ค.
react ssr์ ๋ํด์ ์ ์ค๋ช ํด์ฃผ์ ์์์ด ์์ผ๋ ๋ณต์ต์ด ํ์ํ๋ฉด ๋ค์ ๋ณด๋๋ก ํ์. ๋งํฌ : https://tv.naver.com/v/16970015#comment_focus
์์ ์์ ํฌ์ธํธ : waterfall
๋ธ๋ฃจ ๋ผ์ธ๊น์ง : ๋ธ๋ผ์ฐ์ ๊ฐ HTML์ ์ ๋ถ ์ฝ๊ณ DOM ํธ๋ฆฌ๋ฅผ ์์ฑํ๊ธฐ๊น์ง์ ๊ธฐ๊ฐ (์ด๋ฏธ์ง ํ์ผ์ด๋ ์คํ์ผ์ํธ ๋ฑ์ ๊ธฐํ ์์์ ๊ธฐ๋ค๋ฆฌ์ง ์๋๋ค.)
๋ธ๋ฃจ ๋ผ์ธ๋ถํฐ ๋ ๋ ๋ผ์ธ๊น์ง : componentdidmount๋ถํฐ ์์ํ๋ ๋ฆฌ์กํธ ์ด๊ธฐํ ๋ฐ ์ด๋ฏธ์ง, ์ธ๋ถ์คํ์ผ์ํธ๊น์ง ๋ถ๋ฌ์ค๋ ๊ฒ์ด ๋๋๊ธฐ๊น์ง์ ๊ธฐ๊ฐ
๋ ๋ ๋ผ์ธ ์ดํ : ์๋น์คjs ๋ก๋ฉ ๋ฐ/์คํ. ์๋ฅผ ๋ค๋ฉด ๋๊ธ๋์ด ๋งจ ์๋์ ์์ด์ ๋ณด์ด์ง ์๋๋ฐ ๋ ๋ ๋ผ์ธ ์ด์ ์ ๋์ํ๊ฒ ๋ง๋ค์ด์ค ํ์๋ ์์ผ๋ฏ๋ก ๋ ๋ ๋ผ์ธ ์ดํ๋ถํฐ ๋ ๋๋งํ๋ ๊ฒ์ด๋ค. ๋ธ๋ฃจ ๋ผ์ธ๋ถํฐ ๋ ๋๋ผ์ธ๊น์ง์ ๊ธฐ๊ฐ, ์ฆ DOMContentLoaded๋ถํฐ load๊น์ง์ ๊ธฐ๊ฐ์ ์ค์ด๊ธฐ ์ํ ๊ฒ์ด๋ค.
Last updated