SPA(Single Page Application) ์ค์ฌ์ผ๋ก ๊ฐ๋ฐ์ ํ๋ค ๋ณด๋ฉด ์์ฐ์ค๋ฝ๊ฒ
"CSR๊ณผ SSR ์ค ์ด๋ค ๋ฐฉ์์ ์จ์ผ ํ ๊น?"๋ผ๋ ์ง๋ฌธ์ ๋ง์ฃผํ๊ฒ ๋๋ค.
์ด๋ฒ์๋ ๋จ์ํ ๊ฐ๋
์ค๋ช
์ ๋์ด์, ๊ฐ ๋ ๋๋ง ๋ฐฉ์์ ๊ตฌ์ฒด์ ์ธ ์ฐจ์ด์ ๊ณผ ์ ํ ๊ธฐ์ค์ ๊น์ด ์ ๋ฆฌํด๋ดค๋ค.
๋ธ๋ผ์ฐ์ ๊ฐ ์ฒ์ ํ์ด์ง๋ฅผ ๋ถ๋ฌ์ฌ ๋, ์ต์ํ์ HTML๊ณผ JavaScript ๋ฒ๋ค์ ๋ฐ๊ณ ,
ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )์์ ์ ์ฒด ํ๋ฉด์ ๊ตฌ์ฑํ๋ ๋ฐฉ์.
๋ํ์ ์ธ ํ๋ ์์ํฌ: React, Vue, Angular
<!-- ์ด๊ธฐ HTML -->
<body>
<div id="root"></div>
<script src="bundle.js"></script>
</body>
์๋ฒ์์ HTML์ ๋ฏธ๋ฆฌ ์์ฑํด์ ํด๋ผ์ด์ธํธ์ ๋ณด๋ด๋ ๋ฐฉ์.
๋ธ๋ผ์ฐ์ ๋ ์์ฑ๋ HTML์ ๋ฐ๋ก ๋ ๋๋งํ ์ ์๋ค.
๋ํ์ ์ธ ํ๋ ์์ํฌ: Next.js, Nuxt.js
export async function getServerSideProps(context) {
const res = await fetch('https://api.example.com/data');
const data = await res.json();
return { props: { data } };
}
ํญ๋ชฉ | CSR | SSR |
---|---|---|
๋ ๋๋ง ์์น | ๋ธ๋ผ์ฐ์ (Client) | ์๋ฒ(Server) |
์ด๊ธฐ ๋ก๋ฉ ์๋ | ๋๋ฆด ์ ์์ (JS ์์ ๋ก๋ ํ์) | ๋น ๋ฆ (HTML ๋จผ์ ์ ๋ฌ) |
SEO ์ต์ ํ | ๋ณ๋ ์ค์ ํ์ (์: prerendering, meta ์ถ๊ฐ) | ๊ธฐ๋ณธ์ ์ผ๋ก ์ต์ ํ ๋จ |
์๋ฒ ๋ถํ | ์ ์ | ๋์ |
UX ๊ฒฝํ | SPA์ฒ๋ผ ๋ถ๋๋ฌ์ | ์ฒซ ํ์ด์ง ๋น ๋ฅด๊ณ ์ดํ ํ์ด์ง ์ ํ์ ๋๋ฆด ์๋ ์์ |
์ฌ์ฉ ์์ | ๋ํํ ์ฑ, ๋์๋ณด๋, ๊ฒ์ | ๋ธ๋ก๊ทธ, ์ผํ๋ชฐ, ๋ด์ค ์ฌ์ดํธ |
์ฒ์์๋ "CSR์ด ๋ฌด์กฐ๊ฑด ์ข์ง ์์?"๋ผ๊ณ ์๊ฐํ์ง๋ง,
SEO๋ ์ด๊ธฐ ๋ ๋๋ง ์๋๋ฅผ ๊ณ ๋ คํ๋ฉด SSR์ด ํ์ํ ์ํฉ์ด ๋ถ๋ช
ํ ์กด์ฌํ๋ค๋ ๊ฑธ ์๊ฒ ๋๋ค.
ํนํ Next.js๋ฅผ ์จ๋ณด๋ฉด์ ํ์ด์ง๋ณ๋ก CSR/SSR์ ์ ์ฐํ๊ฒ ์์ด์ฐ๋ ๊ฒ
์์ฆ ์น ๊ฐ๋ฐ์ ํธ๋ ๋๋ผ๋ ๊ฑธ ํผ๋ถ๋ก ๋๋ผ๊ฒ ๋๋ค.
๐ "CSR๊ณผ SSR์ ์๋ก ๋๋ฆฝํ๋ ๊ฒ ์๋๋ผ, ์ํฉ์ ๋ง๊ฒ '์ ์ ํ ์กฐํฉ'ํด์ ์ฐ๋ ๊ฒ ์ง์ง ์ค๋ ฅ์ด๋ค."