[Front-End] CSR vs SSR ๐
์ค๋์ CSR (Client Side Rendering)๊ณผ
SSR (Server Side Rendering)์ ๋ํด ์ ๋ฆฌํด๋ณด๋ ค ํ๋ค.
๐ ์น์์ Client์ Server ๊ฐ ๋์
- Client์์ URL๋ก Server์๊ฒ ์์ฒญ์ ๋ณด๋ธ๋ค.
- Server์์๋ ๊ทธ ์์ฒญ์ ํ ๋๋ก ์ ๋ณด๊ฐ ๋ด๊ธด html ๋ฌธ์๋ฅผ ๋ค์ Client์๊ฒ ์๋ตํด์ค๋ค.
- Client์์๋ ๊ทธ๊ฑธ ๊ทธ๋ฆฐ๋ค.
์ด๋ฐ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉฐ ์น์ ๋์ํ๋ค.
๐ ์น์ ๋ณํ (์งํ)
์ ์ Server์์ ์ฒ๋ฆฌํด์ผํ ์ ๋ณด๋ ๋ง์์ง๊ณ , ํ์๊ฐ ๋์ด๋๋ค ๋ณด๋
๊ณผ๋ถํ๊ฐ ๊ฑธ๋ฆฌ๊ณ ๊ณ์ํด์ ์๋ตํ ๊ฒ์ ๊ทธ๋ฆฌ๋ค๋ณด๋ ํ์ด์ง ๊น๋นก์๋ ๋์ด๋๋ค.
์ด๋ ๋ฑ์ฅํ๊ฒ ๋ ๊ฒ์ด ๋ฐ๋ก Ajax์ด๋ค.
Ajax๋ ํ์ด์ง์ ์ผ๋ถ๋ง ์์ฒญํ๊ณ ์๋ตํ๋ฉฐ ์ ์ฒด ํ์ด์ง๋ฅผ ๋ค์ ๊ทธ๋ฆฌ๋ ๊ฒ์ด ์๋
์๋ต๋ ์ผ๋ถ๋ง ๋ค์ ๊ทธ๋ฆด ์ ์์๊ธฐ ๋๋ฌธ์ ์น์ ์ฑ๋ฅ์ ํ์ธต ์
๊ทธ๋ ์ด๋ ์์ผ์ฃผ์๋ค.
ํ์ง๋ง ๋ ๋์๊ฐ SPA๋ฅผ ๋์
ํ๊ฒ ๋๋ค.
SPA๋ url์ด ๋ณ๊ฒฝ๋๋๋ผ๋ html์ ๋ค์ ๋ด๋ ค์ฃผ์ง ์๋๋ค๋ ๊ฒ์ด๋ค.
์ฐ๋ฆฌ๊ฐ ์ ์๊ณ ์๋ React๋ CSR ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
๐ CSR
CSR์ ๊ธฐ์กด ์น์ ๋์๋ฐฉ์๊ณผ๋ ๋ค๋ฅด๊ฒ
Server์์ html์ ๋ด๋ ค๋ฐ์ง ์๊ณ ์จ์ ํ Client์์๋ง ์ฝ๋๋ฅผ ๋ฐ์ ๊ทธ๋ ค์ฃผ๋ ๋์ ๋ฐฉ์์ ๋งํ๋ค.
์ด๋ป๊ฒ??? (๋ฆฌ์กํธ๋ฅผ ์๋ฅผ ๋ค์ด ์ค๋ช
ํ๋ค)
Network ํญ์ Doc์ | Element ํญ์ ๋น๊ตํ๋ฉฐ ํ์ธํด๋ณด๋ฉด
Doc(Server)์์๋ root ํ๊ทธ๊ฐ ๋น์ด์์ง๋ง Element ํญ(Client)๋ ์ฝ๋๊ฐ ๋ค์ด์์๋ค.
๊ทธ ๋ง์, bundle.js์ ์ฝ๋๊ฐ ๋ด๊ฒจ์ ธ ์จ๋ค๋ ๊ฒ์ด๋ค. ๋น๋๋ฅผ ํ ๋ bundle.js์ ๋ชจ๋ ๋ฆฌ์กํธ ์ฝ๋๋ฅผ javascript๋ก ๋ณํํด์ ๋ด์์ค๋ค.
์๋ฒ๋ ๋น์ด์๋ html์ ์๋ตํ๊ณ ํด๋ผ์ด์ธํธ์์ bundle.js๋ฅผ ์ฝ์ผ๋ฉด์ DOM ํ๋ฉด์ ๊ทธ๋ ค์ค๋ค.
CSR์ ์ฅ์ ๊ณผ ๋จ์
- ์ฅ์ ์ URL์ด ๋ฐ๋์ด๋ html์ ๋ค์ ๋ฐ์ง ์๊ณ ํด๋ผ์ด์ธํธ์์ ์ฒ๋ฆฌํ๋ค๋ ๊ฒ์ด๋ค.
- ๋จ์ ์ ๋ด์ฉ์ด ๋ณ๊ฒฝ๋๊ณ ์ถ๊ฐ๋ ๋๋ง๋ค bundle.js์ ํฌ๊ธฐ๊ฐ ๋๋ฉ์ด์ฒ๋ผ ์ปค์ ธ ๋ก๋ฉ์ด ์ ์ ๋๋ ค์ง๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋์ ์ฒซ ํ๋ฉด์ ๋ณด๊ธฐ๊น์ง ์๊ฐ์ด ์ค๋๊ฑธ๋ฆฐ๋ค.
์ด๋ฐ ๋จ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด CSR+SSR์ ํ๋ฉด ์ด๋จ๊น! -> ์ด๊ฒ ๋ฐ๋ก Next.js์ด๋ค.
๐ ํด๊ฒฐ์ฑ
๊ทธ๋ผ ์ฒซ ์์ ํ๋ฉด์ ์๋ฒ์์ ๋ฐ์ ๋ ๋๋งํ๊ณ , ๋๋จธ์ง๋ CSR ๋ฐฉ์์ผ๋ก ๋์ํ๊ฒ ํ๋ฉด ์ด๋จ๊น?
์ฒซ ํ๋ฉด์ Server์์ ๋ด์ฉ์ด ์ฑ์์ง html์ ๋ฐ๊ณ Client์์๋ ๊ทธ๋ฆฐ๋ค๋ ๋ง์ด๋ค.
-> ๊ฒ์์์ง์ต์ ํ, ์ฒซ ํ๋ฉด ๋ก๋ฉ ์๋๊ฐ ๋นจ๋ผ์ง๋ค.
-> ์ดํ์๋ ์ฌ์ฉ์๊ฐ url์ ์ด๋ํด๋ ๊น๋นก์ ์์ด ์ด์ฉ์ด ๊ฐ๋ฅํ๋ค.
๋ ์ฌ์ด๋ฐฉ๋ฒ์ ์์๊น ???? ์๋ค! Next.js!
Next.js
Next.js์ ๊ฐ์ฅ ํฐ ํน์ง ์ค ํ๋๋ page๊ธฐ๋ฐ์ผ๋ก ๋น๋๋ฅผ ํ๋ค๋ ๊ฒ์ด๋ค.
page๋ ์ฌ๋ฌ๊ฐ์ component๋ค๋ก ์ด๋ฃจ์ด์ ธ์๋ค. pages์ ์๋ ํ์ผ ์ด๋ฆ์ ๊ธฐ๋ฐํ์ฌ ๋ผ์ฐํ
์ด ๋์ํ๋ค.
๋งจ ์ฒ์์ index.js๋ฅผ ๋ถ๋ฌ์จ๋ค. ์ฌ๊ธฐ์ ์๊น ํ์ธํ๋ Networkํญ์ ํ์ธํด๋ณด๋ฉด, ์๋ฒ์์ html์ ๋ด์์ ์๋ตํด์ค๋ค.
๊ทธ ํ /home url๋ก ์ด๋์ ํด๋ ์๋ฒ์์ html์ ์๋ตํด์ค๋ค.
๊ทธ๋ผ CSR๋ ์ด๋์ ๋์ํ๋๊ฑฐ์ผ ?
Next.js์ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณต๋๋ next/link๋ next/router๋ฅผ ์ฌ์ฉํ๋ฉด ๋ด๋ถ์ ์ผ๋ก CSR ๋ฐฉ์์ผ๋ก ๋์๋๋ค.
๐ ์ฝ๋๋ฅผ ๋ณด๋ฉฐ ์ดํด๋๋ฅผ ๋์ฌ๋ณด์
Next.js ๊ณต์ ๋ฌธ์์์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ๋ค.
import Link from 'next/link'
function Home() {
return (
<ul>
<li>
<Link href="/">
<a>Home</a>
</Link>
</li>
<li>
<Link href="/about">
<a>About Us</a>
</Link>
</li>
<li>
<Link href="/blog/hello-world">
<a>Blog Post</a>
</Link>
</li>
</ul>
)
}
export default Home
next/link๋ฅผ ์ฌ์ฉํ๋ฉด CSR ๋ฐฉ์์ผ๋ก ๋ ๋๋ง์ด ๋์ํ๊ฒ ๋๋ค.
<Link href="/about">
์ด๋ผ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด pages ํด๋ ์์ about.js๊ฐ ์คํ๋๋๋ฐ
์ด๋ ์๋ฒ์์ html์ ์๋ตํ์ง ์๊ณ Client ๋ด๋ถ์์ ๋ ๋๋ง๋๋ CSR๋ก ๋์ํ๋ค๐
์ฒซ ํ๋ฉด์ ๋ฌด์กฐ๊ฑด ์๋ฒ์์ html์ ์๋ตํ๋ค. ๊ผญ index.js๊ฐ ์๋๋ผ๋ /about์ผ๋ก ์คํํด๋ about์ html์ ์๋ฒ์์ ๋ฐ์์ ๋ ๋๋ง(SSR)ํ๋ค. ๊ทธ๋ผ ์ฒซ ํ๋ฉด ๋ก๋ฉ์ด ๋นจ๋ผ์ง๋ค!
ํ ์ค๋ก ์ ๋ฆฌํ๋ฉด!
์ฒซ ํ๋ฉด์ SSR ๋ฐฉ์์ผ๋ก ๋์ํ๊ณ ๊ทธ ์ดํ๋ ๋ชจ๋ CSR ๋ฐฉ์์ผ๋ก ๋์ํ๊ฒ ํ๋ค.
์ฐธ๊ณ
์ ํ๋ธ ๊ฐ๋ฐํ๋ผ๋ฆฌ๋
Next.js ๊ณต์ ๋ฌธ์
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ([Front-End] CSR vs SSR ๐), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@boori/Front-End-CSR-vs-SSR์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค