๐ผ๏ธ ๋ ๋๋ง์ด๋
์์ ํฌ์คํ ์์ ์ค๋ช ํ์์ง๋ง
์ค์ํ ๋งํผ ๋ค์ ํ ๋ฒ ์ง๊ณ ๋์ด๊ฐ์๋ฉด,
๋ ๋๋ง์ด๋ HTML, CSS, Java Script๋ฅผ ํด์ํด์ ์ค์ ํ๋ฉด (UI)์ผ๋ก ๊ทธ๋ ค์ฃผ๋ ๊ฒ์ด๋ค.
์กฐ๊ธ ๋ ๊ตฌ์ฒด์ ์ผ๋ก ์ค๋ช ํ์๋ฉด,
HTML ๐๐ป ๊ตฌ์กฐ ๋ด๋น
CSS ๐๐ป ์คํ์ผ ๋ด๋น
Java Script ๐๐ป ๋์ ๋ฐ ๋ก์ง ๋ด๋น
์ด ์ธ ๊ฐ์ง๋ฅผ ๋ธ๋ผ์ฐ์ ๊ฐ ํด์ํด์ ์๊ฐ์ ์ผ๋ก ๋ณด์ฌ์ฃผ๋ ๊ณผ์ ์ด ๋ ๋๋ง์ด๋ค.
โ๏ธ ๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ๊ณผ์
๋ธ๋ผ์ฐ์ ๋ ์๋์ 5๋จ๊ณ ๊ณผ์ ์ ํตํด ํ๋ฉด์ ๊ทธ๋ฆฐ๋ค.

