๐ Web
๐ CORS๋ ์ ์ด๋ ๊ฒ ์ฐ๋ฆฌ๋ฅผ ํ๋ค๊ฒ ํ๋๊ฑธ๊น?โ
๐ ๋ธ๋ผ์ฐ์ ์ ๋์ ์๋ฆฌโ
๐ CSR vs SSRโ
๋ชจ๋ฐ์ผ ์๋๊ฐ ๋๋ํ๊ณ ๋ชจ๋ฐ์ผ ํ๊ฒฝ์ ๋ง์ถฐ์ง ์น ํ์ด์ง์ ๋ํ ๋์ฆ๊ฐ ํญ๋ฐ์ ์ผ๋ก ์ฆ๊ฐํ๊ณ ๊ทธ์ ๋ฐ๋ฅธ ์ฑ๋ฅ ์ด์๋ ํจ๊ป ๊ฑฐ๋ก ๋์์ต๋๋ค. ๋ฐ์คํฌํ์ ๋นํด ์ฑ๋ฅ์ด ๋ฎ์ ๋ชจ๋ฐ์ผ, ์ค๋งํธํฐ์ ํตํด ์นํ์ด์ง๋ฅผ ์ถ๋ ฅํ๊ธฐ ์ํด์ ๊ธฐ์กด์ ์์๋ ๋ฐฉ์๊ณผ ๋ค๋ฅธ ์ ๊ทผ์ด ํ์ํ์ต๋๋ค. ๊ทธ๋ ๊ฒ ๋์จ๊ฒ SPA ๊ธฐ๋ฒ์ด ๋ฑ์ฅํ๊ฒ๋์์ต๋๋ค. SPA๋ ๋ธ๋ผ์ฐ์ ์ ๋ก๋๋๊ณ ๋ ๋ค์ ํ์ด์ง ์ ์ฒด๋ฅผ ์๋ฒ์ ์์ฒญํ๋ ๊ฒ์ด ์๋๋ผ ์ต์ด ํ๋ฒ ํ์ด์ง ์ ์ฒด๋ฅผ ๋ก๋ฉํ ์ดํ ๋ถํฐ๋ ๋ฐ์ดํฐ๋ง ๋ณ๊ฒฝํ์ฌ ์ฌ์ฉํ ์ ์๋ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ๋๋ค. ์ด์ ์ ์์ฒญ ์ ๋ง๋ค ์๋ก๊ณ ์นจ์ด ์ผ์ด๋๋ฉฐ ํ์ด์ง๋ฅผ ๋ก๋ฉํ ๋๋ง๋ค ์๋ฒ๋ก๋ถํฐ ๋ฆฌ์์ค๋ฅผ ์ ๋ฌ๋ฐ์ ํด์ํ๊ณ ํ๋ฉด์ ๋ ๋๋งํ๋ ๋ฐฉ์์ MPA ๋ฐฉ์์ ๋๋ค. SPA๋ ํธ๋ํฝ์ ๊ฐ์์ํค๊ณ ์ฌ์ฉ์์๊ฒ ๋ ๋์ ๊ฒฝํ์ ์ฌ๊ณตใ ํ์ต๋๋ค. ์๋ฒ๋ ๋จ์ง JSON ํ์ผ๋ง ๋ณด๋ด์ฃผ๋ ์ญํ ์ ํ๊ณ , Html์ ๊ทธ๋ฆฌ๋ ์ญํ ์ ํด๋ผ์ด์ธํธ ์ธก์์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ํํ๊ฒ ๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ ๋๋ง์ ๋๋ค. ๊ทธ๋ฐ๋ฐ ํด๋ผ์ด์ธํธ ์ชฝ์ด ์ ์ ๋ฌด๊ฑฐ์์ง์ ์ด์ ๋ฐ๋๋ก view๋ง ๊ด๋ฆฌํ์๋ ์ฒ ํ ์ผ๋ก React๊ฐ ๋ฑ์ฅํ๊ฒ ๋์๊ณ ์ด๋ ๊ฒ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ ๋๋ง๊ณผ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง์ ์ธ์์ด ์์๋ ๊ฒ์ ๋๋ค.
ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ ๋๋ง์ ๊ฒฝ์ฐ, ์ฌ์ฉ์์ ํ๋์ ๋ฐ๋ผ ํ์ํ ๋ถ๋ถ๋ง ๋ค์ ์ฝ์ด๋ค์ด๊ธฐ ๋๋ฌธ์ ์๋ฒ ์ธก์์ ๋ ๋๋งํ์ฌ ์ ์ฒด ํ์ด์ง๋ฅผ ๋ค์ ์ฝ์ด๋ค์ด๋ ๊ฒ๋ณด๋ค ๋น ๋ฅธ ์ธํฐ๋ ์ ์ ๊ธฐ๋ํ ์ ์์ต๋๋ค. ํ์ง๋ง, ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ ๋๋ง์ ํ์ด์ง๋ฅผ ์ฝ์ด์ค๋ ์๊ฐ, ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ์ด๋ค์ด๋ ์๊ฐ, ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํ๋ฉด์ ๊ทธ๋ฆฌ๋ ์๊ฐ๊น์ง ๋ชจ๋ ๋ง์ณ์ผ ์ฝํ ์ธ ๊ฐ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง๊ฒ ๋ฉ๋๋ค. ์ฆ, ์ด๊ธฐ ๊ตฌ๋ ์๋๊ฐ ๋๋ฆฌ๋ค๋ ๋จ์ ์ด ์กด์ฌํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ์น๋ช ์ ์ธ ๋จ์ ์ ๊ฒ์ ์์ง ์ต์ ํ์ ๋ฌธ์ ๊ฐ ์กด์ฌํ๋ค๋ ์ ์ ๋๋ค. ๋๋ถ๋ถ์ ์น ํฌ๋กค๋ฌ, ๋ด๋ค์ด ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ์คํ์ํค์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ฐ๋๋ก ์๋ฒ์ฌ์ด๋ ๋ ๋๋ง์ธ ๊ฒฝ์ฐ JS๋ฅผ ์ด์ฉํ ๋ ๋๋ง์ด ์๋๊ธฐ ๋๋ฌธ์ ๊ฒ์ ์์ง์ ์ต์ ํ๊ฐ ๊ฐ๋ฅํ๊ณ , ์ด๊ธฐ ๋ก๋ฉ์ ๋น ๋ฅด์ง๋ง, ๋งค๋ฒ ํ์ด์ง ์์ณฅ๋๋ง๋ค ์๋ก๊ณ ์นจ์ด ๋๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ ๊ฒฝํ์ด SPA๋ณด๋ค ์ข์ง ๋ชปํ๊ณ , ๋งค๋ฒ ์์ฒญ์ ํ๊ธฐ ๋๋ฌธ์ ์๋ฒ์ ๋ถํ๊ฐ ์ปค์ง๋๋ค.
๐ ๋ธ๋ผ์ฐ์ ๋ ๋๋ง ๊ณผ์ (Critical Rendering Path)โ
์ฐ๋ฆฌ๊ฐ ์ฃผ์์ฐฝ์ url๋ฅผ ์ ๋ ฅํ๊ณ , ๋ธ๋ผ์ฐ์ ๋ ํด๋น ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋ด๊ณ ์๋ฒ์๋ ์๋ต์ผ๋ก HTML ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ค์ฃผ๋๋ฐ, ์ด HTML ๋ฐ์ดํฐ๋ฅผ ์ค์ ์ฐ๋ฆฌ๊ฐ ๋ณด์ด๋ ํ๋ฉด์ผ๋ก ๊ทธ๋ฆฌ๊ธฐ๊น์ง ๋จ๊ณ๋ฅผ critical rendering path๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
- ์๋ฒ์์ ์๋ต์ ๋ฐ์ HTML ๋ฐ์ดํฐ๋ฅผ ํ์ฑ์ ํฉ๋๋ค. ์ด๋ javascript ํ์ผ์ ๋ง๋๋ฉด ํด๋น ํ์ผ์ ๋ฐ์์ค๊ณ ์คํํ ๋๊น์ง ํ์ฑ์ ๋ฉ์ถฅ๋๋ค.
- ์ด HTML ํ์ฑํ ๊ฒฐ๊ณผ๋ก DOM Tree๋ฅผ ๋ง๋ญ๋๋ค.
- ํ์ฑํ๋ ์ค CSS ํ์ผ ๋งํฌ๋ฅผ ๋ง๋๋ฉด CSS ํ์ผ์ ์์ฒญํด์ ๋ฐ์์ต๋๋ค.
- CSS ํ์ผ์ ์ฝ์ด์ CSSOM์ ๋ง๋ญ๋๋ค.
- DOM Tree์ CSSOM์ด ๋ชจ๋ ๋ง๋ค์ด์ง๋ฉด ์ด ๋์ ์ฌ์ฉํด Render Tree๋ฅผ ๋ง๋๋๋ฐ ์ด Render Tree๋ ์ค์ ๋ก ๋์ ๋ณด์ด๋ ์น๊ตฌ๋ค๋ก๋ง ์ด๋ฃจ์ด์ง๋๋ค.
- Render Tree์ ์๋ ๊ฐ๊ฐ์ ๋ ธ๋๋ค์ด ํ๋ฉด์ ์ด๋์ ์ด๋ป๊ฒ ์์นํ ๊ฒ์ธ๊ฐ๋ฅผ ๊ณ์ฐํ๋ Layout ๊ณผ์ ์ ๊ฑฐ์น๋๋ฐ ๋ง์ฝ ๋ธ๋ผ์ฐ์ ์ฐฝ์ด ๋ณ๊ฒฝ๋๋ฉด Render Tree๋ฅผ ๋ง๋๋ ๊ณผ์ ์ ์๋ต๋๊ณ , Layout์ด ์ผ์ด๋๊ฒ ๋ฉ๋๋ค.
- ์ด์ Render Tree ๊ฐ ๋ ธ๋๋ค์ ์ค์ ๋ก ํ๋ฉด์ ๊ทธ๋ฆฌ๊ฒ ๋๋ Paint ๊ณผ์ ์ ๊ฑฐ์น๊ฒ ๋ฉ๋๋ค.
๐ Reflow or Repaint(or ReDraw)๊ณผ์ ์ค๋ช ๋ฐ ์ต์ ํ ๋ฐฉ๋ฒโ
reflow๋ ์์ฑ๋ DOM ๋
ธ๋์ ๋ ์ด์์ ์์น ๋ณ๊ฒฝ์ ์ํฅ์ ๋ฐ์ ๋ชจ๋ ๋
ธ๋ ์์น๋ฅผ ๋ค์ ๊ณ์ฐํ์ฌ ๋ ๋ํธ๋ฆฌ๋ฅผ ์ฌ์์ฑํ๋ ๊ณผ์ ์
๋๋ค. reflow๊ณผ์ ์ด ๋๋ ๋ค ๋ ๋ ํธ๋ฆฌ๋ฅผ ๋ค์ ๊ทธ๋ฆฌ๋ ๊ณผ์ ์ repaint๋ผ๊ณ ํฉ๋๋ค.
๋ค์๊ณผ ๊ฐ์ ์ฝ๋๊ฐ ์ด์ reflow๊ฐ ๋ฐ์ํฉ๋๋ค.
function reflow () {
document.getElementById('container').style.width = '600px';
return false;
}
๋ณ๊ฒฝ๋ ์คํ์ผ ์์น ๊ณ์ฐ์ด ์ํ๋๊ณ , reflow ๊ณผ์ ์ด ์ํ๋๊ณ ์์ฑ๋ ๋ ๋ ํธ๋ฆฌ๋ฅผ ๊ทธ๋ฆฌ๋ repaint๊ณผ์ ์ด ์ํ๋ฉ๋๋ค.
repaint ๋ฐ์์ ์ด์ ์ผ background-color๊ฐ์ ๊ฒฝ์ฐ๋ ๋ ์ด์์ ์์น๋ ๋ณ๊ฒฝ๋์ง ์์์ผ๋ฏ๋ก reflow๊ณผ์ ์ด ์๋ต๋ repaint ๊ณผ์ ๋ง ์ผ์ด๋๊ฒ ๋ฉ๋๋ค.
๐ CORSโ
์น์์ ๋ค๋ฅธ ์ถ์ฒ๋ก์ ๋ฆฌ์์ค ์์ฒญ์ ์ ํํ๋ ๊ฒ๊ณผ ๊ด๋ จ๋ ๋ ๊ฐ์ง ์ ์ฑ ์ด ์กด์ฌํ๋๋ฐ ํ๋๊ฐ CORS๊ณ ํ๋๊ฐ SOP์ ๋๋ค. CORS๋ ์๋ก๋ค๋ฅธ ์ถ์ฒ๋ผ๋ฆฌ์ ๋ฆฌ์์ค๋ฅผ ๊ณต์ ํ๋ ์ ์ฑ ์ด๊ณ SOP๋ ์๋ก๋ค๋ฅธ ์ถ์ฒ๋ผ๋ฆฌ์ ๋ฆฌ์์ค๋ฅผ ๊ณต์ ํ์ง ๋ชปํ๊ฒ ํ๋ ์ ์ฑ ์ ๋๋ค. ์ด๋ฌํ ์ ์ฑ ์ด ์กด์ฌํ๋ ์ด์ ๋ ๋ณด์์ ์ธ ๋ฌธ์ ๋๋ฌธ์ธ๋ฐ ์๋ฌด๋ฐ ์ ์ฝ์ด ์์ผ๋ฉด ์ ์๋ฅผ ๊ฐ์ง ์ฌ์ฉ์๊ฐ ์์ค์ฝ๋๋ฅผ ๋ณธ ํ CSRF์ XSS์ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ์ ๋ณด๋ฅผ ํ์ทจํ ์ ์๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ๋ค๋ฅธ ์ถ์ฒ์ ๋ฆฌ์์ค๋ฅผ ์์ณฅํ ๋๋ HTTP ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ์์ฒญ์ ๋ณด๋ด๊ฒ ๋๋๋ฐ, ์ด๋ ๋ธ๋ผ์ฐ ์ ๋ ์์ฒญ ํค๋์ Origin์ด๋ผ๋ ํ๋์ ์์ฒญ์ ๋ณด๋ด๋ ์ถ์ฒ๋ฅผ ํจ๊ป ๋ด์๋ณด๋ ๋๋ค. ์ดํ ์๋ฒ๊ฐ ์ด ์์ฒญ์ ๋ํ ์๋ต์ ํ ๋ ์๋ต ํค๋์ Access-Control-Allow-Origin ์ด๋ผ๋ ๊ฐ์ ์ด ๋ฆฌ์์ค๋ฅผ ์ ๊ทผํ๋ ๊ฒ์ด ํ์ฉ๋ ์ถ์ฒ๋ฅผ ๋ด๋ ค์ฃผ๊ณ , ์ดํ ์๋ต์ ๋ฐ์ ๋ธ๋ผ์ฐ์ ๋ ์์ฒญ์ Origin๊ณผ ์๋ฒ๊ฐ ๋ณด๋ด์ค ์๋ต์ Access-Control-Allow-Origin์ ๋น๊ตํด๋ณธ ํ ์ด ์๋ต์ด ์ ํจํ ์๋ต์ธ์ง ์๋์ง๋ฅผ ๊ฒฐ์ ํ๊ฒ ๋ฉ๋๋ค.
๐ local storage vs session storage vs cookieโ
๋ชจ๋ ํด๋ผ์ด์ธํธ ์์์ key/value ํํ๋ก ์ ์ฅํ ์ ์๋ ๋ฉ์ปค๋์ฆ์ผ๋ก value๋ ๋ฐ๋์ ๋ฌธ์์ด์ด์ด์ผ ํฉ๋๋ค. ๋ํ ๋ชจ๋ ๋์ผ ์ถ์ฒ ์ ์ฑ ์ ๋ฐ๋ฅด๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๋๋ฉ์ธ์์ ์ ๊ทผํ ์ ์์ต๋๋ค.
์ฟ ํค๋ ํด๋ผ์ด์ธํธ ๋๋ ์๋ฒ์ ์ํด์ ์์ฑ๋๋ฉฐ ์ง์์๊ฐ์ ์ค์ ์ ๋ฐ๋ผ ๋ค๋ฆ
๋๋ค. ์ฉ๋์ 5kb์ ๋์ด๋ฉฐ ์๋ฒ์์ ํต์ ์ด ๊ฐ๋ฅํ์ง๋ง ์ทจ์ฝ์ ์ผ๋ก XSS/CSRF ๊ณต๊ฒฉ์ด ์กด์ฌํฉ๋๋ค. ํ์ง๋ง, ์ ์ ๊ฒฝํ์ httponly ์์ฑ์ true๋ก ๋ณ๊ฒฝํ๊ณ , security ์์ฑ์ true๋ก ๋ณ๊ฒฝํด์
local storage๋ ํด๋ผ์ด์ธํธ์์ ์์ฑ๋๋ฉฐ ๋ช
์์ ์ผ๋ก ์ญ์ ํ ๋๊น์ง ์ ์ง๊ฐ ๋ฉ๋๋ค. ์ฉ๋์ 5mb์์ 10mb์ ๋์ด๋ฉฐ ์๋ฒ์์ ํต์ ์ ๋ถ๊ฐ๋ฅํ๊ณ ์ทจ์ฝ์ ์ผ๋ก๋ XSS ๊ณต๊ฒฉ์ด ์กด์ฌํฉ๋๋ค.
session storage๋ ๋ง์ฐฌ๊ฐ์ง๋ก ํด๋ผ์ด์ธํธ์์๋ง ์์ฑํ ์ ์๊ณ ๊ฐ์ ์ทจ์ฝ์ ์ด ์กด์ฌํ์ง๋ง ๋ค๋ฅธ์ ์ผ๋ก๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์ข
๋ฃ๋๋ฉด ์ญ์ ๊ฐ ๋ฉ๋๋ค.
๐ XSS์ CSRFโ
XSS(Cross Site Scription)๋ ๊ถํ์ด ์๋ ์ฌ์ฉ์๊ฐ ์น ์ฌ์ดํธ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ์ ํ๋ ๊ณต๊ฒฉ ๋ฐฉ๋ฒ์ผ๋ก ์ ์์ ์ผ๋ก ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ์ ํ์ฌ ์ด๋ฅผ ์ด๋ํ ์ฌ์ฉ์์ ์ฟ ํค๊ฐ ํด์ปค์๊ฒ ์ ์ก์ํค๋ฉฐ, ์ด ํ์ทจํ ์ฟ ํค๋ฅผ ํตํด ์ธ์ ์ ํ์ด์ ํนํฉ๋๋ค. ๊ทธ๋ก์ธํด์ ์ธ์ ID๋ฅผ ๊ฐ์ง ์ฟ ํค๋ก ์ฌ์ฉ์์ ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ์ด ๊ฐ๋ฅํด์ง๋ ๊ฒ๋๋ค.
CSRF(Cross Site Request Forgery) ์ธํฐ๋ท ์ฌ์ฉ์๊ฐ ์์ ์ ์์ง์๋ ๋ฌด๊ดํ๊ฒ ๊ณต๊ฒฉ์๊ฐ ์๋ํ ํ์๋ฅผ ํน์ ํ ์น์ฌ์ดํธ์ requestํ๋๋ก ๋ง๋๋ ๊ณต๊ฒฉ์ ๋งํ๋๋ฐ ์ ์ ์ ๊ถํ์ ๋์ฉํฉ๋๋ค. ๋ณดํต ์ฌ์ฉ์๊ฐ ํด์ปค๊ฐ ๋ง๋ ํผ์ฑ ์ฌ์ดํธ์ ์ ์ํ๊ฑฐ๋, ์์กฐ ์์ฒญ์ ์ ์กํ๋ ์๋น์ค์ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธํ ์ํฉ๋ฑ์ด ์์ต๋๋ค.
๐ ํ๋ ์์ํฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฐจ์ด์ โ
ํ๋ ์์ํฌ๋ ๊ตฌ์กฐ๋ ๋ผ๋๊ฐ์ ๊ฒ์ ์๋ฏธํ๋๋ฐ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ฐ์ ธ๋ค๊ฐ ์ฌ์ฉํ ์ ์๋ ๋๊ตฌ์ ๊ด๋ จ์ด ์์ต๋๋ค. ์ด ๋์ ์ฐจ์ด์ ์ ์ ์ด์ ์ฃผ์ฒด๊ฐ ์ด๋์/๋๊ตฌ์ ์๋๋๊ฐ ์ค์ํ๋ฐ, ํ๋ ์์ํฌ๋ ์ ์ฒด์ ์ธ ํ๋ฆ์ ์ค์ค๋ก ์ฅ๊ณ ์์ผ๋ฉฐ ์ฌ์ฉ์๋ ๊ทธ ์ ํด์ง ํ์ ๋ง์ถฐ์ (์์ ๋ค์ด๊ฐ์) ์ฝ๋๋ฅผ ์ง ๋ฃ๋ ๊ฒ์ ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ ์ด์ ์ฃผ์ฒด๋ ์ฌ์ฉ์๊ฐ ์ฅ๊ณ ์์ผ๋ฉฐ ๊ทธ ํ๋ฆ์ ์ง์ ๋ง๋๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํฑ, ์ฝ, ๋ง์น ๊ฐ์ ์ฐ์ฅ์ ๋น์ ํ ์ ์๋๋ฐ, ํฑ, ์ฝ, ๋ง์น๊ฐ ์ ๊ฒ๋ค์ ์์ ์ด ์ํ๋ ๋๊ตฌ๋ฅผ ๋ง์๋๋ก ์ ํํด์ ๊ฒฐ๊ณผ๋ฌผ์ ๋ง๋ค ์ ์๋ ๊ฒ์ด๊ณ , ํ๋ ์์ํฌ๋ ๋ฐฐ, ์ฐจ, ๋นํ๊ธฐ๊ฐ์ ํ๊ฒ์ ๋น์ ํ ์ ์๊ฒ ๋๋ฐ, ๋ฐฐ, ์ฐจ ๋นํ๊ธฐ๋ ๊ฐ์์ ๋ชฉ์ ์ ๋ง๊ฒ (๋ฐฐ๋ ๋ฐ๋ค, ๋นํ๊ธฐ๋ ํ๋, ์ฐจ๋ ๋ )์ฌ์ฉํด์ผ ํ๋ฉฐ, ์ฐจ๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ๊ธฐ์ด, ํจ๋ฌ๋ฑ ์ฌ์ฉ๋ฒ์ ์๋ฉด ๋ด๊ฐ ๋ง๋ค ํ์ ์์ด ๋ชฉ์ ์ ๋ง๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๐ Core Web Vitalsโ
- ์ต๋ ์ฝํ
์ธ ํ์ธํธ (LCP): ๋ก๋ ์ฑ๋ฅ์ ์ธก์ ํฉ๋๋ค. ์ฐ์ํ ์ฌ์ฉ์ ํ๊ฒฝ์ ์ ๊ณตํ๋ ค๋ฉด ํ์ด์ง๊ฐ ์ฒ์ ๋ก๋๋๊ธฐ 2.5์ด ์ด๋ด์ LCP๊ฐ ๋ฐ์ํด์ผ ํฉ๋๋ค.
- ์น ํ์ด์ง๊ฐ ์์ ํ ๋ก๋๋๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ธก์ ํ๋ ๊ฒ์ด ์๋๋ผ, ๊ฐ์ฅ ์ค์ํ ๋ถ๋ถ์ด ๋ก๋๋๋ ์์ ์๋ง ์ง์คํจ. ์ฆ, ๋ทฐํฌํธ ๋ด์์ ๊ฐ์ฅ ํฐ ํ์ด์ง ์์(ํฐ ํ ์คํธ ๋ธ๋ก, ์ด๋ฏธ์ง ๋๋ ๋น๋์ค)๋ฅผ ํ์ํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ธก์
- ๋ค์ ํ์ธํธ์ ๋ํ ์ํธ์์ฉ (INP): ์ํธ์์ฉ์ ์ธก์ ํฉ๋๋ค. ์ฐ์ํ ์ฌ์ฉ์ ํ๊ฒฝ์ ์ ๊ณตํ๋ ค๋ฉด ํ์ด์ง์ INP๊ฐ 200๋ฐ๋ฆฌ์ด ์ดํ์ฌ์ผ ํฉ๋๋ค.
- INP์ ๋ชฉ์ ์ ๋ฐ๋ผ ๋ค์๊ณผ ๊ฐ์ ์ํธ์์ฉ ์ ํ๋ง ์ค์๋ฉ๋๋ค.
- ๋ง์ฐ์ค๋ก ํด๋ฆญ
- ํฐ์น์คํฌ๋ฆฐ์ด ์๋ ๊ธฐ๊ธฐ๋ฅผ ํญํฉ๋๋ค.
- ์ค์ ํค๋ณด๋ ๋๋ ํฐ์น ํค๋ณด๋์ ํค๋ฅผ ๋๋ฆ ๋๋ค.
- ์๋ ์ต์ด ์ ๋ ฅ ์ง์ฐ(FID)์์์ต๋๋ค. INP๋ ์ฒซ ์ ๋ ฅ ์ง์ฐ (FID)์ ํ์ ์ธก์ ํญ๋ชฉ์ ๋๋ค. ๋ ๊ฐ์ง ๋ชจ๋ ๋ฐ์์ฑ ์ธก์ ํญ๋ชฉ์ด์ง๋ง FID๋ ํ์ด์ง์์์ ์ฒซ ์ํธ์์ฉ์ ์ ๋ ฅ ์ง์ฐ๋ง ์ธก์ ํ์ต๋๋ค. INP๋ ์ ๋ ฅ ์ง์ฐ๋ถํฐ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์คํํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ, ๋ธ๋ผ์ฐ์ ์์ ๋ค์ ํ๋ ์์ ๊ทธ๋ฆด ๋๊น์ง์ ๋ชจ๋ ์ํธ์์ฉ์ ๊ด์ฐฐํ์ฌ FID๋ฅผ ๊ฐ์ ํฉ๋๋ค.
- ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก๋ ์๋ฐ์คํฌ๋ฆฝํธ ์คํ ์๊ฐ ๋จ์ถ, ๊ธด ์์ ์ ๋ ์์ ๋น๋๊ธฐ ์์ ์ผ๋ก ๋ถํ ํ๊ฑฐ๋, ๋ถํ์ํ ์๋ฐ์คํฌ๋ฆฝํธ ์ ๊ฑฐํ๋ ๊ฒ์ ๋๋ค.
- INP์ ๋ชฉ์ ์ ๋ฐ๋ผ ๋ค์๊ณผ ๊ฐ์ ์ํธ์์ฉ ์ ํ๋ง ์ค์๋ฉ๋๋ค.
- ๋ ์ด์์ ๋ณ๊ฒฝ ํ์ (CLS): ์๊ฐ์ ์์ ์ฑ์ ์ธก์ ํฉ๋๋ค. ์ฐ์ํ ์ฌ์ฉ์ ํ๊ฒฝ์ ์ ๊ณตํ๋ ค๋ฉด ํ์ด์ง์ CLS๋ฅผ 0.1. ์ดํ๋ก ์ ์งํด์ผ ํฉ๋๋ค.
- ์์๋ ๋ ์ด์์ ๋ณ๊ฒฝ๊ณผ ์๊ธฐ์น ์์ ๋ ์ด์์ ๋ณ๊ฒฝ
- ๋ชจ๋ ๋ ์ด์์ ๋ณ๊ฒฝ์ด ๋์ ๊ฒ์ ์๋๋๋ค. ์ค์ ๋ก ๋ง์ ๋์ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ํ์ด์ง์์ ์์์ ์์ ์์น๋ฅผ ์์ฃผ ๋ณ๊ฒฝํฉ๋๋ค. ๋ ์ด์์ ๋ณ๊ฒฝ์ ์ฌ์ฉ์๊ฐ ์์ํ์ง ๋ชปํ ๊ฒฝ์ฐ์๋ง ์ข์ง ์์ต๋๋ค.
- ์ฌ์ฉ์๊ฐ ์์ํ ๋ ์ด์์ ๋ณ๊ฒฝ
- ์ฌ์ฉ์ ์ํธ์์ฉ (์: ๋งํฌ ํด๋ฆญ ๋๋ ํญ, ๋ฒํผ ๋๋ฅด๊ธฐ, ๊ฒ์์ฐฝ์ ์ ๋ ฅ)์ ๋ํ ๋ฐ์์ผ๋ก ๋ฐ์ํ๋ ๋ ์ด์์ ์ ํ์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ์์ ๊ด๊ณ๊ฐ ๋ช ํํ๊ฒ ๋๋ฌ๋๋ ์ํธ์์ฉ์ ์ถฉ๋ถํ ๊ฐ๊น๊ฒ ๋ฐ์ํ๋ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค.
- ์ ๋๋ฉ์ด์
๋ฐ ์ ํ
- ํ์ด์ง์์ ๊ฐ์์ค๋ฝ๊ณ ์๊ธฐ์น ์๊ฒ ์ด๋ํ๋ ์ฝํ ์ธ ๋ ๊ฑฐ์ ํญ์ ์ฌ์ฉ์ ํ๊ฒฝ์ ์ ํ์ํต๋๋ค. ๊ทธ๋ฌ๋ ํ ์์น์์ ๋ค์ ์์น๋ก ์ ์ง์ ์ด๊ณ ์์ฐ์ค๋ฝ๊ฒ ์ด๋ํ๋ ์ฝํ ์ธ ๋ ์ฌ์ฉ์๊ฐ ์ํฉ์ ๋ ์ ์ดํดํ๊ณ ์ํ ๋ณ๊ฒฝ ์ฌ์ด ๋ฅผ ์ด๋ํ๋ ๋ฐ ๋์์ด ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
- CSS transform ์์ฑ์ ์ฌ์ฉํ๋ฉด ๋ ์ด์์ ๋ณ๊ฒฝ์ ํธ๋ฆฌ๊ฑฐํ์ง ์๊ณ ๋ ์์์ ์ ๋๋ฉ์ด์
์ ์ ์ฉํ ์ ์์ต๋๋ค.
height
๋ฐwidth
์์ฑ์ ๋ณ๊ฒฝํ๋ ๋์transform: scale()
๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ์นํฐํธ ๋ก๋ฉ ์ต์ ํ
- ์ฌ์ฉ์๊ฐ ์์ํ ๋ ์ด์์ ๋ณ๊ฒฝ
- ๋ชจ๋ ๋ ์ด์์ ๋ณ๊ฒฝ์ด ๋์ ๊ฒ์ ์๋๋๋ค. ์ค์ ๋ก ๋ง์ ๋์ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ํ์ด์ง์์ ์์์ ์์ ์์น๋ฅผ ์์ฃผ ๋ณ๊ฒฝํฉ๋๋ค. ๋ ์ด์์ ๋ณ๊ฒฝ์ ์ฌ์ฉ์๊ฐ ์์ํ์ง ๋ชปํ ๊ฒฝ์ฐ์๋ง ์ข์ง ์์ต๋๋ค.
- ์์๋ ๋ ์ด์์ ๋ณ๊ฒฝ๊ณผ ์๊ธฐ์น ์์ ๋ ์ด์์ ๋ณ๊ฒฝ
๐ lighthouseโ
์นํ์ด์ง ํ์ง์ ๊ฐ์ ํ๊ธฐ ์ํ ์คํ์์ค ์๋ํ ๋๊ตฌ. ๋ชจ๋ ๊ณต๊ฐ ์นํ์ด์ง ๋๋ ์ธ์ฆ์ด ํ์ํ ์นํ์ด์ง์ ๋ํด ์คํํ ์ ์์. ์ฑ๋ฅ, ์ ๊ทผ์ฑ, ํ๋ก๊ทธ๋ ์๋ธ ์น ์ฑ, ๊ฒ์์์ง ์ต์ ํ ๋ฑ์ ๋ํ ๊ฐ์ฌ๊ฐ ์ ๊ณต.
- ์ฝํ
์ธ ๊ฐ ํฌํจ๋ ์ฒซ ํ์ธํธ(First Contentful Paint)
- FCP๋ ์ฌ์ฉ์๊ฐ ํ์ด์ง๋ก ์ด๋ํ ํ ๋ธ๋ผ์ฐ์ ์์ ์ฒซ ๋ฒ์งธ DOM ์ฝํ ์ธ ๋ฅผ ๋ ๋๋งํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ธก์
- FCP์์ ํนํ ์ค์ํ ํ ๊ฐ์ง ๋ฌธ์ ๋ ๊ธ๊ผด ๋ก๋ ์๊ฐ์ด๋ค. ๊ธ๊ผด ๋ก๋ ์๋๋ฅผ ๋์ด๋ ๋ฐฉ๋ฒ์ ์น ๊ธ๊ผด ๋ก๋ ์ค์ ํ
์คํธ๊ฐ ๊ณ์ ํ์๋๋๋ก ํ๋ฉด๋๋ค.
font-display
๋ฅผ ์ฌ์ฉํด์ font face๊ฐ ๋ก๋๋์ง ์์ ๊ฒฝ์ฐ font face๋ฅผ ์ฌ์ฉํ๋ ค๋ ์์๋ ๋ณด์ด์ง ์๋ ๋์ฒด ํฐํธ๋ฅผ ๋ ๋๋ง ํ๋๋ก ํ๋ค. ์ด ๊ธฐ๊ฐ ๋์ font face๊ฐ ์ฑ๊ณต์ ์ผ๋ก ๋ก๋๋๋ฉด ์์ฒญ ๋ ํฐํธ๋ก ๋ค์ ๋ ๋๋ง ๋๋ค.
- ๊ธฐํ FCP ๊ฐ์ ๋ฐฉ๋ฒ
- ๋ ๋๋ง ์ฐจ๋จ ๋ฆฌ์์ค ์ ๊ฑฐ
- CSS ์ถ์
- ์ฌ์ฉํ์ง ์๋ CSS ์ญ์
- ์ฌ์ฉํ์ง ์๋ JavaScript ์ญ์ ํ๊ธฐ
- ํ์ ์ถ์ฒ์ ์ฌ์ ์ฐ๊ฒฐ
- ์๋ฒ ์๋ต ์๊ฐ (TTFB) ๋จ์ถ
- ์ฌ๋ฌ ๋ฒ์ ํ์ด์ง ๋ฆฌ๋๋ ์ ํผํ๊ธฐ
- ์ฃผ์ ์์ฒญ ๋ฏธ๋ฆฌ ๋ก๋
- ๋ฐฉ๋ํ ๋คํธ์ํฌ ํ์ด๋ก๋ ๋ฐฉ์ง
- ํจ์จ์ ์ธ ์บ์ ์ ์ฑ ์ผ๋ก ์ ์ ์ ์ ์ ๊ณต
- ๊ณผ๋ํ DOM ํฌ๊ธฐ ํผํ๊ธฐ
- ์ค์ํ ์์ฒญ ๊น์ด ์ต์ํ
- ์์ฒญ ์๋ ์๊ฒ ์ ์งํ๊ณ ์ ์ก ํฌ๊ธฐ๋ ์๊ฒ
- ์๋ ์น์ธ(speed index)
- ์๋ ์์ธ์ ํ์ด์ง ๋ก๋ ์ค ์ฝํ ์ธ ๊ฐ ์๊ฐ์ ์ผ๋ก ํ์๋๋ ์๋๋ฅผ ์ธก์
- Lighthouse๋ ๋จผ์ ๋ธ๋ผ์ฐ์ ์์ ํ์ด์ง ๋ก๋ ๋์์์ ์บก์ฒํ๊ณ ํ๋ ์ ๊ฐ์ ์๊ฐ์ ์งํ ์ํฉ์ ๊ณ์ฐ
- ๊ฐ์ ๋ฐฉ๋ฒ
- ์ด ์ฐจ๋จ ์๊ฐ(Total Blocking Time)
- TBT๋ ํ์ด์ง๊ฐ ๋ง์ฐ์ค ํด๋ฆญ, ํ๋ฉด ํญ ๋๋ ํค๋ณด๋ ๋๋ฆ๊ณผ ๊ฐ์ ์ฌ์ฉ์ ์ ๋ ฅ์ ์๋ตํ์ง ๋ชปํ๋๋ก ์ฐจ๋จ๋ ์ด ์๊ฐ์ ์ธก์
- ํฉ๊ณ๋ ์ฝํ ์ธ ๊ฐ ํฌํจ๋ ์ฒซ ํ์ธํธ(FCP)์ ์ํธ์์ฉ(TTI) ์๊ฐ ์ฌ์ด์ ๋ชจ๋ ์ฅ๊ธฐ ์์ ์ ์ฐจ๋จ ๋ถ๋ถ์ ๋ํ์ฌ ๊ณ์ฐ
- TBT ์ ์๋ฅผ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ
- ๋ถํ์ํ ์๋ฐ์คํฌ๋ฆฝํธ ๋ก๋, ํ์ฑ ๋๋ ์คํ. ์ฑ๋ฅ ํจ๋์์ ์ฝ๋๋ฅผ ๋ถ์ํ๋ ๋์ ๊ธฐ๋ณธ ์ค๋ ๋๊ฐ ํ์ด์ง๋ฅผ ๋ก๋ํ๋ ๋ฐ ์ค์ ๋ก ํ์ํ์ง ์์ ์์ ์ ์คํํ ๋ ๋ฐ์. ์ฝ๋ ๋ถํ ์ ํตํด JavaScript ํ์ด๋ก๋๋ฅผ ์ค์ด๊ฑฐ๋ ์ฌ์ฉํ์ง ์๋ ์ฝ๋๋ฅผ ์ญ์ ํ๊ฑฐ๋ ์๋ ํํฐ JavaScript๋ฅผ ํจ์จ์ ์ผ๋ก ๋ก๋ํ๋ฉด TBT ์ ์๊ฐ ๊ฐ์ ๋๋ค.
- ๋นํจ์จ์ ์ธ JavaScript๋ฌธ์ ์ ๊ฑฐ
- ์ฝํ
์ธ ๊ฐ ํฌํจ๋ ์ต๋ ํ์ธํธ(Largest Contentful Paint)
- LCP๋ ํ์ ์์ญ์์ ๊ฐ์ฅ ํฐ ์ฝํ ์ธ ์์๊ฐ ํ๋ฉด์ ๋ ๋๋ง๋ ๋ ์ธก์
- LCP ์๊ฐ์ ๋๋ถ๋ถ์ HTML ๋ฌธ์ ๋ฐ LCP ์์ค๋ฅผ ๋ก๋ํ๋ ๋ฐ ์ฌ์ฉ๋์ด์ผ ํจ.
- LCP ์ ์๋ฅผ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ
- LCP ์๊ฐ์ ๋๋ถ๋ถ์ HTML ๋ฌธ์ ๋ฐ LCP ์์ค๋ฅผ ๋ก๋ํ๋ ๋ฐ ์ฌ์ฉ๋์ด์ผํจ. LCP๋ ์ด 4๋จ๊ณ๋ก ๋๋ ์ง.
- ์ฒซ ๋ฐ์ดํธ๊น์ง์ ์๊ฐ (TTFB)
- ๋ฆฌ์์ค ๋ก๋ ์ง์ฐ
- ๋ฆฌ์์ค ๋ก๋ ์๊ฐ
- ์์ ๋ ๋๋ง ์ง์ฐ
- LCP ์๊ฐ์ ๋๋ถ๋ถ์ HTML ๋ฌธ์ ๋ฐ LCP ์์ค๋ฅผ ๋ก๋ํ๋ ๋ฐ ์ฌ์ฉ๋์ด์ผํจ. LCP๋ ์ด 4๋จ๊ณ๋ก ๋๋ ์ง.