1๏ธโฃ DOM & CSSOM ์์ฑ
๋ธ๋ผ์ฐ์ ๊ฐ HTML ํ์ผ์ ์ฝ์ผ๋ฉด์
์ด๋ฅผ DOM ํธ๋ฆฌ (Document Object Model)๋ผ๋ ๊ตฌ์กฐํ๋ ๊ฐ์ฒด ํํ๋ก ๋ณํํ๋ค.
์ด ๋, DOM์ด๋ ๋ฌธ์์ ๊ตฌ์กฐ,
์ฆ ํ๊ทธ ๊ฐ์ ๋ถ๋ชจ-์์ ๊ด๊ณ๋ฅผ ํธ๋ฆฌ ํํ๋ก ํํํ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค์ด <body> ์์ <div>๊ฐ ์๊ณ , ๊ทธ ์์ <p>๊ฐ ์๋ ๊ตฌ์กฐ์ฒ๋ผ ๊ณ์ธต์ ์ผ๋ก ๊ตฌ์ฑ๋๋ค.
๋์์, ๋ธ๋ผ์ฐ์ ๋ CSS ํ์ผ๋ ์ฝ์ด์
CSSOM (CSS Object Model)์ด๋ผ๋ ์คํ์ผ ์ ๋ณด ๊ฐ์ฒด ํธ๋ฆฌ๋ฅผ ์์ฑํ๋ค.
CSSOM์๋ ํด๋์ค, ID, ์ธ๋ผ์ธ ์คํ์ผ ๋ฑ ์ ์ฉ๋ ์คํ์ผ ์ ๋ณด๊ฐ ๋ชจ๋ ํฌํจ๋๋ค.
์ด๋ฌํ ๋ ๊ฐ์ ํธ๋ฆฌ๋ ์์ง์ ๋ณ๊ฐ๋ก ์กด์ฌํ์ง๋ง,
๋ค์ ๋จ๊ณ์์ ๋ง๋๊ฒ ๋๋ค.
2๏ธโฃ Render Tree ์์ฑ
์ด์ ๋ธ๋ผ์ฐ์ ๋ DOM๊ณผ CSSOM์ ๊ฒฐํฉํด์
ํ๋ฉด์ ์ค์ ๋ก ๋ณด์ฌ์ง ์์๋ค๋ง ํฌํจ๋ Render Tree๋ฅผ ์์ฑํ๋ค.
์๋ฅผ ๋ค์ด
<div style"display: none"> ๐๐ป ํ๋ฉด์ ์ ๋ณด์ด๊ธฐ ๋๋ฌธ์ ์ ์ธ
<head>๋ <meta> ๋ฑ ๐๐ป ํ๋ฉด์ ์ ๋ณด์ด๊ธฐ ๋๋ฌธ์ ์ ์ธ
visibility: hidden ๐๐ป Render Tree์๋ ํฌํจ๋์ง๋ง, ํ๋ฉด์ ๋ณด์ด์ง๋ ์์
์ด์ฒ๋ผ Render Tree ์์ฑ ๋จ๊ณ์์๋
๋ธ๋ผ์ฐ์ ๊ฐ ๋ฌด์์ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค์ง๋ฅผ ๊ฒฐ์ ํ๋ค.
3๏ธโฃ Layout ๋จ๊ณ (Reflow)
Render Tree๊ฐ ๋ง๋ค์ด์ก๋ค๋ฉด,
์ด์ ๊ฐ ์์๊ฐ ๋ธ๋ผ์ฐ์ ํ๋ฉด ์ด๋์ ๋ฐฐ์น๋ ์ง๋ฅผ ๊ณ์ฐํ๋ค.
์ด๋ ๊ณ ๋ ค๋๋ ์ ๋ณด๋ ์๋์ ๊ฐ๋ค.
width, height, padding, margin, position ๋ฑ ํฌ๊ธฐ์ ์์น ์ ๋ณด,
flex / grid ๊ฐ์ ๋ ์ด์์ ๊ตฌ์กฐ,
%, vw, vh ๊ฐ์ ์๋ ๋จ์
์ด๋ ๋ง์ฝ ๋ฐ์ํ ๋์์ธ์ด๋ผ๋ฉด,
๋ธ๋ผ์ฐ์ ์ ๋ทฐํฌํธ ํฌ๊ธฐ์ ๋ฐ๋ผ ๊ณ์ฐ ๊ฒฐ๊ณผ๋ ๋ฌ๋ผ์ง๊ฒ ๋๋ค.
์ด๋ฌํ ๊ณผ์ ์ Layout ๋๋ Reflow๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ,
์์์ ํฌ๊ธฐ๋ ์์น๊ฐ ๋ฐ๋๋ฉด ๋ค์ ๊ณ์ฐ์ด ํ์ํ๊ธฐ ๋๋ฌธ์
์ฑ๋ฅ์ ๋ฏผ๊ฐํ ๋จ๊ณ์ด๋ค.
4๏ธโฃ Paint
Layout ๋จ๊ณ์์ ๊ณ์ฐ๋ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก
๋ธ๋ผ์ฐ์ ๊ฐ ์ค์ ๋ก ํ๋ฉด์ ๊ทธ๋ฆฌ๋ ๋จ๊ณ์ด๋ค.
์ด๋ ๊ทธ๋ ค์ง๋ ์์๋ ์๋์ ๊ฐ๋ค.
ํ ์คํธ
์ด๋ฏธ์ง
๋ฐฐ๊ฒฝ์
border
box-shadow
๋ฒํผ, ์์ด์ฝ ๋ฑ ์๊ฐ์ ์์๋ค
์ด๋ฌํ Paint ๋จ๊ณ๋ ์ค์ ํฝ์ ๋จ์๋ก ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์
๋ณต์กํ ์คํ์ผ์ด ๋ง์์๋ก ์๊ฐ์ด ์ค ๊ฑธ๋ ค์
ํผํฌ๋จผ์ค ์ ํ๋ก ์ด์ด์ง ์ ์๋ค.
5๏ธโฃ Reflow & Repaint
Java Script์ฝ๋๋ ์ฌ์ฉ์ ์ ๋ ฅ์ด ๋ฐ์ํ๋ฉด ํ๋ฉด์ ๋ณํ๊ฐ ์๊ธฐ๊ธฐ ๋๋ฌธ์
ํ๋ฉด์ด ํ ๋ฒ ๊ทธ๋ ค์ก๋ค๊ณ ๋๋๋ ๊ฒ์ด ์๋๋ค.
์ด๋ฐ ์ํฉ์์ ๋ธ๋ผ์ฐ์ ๋ ๋ค์
Layout (Reflow) -> Paint (Repaint)๋ฅผ ์ํํด์
๋ณํ๋ ๋ถ๋ถ๋ง ๋ค์ ๋ ๋๋งํ๊ฒ ๋๋ค.
์ด๊ฒ ๋ฐ๋ก ๋ฆฌ๋ ๋๋ง์ด๊ณ ,
์ด๊ฒ์ด ์ง๋์น๊ฒ ์์ฃผ ์ผ์ด๋๋ฉด ์ฑ๋ฅ ์ ํ์ ์์ธ์ด ๋๊ธฐ๋ ํ๋ค.
๐ก ๋ ๋๋ง ๋ฐฉ์์ ์ธ ๊ฐ์ง ๋ถ๋ฅ
1๏ธโฃ CSR (Client-Side Rendering)
CSR์ ๋ง ๊ทธ๋๋ก ํด๋ผ์ด์ธํธ (๋ธ๋ผ์ฐ์ )์์ ๋ ๋๋ง์ ์ํํ๋ ๋ฐฉ์์ด๋ค.
๐ ๋์ ๊ณผ์
1) ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ธ๋ค.
2) ์๋ฒ๋ ๋น HTML ํ์ผ (index.html)๊ณผ ํจ๊ป JavaScript ํ์ผ(bundle.js)์ ๋ด๋ ค์ค๋ค.
3) ๋ธ๋ผ์ฐ์ ๋ Java Script๋ฅผ ์คํํด์ ํ์ํ UI๋ฅผ ์์ฑํ๊ณ ํ๋ฉด์ ๊ทธ๋ ค์ค๋ค.
๐๐ป ์ฆ, ์ด๊ธฐ์๋ ๋น ํ๋ฉด๋ง ์๋ค๊ฐ, Java Script๊ฐ ์คํ๋๋ฉด ๊ทธ๋์์ผ ๋ด์ฉ์ ๋ ๋๋งํ๊ฒ ๋๋ ๋ฐฉ์์ด๋ค.
๐ ์์
React, Vue, Angular ๋ฑ์
SPA (Single Page Application)๊ฐ ๋ํ์ ์ธ CSR ๋ฐฉ์์ด๋ค.
๐ ์ฅ์
Java Script๋ง์ผ๋ก ์ฒ๋ฆฌ๋๊ธฐ ๋๋ฌธ์ ํ์ด์ง ์ ํ์ด ๋น ๋ฅด๋ฉฐ,
์ฌ์ฉ์์์ ์ํธ์์ฉ์ด ๋น ๋ฅด๊ณ ๋ถ๋๋ฝ๋ค.
๐ ๋จ์
์ฒ์์ ๋ด์ฉ ์๋ HTML์ด ๋ด๋ ค์ค๊ธฐ ๋๋ฌธ์
๊ฒ์์์ง์ด ๋ด์ฉ์ ์ฝ์ง ๋ชปํ ์ ์์ด์
SEO์ ๋ถ๋ฆฌํ๋ฉฐ,
JavaScript๋ฅผ ๋ค ๋ถ๋ฌ์ค๊ณ ์คํ๋๊ธฐ ์ ๊น์ง๋
์ฌ์ฉ์์๊ฒ ๋น์ด์๋ ํ๋ฉด๋ง ๋ณด์ด๊ธฐ ๋๋ฌธ์
์ฒซ ํ๋ฉด ๋ก๋ฉ ์๋๊ฐ ๋๋ฆฌ๋ค.
2๏ธโฃ SSR (Server-Side Rendering)
์์ ๋งํ CSR์ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํด์ ๋ฑ์ฅํ ๊ฒ์ด SSR๋ก,
์๋ฒ์์ ๋ฏธ๋ฆฌ ๋ ๋๋ง๋ HTML์ ์์ฑํด์
ํด๋ผ์ด์ธํธ์ ๋ด๋ ค์ฃผ๋ ๋ฐฉ์์ด๋ค.
๐ ๋์ ๊ณผ์
1) ์ฌ์ฉ์๊ฐ ๋ธ๋ผ์ฐ์ ์์ URL์ ์์ฒญํ๋ค.
2) ์๋ฒ๊ฐ ํด๋น ํ์ด์ง๋ฅผ HTML ํํ๋ก ์ฆ์ ์์ฑํด์ ์๋ตํ๋ค.
3) ๋ธ๋ผ์ฐ์ ๋ HTML์ ๊ทธ๋๋ก ๊ทธ๋ ค์ ๋ณด์ฌ์ฃผ๊ณ ,
์ดํ JavaScript๊ฐ ๋ก๋๋๋ฉฐ ์ธํฐ๋์ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋๋ค.
๐ ์์
Next.js๊ฐ ๋ํ์ ์ธ SSR ๊ธฐ๋ฐ ํ๋ ์์ํฌ์ด๋ค.
๐ ์ฅ์
HTML์ ์ด๋ฏธ ์ฝํ ์ธ ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๊ฒ์์์ง์ด ๋ด์ฉ์ ์ฝ๊ฒ ์ฝ์ด์
SEO์ ๊ฐํ๋ฉฐ,
์ฌ์ฉ์๋ ์ฆ์ ์์ฑ๋ ํ๋ฉด์ ๋ณผ ์ ์๊ธฐ์
์ฒซ ๋ก๋ฉ ์๋๊ฐ ๋น ๋ฅด๋ค.
๐ ๋จ์
๋ชจ๋ ์์ฒญ๋ง๋ค ํ์ด์ง๋ฅผ ์๋ก ๋ ๋๋งํด์ผ ๋ผ์ ์๋ฒ ๋ถํ๊ฐ ํฌ๊ณ ,
ํด๋ผ์ด์ธํธ์์ ๋ค์ JavaScript๊ฐ ์คํ๋๋ฉฐ ์ฌ๋ ๋๋ง์ด ์ผ์ด๋์ ๊น๋นก์์ด ๋ฐ์ํ ์ ์์ผ๋ฉฐ,
๋์ ์ํธ์์ฉ์ CSR ๋ณด๋ค ๋๋ฆฌ๋ค.
3๏ธโฃ SSG (Static Site Generation)
SSG๋ HTML์ ๋ฏธ๋ฆฌ ์ ์ ์ผ๋ก ๋ง๋ค์ด๋๊ณ ,
์ฌ์ฉ์๊ฐ ์์ฒญํ ๋ ๋ฐ๋ก ๋ณด์ฌ์ฃผ๋ ๋ฐฉ์์ด๋ค.
๐ ๋์ ๊ณผ์
1) ๋น๋ํ ๋ ๋ฏธ๋ฆฌ ๋ชจ๋ HTML ํ์ด์ง๋ฅผ ์์ฑํด๋๋ค.
2) ์ฌ์ฉ์๊ฐ ์์ฒญํ๋ฉด ์๋ฒ๋ ๋จ์ํ ๋ง๋ค์ด์ง HTML ํ์ผ์ ๊ทธ๋๋ก ์๋ตํ๋ค.
๐ ์์
Gatsby, Next.js (Static ๋ชจ๋) ๋ฑ์ด SSG๋ฅผ ์ง์ํ๋ค.
๐ ์ฅ์
์ ์ ํ์ผ์ ๊ทธ๋๋ก ์๋ตํ๋ฉด ๋๊ธฐ์ ์๋๊ฐ ๋งค์ฐ ๋น ๋ฅด๊ณ ,
์๋ฒ ๋ถํ๊ฐ ์์ผ๋ฉฐ,
SEO์ ์ต์ ํ๋์ด ์๋ค.
๐ ๋จ์
๊ฒ์๊ธ์ด ์์ฃผ ๋ฐ๋๋ ๊ฒฝ์ฐ ๋ฑ ๋์ ๋ฐ์ดํฐ์๋ ๋ถ์ ํฉํ๋ฉฐ,
ํ์ด์ง๊ฐ ๋ง์์ง์๋ก ๋น๋ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ๋ค.
๐๐ป ํ ๋ฒ ๋ง๋ ํ์ด์ง๋ฅผ ๋ฐฐํฌ ํ์๋ ์๋ฒ ์ฐ์ฐ ์์ด๋ ๋ณด์ฌ์ค ์ ์์ด์
์ ์ ๋ธ๋ก๊ทธ, ๋ฌธ์ ์ฌ์ดํธ ๋ฑ์ ์ ํฉํ๋ค.
โ๏ธ CSR vs SSR vs SSG ๋น๊ต
| ํญ๋ชฉ | CSR | SSR | SSG |
| ๋ ๋๋ง ์์น | ํด๋ผ์ด์ธํธ | ์๋ฒ | ๋น๋ ์ ์ ์ ์์ฑ |
| SEO ์ ํฉ์ฑ | โ ๋ฎ์ | โ ์ข์ | โ ๋งค์ฐ ์ข์ |
| ์ฒซ ๋ก๋ฉ ์๋ | โ ๋๋ฆผ | โ ๋น ๋ฆ | โ ๋งค์ฐ ๋น ๋ฆ |
| ํ์ด์ง ์ ํ | โ ๋น ๋ฆ | ๐ถ ๋ณดํต | โ ๋น ๋ฆ |
| ์๋ฒ ๋ถํ | โ ์ ์ | โ ํผ | โ ์์ |
| ์ค์๊ฐ์ฑ | โ ์ข์ | โ ์ข์ | โ ์ ํ์ |
๐ ์ด๋ค ๋ฐฉ์์ ์ ํํด์ผ ํ ๊น?
1๏ธโฃ CSR์ด ์ ํฉํ ๊ฒฝ์ฐ
๋์๋ณด๋, ๊ด๋ฆฌ ํ์ด์ง, ์ฑ ๋๋์ UX๊ฐ ํ์ํ ๊ฒฝ์ฐ
SEO๊ฐ ์ค์ํ์ง ์๊ฑฐ๋, ๋ก๊ทธ์ธ ํ ํ๋ฉด ์ค์ฌ์ธ ๊ฒฝ์ฐ
2๏ธโฃ SSR์ด ์ ํฉํ ๊ฒฝ์ฐ
๋ด์ค, ์ผํ๋ชฐ, ๋ธ๋ก๊ทธ ๋ฑ SEO๊ฐ ์ค์ํ ์ฝํ ์ธ ๊ธฐ๋ฐ ์น ์ฌ์ดํธ
์ด๊ธฐ ๋ก๋ฉ ์๋ ๊ฐ์ ์ด ํ์ํ ๊ฒฝ์ฐ
3๏ธโฃ SSG๊ฐ ์ ํฉํ ๊ฒฝ์ฐ
๋ธ๋ก๊ทธ, ๋ฌธ์ ์ฌ์ดํธ, ๋ง์ผํ ํ์ด์ง ๋ฑ ๋ณํ๊ฐ ์ ๊ณ ์ ์ ์ธ ํ์ด์ง
๋น๋ ์๊ฐ์ ์ค๋ ๊ฑธ๋ ค๋ ์๊ด ์๋ ๊ฒฝ์ฐ
๐ ๊ฒฐ๋ก
์ต๊ทผ์๋ Next.js์ฒ๋ผ CSR, SSR, SSG๋ฅผ ํผํฉํด์ ์ฌ์ฉํ๋ ํ์ด๋ธ๋ฆฌ๋ ์ ๊ทผ ๋ฐฉ์์ด ๋์ธ๋ผ๊ณ ํ๋ค.
์ํฉ์ ๋ฐ๋ผ ๋ ๋๋ง ์ ๋ต์ ์ ์ฐํ๊ฒ ์ ํํ ์ ์๋๋ก ์ค๊ณํ๋ ๊ฒ ์ค์ํ ๊ฒ ๊ฐ๋ค.
'๐ป๊ณต๋ถ ๊ธฐ๋ก > ๐ Frontend' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Frontend] ํจํค์ง ๋งค๋์ ์ ๋์ ๊ณผ์ (2) | 2025.06.04 |
|---|---|
| [Frontend] ํจํค์ง ๋งค๋์ (1) | 2025.06.03 |
| [Frontend] ๋ ๋๋ง(Rendering)์ด๋ (0) | 2025.05.31 |
| [Frontend] React๋ (1) | 2025.05.27 |
| [Frontend] React Router๋ก SPA์์ ํ์ด์ง ์ด๋ ๊ตฌํํ๊ธฐ (1) | 2025.05.27 |