์๋ํ๋ ํ ์คํธ์ ์ง์์ ์ธ ๋ชจ๋ํฐ๋ง์ผ๋ก ์๋ฐ์คํฌ๋ฆฝํธ ์ฑ๋ฅ ์ ํ๋ฅผ ๋ฐฉ์งํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ฐ์ธ์. ์ ์ธ๊ณ์ ์ผ๋ก ์น์ฌ์ดํธ ์๋์ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ์ธ์.
์๋ฐ์คํฌ๋ฆฝํธ ์ฑ๋ฅ ์ ํ: ์๋ํ๋ ํ ์คํธ ๋ฐ ๋ชจ๋ํฐ๋ง
์ค๋๋ ๋น ๋ฅด๊ฒ ๋ณํํ๋ ๋์งํธ ํ๊ฒฝ์์ ์น์ฌ์ดํธ ์ฑ๋ฅ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ๋ก๋ฉ์ด ๋๋ฆฌ๊ฑฐ๋ ์๋ต์ด ์๋ ์น์ฌ์ดํธ๋ ์ฌ์ฉ์์๊ฒ ๋ถ๋ง์ ์๊ฒจ์ฃผ๊ณ , ์ฅ๋ฐ๊ตฌ๋๋ฅผ ํฌ๊ธฐํ๊ฒ ํ๋ฉฐ, ๊ถ๊ทน์ ์ผ๋ก๋ ์์ต ์์ค๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ ๊ตฌ์ฑ ์์์ธ ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ข ์ข ์ ๋ฐ์ ์ธ ์ฑ๋ฅ์ ๊ฒฐ์ ํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฝ๋๋ฒ ์ด์ค๊ฐ ๋ฐ์ ํ๊ณ ์๋ก์ด ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋จ์ ๋ฐ๋ผ ์ฑ๋ฅ ์ ํ(performance regressions)๋ฅผ ์ ๋ฐํ ์ํ์ด ์ปค์ง๋๋ค. ์ฑ๋ฅ ์ ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋, ํจ์จ์ฑ ๋๋ ๋ฆฌ์์ค ์๋น์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น๋ ๋ณ๊ฒฝ์ ์๋ฏธํฉ๋๋ค.
์ด ๊ธ์์๋ ์๋ํ๋ ํ ์คํธ์ ์ง์์ ์ธ ๋ชจ๋ํฐ๋ง์ ํตํด ์๋ฐ์คํฌ๋ฆฝํธ ์ฑ๋ฅ ์ ํ๋ฅผ ์ฌ์ ์ ๋ฐฉ์งํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ด ๋๋ค. ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ์ ์งํ์ฌ ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ์ฐ์ํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๊ธฐ ์ํ ๋ค์ํ ๋๊ตฌ์ ๊ธฐ์ ์ ๋ค๋ฃฐ ๊ฒ์ ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์ฑ๋ฅ ์ ํ ์ดํดํ๊ธฐ
์๋ฐ์คํฌ๋ฆฝํธ ์ฑ๋ฅ ์ ํ๋ ๋ค์๊ณผ ๊ฐ์ ์ฌ๋ฌ ๋ฐฉ์์ผ๋ก ๋ํ๋ ์ ์์ต๋๋ค:
- ํ์ด์ง ๋ก๋ ์๊ฐ ์ฆ๊ฐ: ํ์ด์ง๊ฐ ์์ ํ ๋ก๋๋์ด ์ํธ์์ฉ ๊ฐ๋ฅํด์ง๊ธฐ๊น์ง ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋๋ค. ์ฌ์ฉ์๋ ์ง๋ฆฌ์ ์์น๋ ์ธํฐ๋ท ์ฐ๊ฒฐ ์๋์ ๊ด๊ณ์์ด ์น์ฌ์ดํธ๊ฐ ๋น ๋ฅด๊ฒ ๋ก๋๋๊ธฐ๋ฅผ ๊ธฐ๋ํ๊ธฐ ๋๋ฌธ์ ์ด๋ ๋งค์ฐ ์ค์ํ ์งํ์ ๋๋ค.
- ๋๋ฆฐ ๋ ๋๋ง: ํ๋ฉด์ ์ฝํ ์ธ ๋ฅผ ํ์ํ๋ ๋ฐ ์ง์ฐ์ด ๋ฐ์ํ์ฌ ๋๋ฆฌ๋ค๋ ์ธ์์ ์ค๋๋ค. ์ด๋ ๋์ ์ฝํ ์ธ ๊ฐ ์๋ ๋ณต์กํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ํนํ ๋๋๋ฌ์ง ์ ์์ต๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ๋์: ์ฌ์ฉํ์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ ์ฐจ ๋์ ๋์ด ๊ฒฐ๊ตญ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋๋ ค์ง๊ฑฐ๋ ์ถฉ๋ํ๋ ํ์์ ๋๋ค. ์ด๋ ํนํ ์ค๋ ์คํ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ ๋จ์ผ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ (SPA)์์ ๋ฌธ์ ๊ฐ ๋ฉ๋๋ค.
- CPU ์ฌ์ฉ๋ ์ฆ๊ฐ: ๊ณผ๋ํ CPU ์๋น๋ก ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์ ๋ฐฐํฐ๋ฆฌ ์๋ช ์ ๋จ์ถ์ํค๊ณ ์๋ฒ ๋น์ฉ์ ์ํฅ์ ์ค๋๋ค. ๋นํจ์จ์ ์ธ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๊ฐ ์ด์ ๋ํ ์ฃผ์ ์์ธ์ด ๋ ์ ์์ต๋๋ค.
- ๋๊ธฐ๋ ์ ๋๋ฉ์ด์ : ๋๋ ๋๊ธฐ๊ฑฐ๋ ๋ถ๋๋ฝ์ง ์์ ์ ๋๋ฉ์ด์ ์ผ๋ก ์ข์ง ์์ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ง๋ญ๋๋ค. ์ด๋ ์ข ์ข ๋นํจ์จ์ ์ธ ๋ ๋๋ง์ด๋ ๊ณผ๋ํ DOM ์กฐ์์ผ๋ก ์ธํด ๋ฐ์ํฉ๋๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ค์ ๋ค์๊ณผ ๊ฐ์ ๋ค์ํ ์์ธ์ผ๋ก ๋ฐ์ํ ์ ์์ต๋๋ค:
- ์๋ก์ด ์ฝ๋: ๋นํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ด๋ ์ต์ ํ๋์ง ์์ ์ฝ๋๋ฅผ ๋์ ํ๋ ๊ฒฝ์ฐ.
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๋ฐ์ดํธ: ์ฑ๋ฅ ๋ฒ๊ทธ๊ฐ ์๊ฑฐ๋ ํธํ์ฑ์ด ๊นจ์ง๋ ๋ณ๊ฒฝ ์ฌํญ์ ํฌํจํ๋ ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ทธ๋ ์ด๋ํ๋ ๊ฒฝ์ฐ.
- ์ค์ ๋ณ๊ฒฝ: ์๋์น ์๊ฒ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น๋ ์๋ฒ ๊ตฌ์ฑ์ด๋ ๋น๋ ํ๋ก์ธ์ค๋ฅผ ์์ ํ๋ ๊ฒฝ์ฐ.
- ๋ฐ์ดํฐ ๋ณ๊ฒฝ: ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฆฌ์์ค์ ๋ถ๋ด์ ์ฃผ๋ ๋ ํฌ๊ฑฐ๋ ๋ณต์กํ ๋ฐ์ดํฐ ์ธํธ๋ก ์์ ํ๋ ๊ฒฝ์ฐ. ์๋ฅผ ๋ค์ด, ์ต์ ํ๋์ง ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ๊ฐ ํ๋ก ํธ์๋์ ํ์ํ ๊ฑฐ๋ํ ๋ฐ์ดํฐ ์ธํธ๋ก ์๋ตํ๋ ๊ฒฝ์ฐ์ ๋๋ค.
์๋ํ๋ ํ ์คํธ์ ์ค์์ฑ
์๋ํ๋ ํ ์คํธ๋ ๊ฐ๋ฐ ์๋ช ์ฃผ๊ธฐ ์ด๊ธฐ์ ์ฑ๋ฅ ์ ํ๋ฅผ ๊ฐ์งํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ์ฑ๋ฅ ํ ์คํธ๋ฅผ ์ง์์ ์ธ ํตํฉ(CI) ํ์ดํ๋ผ์ธ์ ํตํฉํจ์ผ๋ก์จ, ํ๋ก๋์ ์ ๋๋ฌํ๊ธฐ ์ ์ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ์๋์ผ๋ก ์๋ณํ๊ณ ํด๊ฒฐํ ์ ์์ต๋๋ค.
์๋ํ๋ ์ฑ๋ฅ ํ ์คํธ์ ์ฃผ์ ์ด์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์กฐ๊ธฐ ๋ฐ๊ฒฌ: ์ฌ์ฉ์์๊ฒ ์ํฅ์ ๋ฏธ์น๊ธฐ ์ ์ ์ฑ๋ฅ ์ ํ๋ฅผ ์๋ณํฉ๋๋ค.
- ํจ์จ์ฑ ์ฆ๊ฐ: ํ ์คํธ ํ๋ก์ธ์ค๋ฅผ ์๋ํํ์ฌ ์๊ฐ๊ณผ ๋ฆฌ์์ค๋ฅผ ์ ์ฝํฉ๋๋ค.
- ์ฝ๋ ํ์ง ํฅ์: ๊ฐ๋ฐ์๋ค์ด ๋ ์ฑ๋ฅ ์ข์ ์ฝ๋๋ฅผ ์์ฑํ๋๋ก ์ฅ๋ คํฉ๋๋ค.
- ์ํ ๊ฐ์: ์ฑ๋ฅ์ด ์ ํ๋ ์ฝ๋๋ฅผ ํ๋ก๋์ ์ ๋ฐฐํฌํ ์ํ์ ์ต์ํํฉ๋๋ค.
- ์ผ๊ด๋ ๊ฒฐ๊ณผ: ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ํ์คํ๋๊ณ ์ฌํ ๊ฐ๋ฅํ ์ฑ๋ฅ ์ธก์ ์น๋ฅผ ์ ๊ณตํฉ๋๋ค.
์๋ํ๋ ์ฑ๋ฅ ํ ์คํธ์ ์ข ๋ฅ
์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋์ ์ฑ๋ฅ ์ ํ๋ฅผ ๊ฐ์งํ๋ ๋ฐ ๋์์ด ๋๋ ์ฌ๋ฌ ์ ํ์ ์๋ํ๋ ํ ์คํธ๊ฐ ์์ต๋๋ค:
1. ๋จ์ ํ ์คํธ
๋จ์ ํ ์คํธ๋ ๊ฐ๋ณ ํจ์๋ ์ปดํฌ๋ํธ๋ฅผ ๊ฒฉ๋ฆฌํ์ฌ ํ ์คํธํ๋ ๋ฐ ์ค์ ์ ๋ก๋๋ค. ์ฃผ๋ก ๊ธฐ๋ฅ ํ ์คํธ์ ์ฌ์ฉ๋์ง๋ง, ์ค์ํ ์ฝ๋ ๊ฒฝ๋ก์ ์คํ ์๊ฐ์ ์ธก์ ํ๋ ๋ฐ์๋ ์ ์ฉํ ์ ์์ต๋๋ค.
์์ (Jest ์ฌ์ฉ):
describe('Expensive function', () => {
it('should execute within the performance budget', () => {
const start = performance.now();
expensiveFunction(); // Replace with your actual function
const end = performance.now();
const executionTime = end - start;
expect(executionTime).toBeLessThan(100); // Assert that the execution time is less than 100ms
});
});
์ค๋ช
: ์ด ์์ ๋ performance.now()
API๋ฅผ ์ฌ์ฉํ์ฌ ํจ์์ ์คํ ์๊ฐ์ ์ธก์ ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์คํ ์๊ฐ์ด ๋ฏธ๋ฆฌ ์ ์๋ ์์ฐ(์: 100ms) ๋ด์ ์๋์ง ํ์ธํฉ๋๋ค. ํจ์ ์คํ ์๊ฐ์ด ์์๋ณด๋ค ๊ธธ์ด์ง๋ฉด ํ
์คํธ๊ฐ ์คํจํ์ฌ ์ ์ฌ์ ์ธ ์ฑ๋ฅ ์ ํ๋ฅผ ๋ํ๋
๋๋ค.
2. ํตํฉ ํ ์คํธ
ํตํฉ ํ ์คํธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ๋ฌ ๋ถ๋ถ ๊ฐ์ ์ํธ ์์ฉ์ ๊ฒ์ฆํฉ๋๋ค. ์ด ํ ์คํธ๋ ์ฌ๋ฌ ์ปดํฌ๋ํธ๊ฐ ํจ๊ป ์๋ํ ๋ ๋ฐ์ํ๋ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
์์ (Cypress ์ฌ์ฉ):
describe('User registration flow', () => {
it('should complete registration within the performance budget', () => {
cy.visit('/register');
cy.get('#name').type('John Doe');
cy.get('#email').type('john.doe@example.com');
cy.get('#password').type('password123');
cy.get('#submit').click();
cy.window().then((win) => {
const start = win.performance.timing.navigationStart;
cy.url().should('include', '/dashboard').then(() => {
const end = win.performance.timing.loadEventEnd;
const loadTime = end - start;
expect(loadTime).toBeLessThan(2000); // Assert that the page load time is less than 2 seconds
});
});
});
});
์ค๋ช : ์ด ์์ ๋ Cypress๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ๋ฑ๋ก ํ๋ฆ์ ์๋ฎฌ๋ ์ด์ ํฉ๋๋ค. ๋ฑ๋ก ํ๋ก์ธ์ค๊ฐ ์๋ฃ๋๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ธก์ ํ๊ณ ํ์ด์ง ๋ก๋ ์๊ฐ์ด ๋ฏธ๋ฆฌ ์ ์๋ ์์ฐ(์: 2์ด) ๋ด์ ์๋์ง ํ์ธํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ ์ฒด ๋ฑ๋ก ํ๋ก์ธ์ค์ ์ฑ๋ฅ์ด ์ ์ง๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
3. ์๋ ํฌ ์๋ ํ ์คํธ
์๋ ํฌ ์๋(E2E) ํ ์คํธ๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ์ ์ค์ ์ฌ์ฉ์ ์ํธ ์์ฉ์ ์๋ฎฌ๋ ์ด์ ํ์ฌ ์์๋ถํฐ ๋๊น์ง ์ ์ฒด ์ฌ์ฉ์ ํ๋ฆ์ ๋ค๋ฃน๋๋ค. ์ด ํ ์คํธ๋ ์ ๋ฐ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ์ํฅ์ ๋ฏธ์น๋ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ์๋ณํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค. Selenium, Cypress ๋๋ Playwright์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ์๋ํ๋ ํ ์คํธ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
4. ์ฑ๋ฅ ํ๋กํ์ผ๋ง ํ ์คํธ
์ฑ๋ฅ ํ๋กํ์ผ๋ง ํ ์คํธ๋ ํ๋กํ์ผ๋ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ํ ์กฐ๊ฑด์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ ํน์ฑ์ ๋ถ์ํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ์ด๋ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ ๋ ๋์ ์ฑ๋ฅ์ ์ํด ์ฝ๋๋ฅผ ์ต์ ํํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. Chrome DevTools, Lighthouse, WebPageTest์ ๊ฐ์ ๋๊ตฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ๋ํ ๊ท์คํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํฉ๋๋ค.
์์ (Lighthouse CLI ์ฌ์ฉ):
lighthouse https://www.example.com --output json --output-path report.json
์ค๋ช : ์ด ๋ช ๋ น์ด๋ ์ง์ ๋ URL์์ Lighthouse๋ฅผ ์คํํ๊ณ ์ฑ๋ฅ ์งํ๊ฐ ํฌํจ๋ JSON ๋ณด๊ณ ์๋ฅผ ์์ฑํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ด ๋ณด๊ณ ์๋ฅผ CI ํ์ดํ๋ผ์ธ์ ํตํฉํ์ฌ ์ฑ๋ฅ ์ ํ๋ฅผ ์๋์ผ๋ก ๊ฐ์งํ ์ ์์ต๋๋ค. ์ฑ๋ฅ ์ ์ ์๊ณ๊ฐ์ ๊ธฐ์ค์ผ๋ก ๋น๋๋ฅผ ์คํจํ๋๋ก Lighthouse๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
์๋ํ๋ ์ฑ๋ฅ ํ ์คํธ ์ค์ ํ๊ธฐ
ํ๋ก์ ํธ์ ์๋ํ๋ ์ฑ๋ฅ ํ ์คํธ๋ฅผ ์ค์ ํ๋ ๋จ๊ณ๋ณ ๊ฐ์ด๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์ฌ๋ฐ๋ฅธ ๋๊ตฌ ์ ํ: ํ๋ก์ ํธ์ ์๊ตฌ ์ฌํญ ๋ฐ ๊ธฐ์ ์คํ์ ๋ง๋ ํ ์คํธ ํ๋ ์์ํฌ์ ์ฑ๋ฅ ํ๋กํ์ผ๋ง ๋๊ตฌ๋ฅผ ์ ํํฉ๋๋ค. ์๋ก๋ Jest, Mocha, Cypress, Selenium, Playwright, Lighthouse, WebPageTest๊ฐ ์์ต๋๋ค.
- ์ฑ๋ฅ ์์ฐ ์ ์: ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ๋ฌ ๋ถ๋ถ์ ๋ํด ๋ช ํํ ์ฑ๋ฅ ๋ชฉํ๋ฅผ ์ค์ ํฉ๋๋ค. ์ด๋ฌํ ์์ฐ์ ์ฌ์ฉ์ ๊ธฐ๋์น์ ๋น์ฆ๋์ค ์๊ตฌ ์ฌํญ์ ๊ธฐ๋ฐ์ผ๋ก ํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, First Contentful Paint(FCP)๋ 1์ด ๋ฏธ๋ง, Time to Interactive(TTI)๋ 3์ด ๋ฏธ๋ง์ ๋ชฉํ๋ก ํฉ๋๋ค. ์ด๋ฌํ ์งํ๋ ๋์ ์์ฅ์ ๋ฐ๋ผ ์กฐ์ ๋์ด์ผ ํ๋ฉฐ, ์ธํฐ๋ท ์ฐ๊ฒฐ์ด ๋๋ฆฐ ์ง์ญ์ ์ฌ์ฉ์๋ ๋ ๊ด๋ํ ์์ฐ์ด ํ์ํ ์ ์์ต๋๋ค.
- ์ฑ๋ฅ ํ ์คํธ ์์ฑ: ์ฝ๋์ ์คํ ์๊ฐ, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๋ฐ ๊ธฐํ ์ฑ๋ฅ ์งํ๋ฅผ ์ธก์ ํ๋ ํ ์คํธ๋ฅผ ๋ง๋ญ๋๋ค.
- CI/CD์ ํตํฉ: ์ฑ๋ฅ ํ ์คํธ๋ฅผ ์ง์์ ์ธ ํตํฉ ๋ฐ ์ง์์ ์ธ ์ ๋ฌ(CI/CD) ํ์ดํ๋ผ์ธ์ ํตํฉํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฝ๋ ๋ณ๊ฒฝ์ด ์์ ๋๋ง๋ค ์ฑ๋ฅ ํ ์คํธ๊ฐ ์๋์ผ๋ก ์คํ๋๋๋ก ๋ณด์ฅํฉ๋๋ค. Jenkins, CircleCI, GitHub Actions, GitLab CI/CD์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์ฑ๋ฅ ์งํ ๋ชจ๋ํฐ๋ง: ์๊ฐ ๊ฒฝ๊ณผ์ ๋ฐ๋ฅธ ์ฑ๋ฅ ์งํ๋ฅผ ์ถ์ ํ์ฌ ์ถ์ธ์ ์ ์ฌ์ ์ธ ์ ํ๋ฅผ ์๋ณํฉ๋๋ค.
- ์๋ฆผ ์ค์ : ์ฑ๋ฅ ์งํ๊ฐ ์ ์๋ ์์ฐ์์ ํฌ๊ฒ ๋ฒ์ด๋ ๋ ์๋ฆผ์ ๋ฐ๋๋ก ๊ตฌ์ฑํฉ๋๋ค.
์ง์์ ์ธ ๋ชจ๋ํฐ๋ง: ํ ์คํธ๋ฅผ ๋์ด์
์๋ํ๋ ํ ์คํธ๊ฐ ์ฑ๋ฅ ์ ํ๋ฅผ ๋ฐฉ์งํ๋ ๋ฐ ์ค์ํ์ง๋ง, ํ๋ก๋์ ํ๊ฒฝ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ๋ ๊ฒ ๋ํ ๋๊ฐ์ด ์ค์ํฉ๋๋ค. ์ค์ ์ฌ์ฉ์ ํ๋๊ณผ ๋ค์ํ ๋คํธ์ํฌ ์กฐ๊ฑด์ ์๋ํ๋ ํ ์คํธ๋ก๋ ํฌ์ฐฉํ์ง ๋ชปํ ์ ์๋ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ๋๋ฌ๋ผ ์ ์์ต๋๋ค.
์ง์์ ์ธ ๋ชจ๋ํฐ๋ง์ ์ค์ ์ฌ์ฉ์๋ก๋ถํฐ ์ฑ๋ฅ ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ณ ๋ถ์ํ์ฌ ํ๋ก๋์ ํ๊ฒฝ์ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ ํด๊ฒฐํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ์ด๋ฌํ ์ฌ์ ์๋ฐฉ์ ์ ๊ทผ ๋ฐฉ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ์ ์งํ๊ณ ์ผ๊ด๋ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
์ง์์ ์ธ ๋ชจ๋ํฐ๋ง์ ์ํ ๋๊ตฌ
ํ๋ก๋์ ํ๊ฒฝ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ๋ชจ๋ํฐ๋งํ๋ ๋ฐ ๋์์ด ๋๋ ์ฌ๋ฌ ๋๊ตฌ๊ฐ ์์ต๋๋ค:
- ์ค์ ์ฌ์ฉ์ ๋ชจ๋ํฐ๋ง (RUM): RUM ๋๊ตฌ๋ ์ค์ ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ์์ ์ฑ๋ฅ ๋ฐ์ดํฐ๋ฅผ ์์งํ์ฌ ํ์ด์ง ๋ก๋ ์๊ฐ, ์ค๋ฅ์จ ๋ฐ ๊ธฐํ ์ฃผ์ ์งํ์ ๋ํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํฉ๋๋ค. ์๋ก๋ New Relic, Datadog, Dynatrace, Sentry๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ๋๊ตฌ๋ ์ข ์ข ์ง์ญ๋ณ ๋ถ์์ ์ ๊ณตํ์ฌ ํน์ ์ง์ญ์ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ์๋ณํ๋ ๋ฐ ๋์์ ์ค๋๋ค.
- ํฉ์ฑ ๋ชจ๋ํฐ๋ง: ํฉ์ฑ ๋ชจ๋ํฐ๋ง ๋๊ตฌ๋ ๋ค์ํ ์์น์์ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ์ ์ฌ์ฉ์ ์ํธ ์์ฉ์ ์๋ฎฌ๋ ์ด์ ํ์ฌ ์ฑ๋ฅ์ ์ธก์ ํ๊ธฐ ์ํ ํต์ ๋ ํ๊ฒฝ์ ์ ๊ณตํฉ๋๋ค. ์๋ก๋ WebPageTest, Pingdom, GTmetrix๊ฐ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ค์ ์ฌ์ฉ์์๊ฒ ์ํฅ์ ๋ฏธ์น๊ธฐ ์ ์ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ์ฌ์ ์ ์๋ณํ ์ ์์ต๋๋ค.
- ์๋ฒ ์ธก ๋ชจ๋ํฐ๋ง: ์๋ฒ ์ธก ๋ชจ๋ํฐ๋ง ๋๊ตฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฑ์๋ ์ธํ๋ผ ์ฑ๋ฅ์ ์ถ์ ํ์ฌ CPU ์ฌ์ฉ๋, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฑ๋ฅ์ ๋ํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํฉ๋๋ค. ์๋ก๋ Prometheus, Grafana, Nagios๊ฐ ์์ต๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
์๋ํ๋ ํ ์คํธ์ ์ง์์ ์ธ ๋ชจ๋ํฐ๋ง ์ธ์๋, ์๋ฐ์คํฌ๋ฆฝํธ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๋ฉด ์ฑ๋ฅ ์ ํ๋ฅผ ๋ฐฉ์งํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ฐ์ ์ธ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค:
- HTTP ์์ฒญ ์ต์ํ: ํ์ผ์ ๊ฒฐํฉํ๊ณ , CSS ์คํ๋ผ์ดํธ๋ฅผ ์ฌ์ฉํ๋ฉฐ, ๋ธ๋ผ์ฐ์ ์บ์ฑ์ ํ์ฉํ์ฌ HTTP ์์ฒญ ์๋ฅผ ์ค์ ๋๋ค. CDN(์ฝํ ์ธ ์ ์ก ๋คํธ์ํฌ)์ ์ ์ธ๊ณ ์ฌ์ฉ์์ ์ง์ฐ ์๊ฐ์ ํฌ๊ฒ ์ค์ผ ์ ์์ต๋๋ค.
- ์ด๋ฏธ์ง ์ต์ ํ: ์ด๋ฏธ์ง๋ฅผ ์์ถํ๊ณ ์ ์ ํ ์ด๋ฏธ์ง ํ์(์: WebP)์ ์ฌ์ฉํ์ฌ ํ์ผ ํฌ๊ธฐ๋ฅผ ์ค์ ๋๋ค. ImageOptim, TinyPNG์ ๊ฐ์ ๋๊ตฌ๊ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐ CSS ์ถ์: ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐ CSS ํ์ผ์์ ๋ถํ์ํ ๋ฌธ์์ ๊ณต๋ฐฑ์ ์ ๊ฑฐํ์ฌ ํ์ผ ํฌ๊ธฐ๋ฅผ ์ค์ ๋๋ค. UglifyJS, CSSNano์ ๊ฐ์ ๋๊ตฌ๋ก ์ด ๊ณผ์ ์ ์๋ํํ ์ ์์ต๋๋ค.
- ์ฝํ ์ธ ์ ์ก ๋คํธ์ํฌ(CDN) ์ฌ์ฉ: ์ ์ ์์ฐ(์: ์ด๋ฏธ์ง, ์๋ฐ์คํฌ๋ฆฝํธ, CSS)์ ์ ์ธ๊ณ์ ์์นํ ์๋ฒ ๋คํธ์ํฌ์ ๋ถ์ฐํ์ฌ ์ฌ์ฉ์์ ์ง์ฐ ์๊ฐ์ ์ค์ ๋๋ค.
- ์ค์ํ์ง ์์ ๋ฆฌ์์ค ๋ก๋ฉ ์ง์ฐ: ์ง์ฐ ๋ก๋ฉ ๋ฐ ๋น๋๊ธฐ ๋ก๋ฉ๊ณผ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ํ์ํ ๋๋ง ์ค์ํ์ง ์์ ๋ฆฌ์์ค(์: ์ด๋ฏธ์ง, ์คํฌ๋ฆฝํธ)๋ฅผ ๋ก๋ํฉ๋๋ค.
- DOM ์กฐ์ ์ต์ ํ: DOM ์กฐ์์ ์ต์ํํ๊ณ ๋ฌธ์ ์กฐ๊ฐ(document fragments)๊ณผ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ๋ ๋๋ง ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
- ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ ์ฌ์ฉ: ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋์ ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ๊ณผ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ ํํฉ๋๋ค. ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ๋ฐ ๊ณต๊ฐ ๋ณต์ก๋๋ฅผ ๊ณ ๋ คํ์ญ์์ค.
- ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐฉ์ง: ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์คํ๊ฒ ๊ด๋ฆฌํ๊ณ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํฉ๋๋ค. ํ๋กํ์ผ๋ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์๋ณํ๊ณ ์์ ํ์ญ์์ค.
- ์ฝ๋ ํ๋กํ์ผ๋ง: ์ ๊ธฐ์ ์ผ๋ก ์ฝ๋๋ฅผ ํ๋กํ์ผ๋งํ์ฌ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ ๋ ๋์ ์ฑ๋ฅ์ ์ํด ์ฝ๋๋ฅผ ์ต์ ํํ์ญ์์ค.
- ์ฝ๋ ๋ถํ : ํฐ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค์ ํ์์ ๋ฐ๋ผ ๋ก๋ํ ์ ์๋ ๋ ์์ ์ฒญํฌ๋ก ๋๋๋๋ค. ์ด ๊ธฐ์ ์ ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ํฌ๊ฒ ์ค์ ๋๋ค. Webpack, Parcel, Rollup๊ณผ ๊ฐ์ ๋๊ตฌ๋ ์ฝ๋ ๋ถํ ์ ์ง์ํฉ๋๋ค.
- ํธ๋ฆฌ ์์ดํน: ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค์์ ์ฌ์ฉ๋์ง ์๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ์ด ๊ธฐ์ ์ ์ ์ ๋ถ์์ ํตํด ์ฃฝ์ ์ฝ๋๋ฅผ ์๋ณํ๊ณ ๋น๋ ๊ณผ์ ์์ ์ ๊ฑฐํฉ๋๋ค.
- ์น ์์ปค: ๊ณ์ฐ ์ง์ฝ์ ์ธ ์์ ์ ์น ์์ปค๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋๋ก ์ฎ๊น๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ฉ์ธ ์ค๋ ๋๊ฐ ํ๋ณด๋์ด UI๊ฐ ์๋ตํ์ง ์๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
์ฌ๋ก ์ฐ๊ตฌ ๋ฐ ์์
์๋ํ๋ ํ ์คํธ์ ๋ชจ๋ํฐ๋ง์ด ์ด๋ป๊ฒ ์ฑ๋ฅ ์ ํ๋ฅผ ๋ฐฉ์งํ ์ ์๋์ง ์ค์ ์ฌ๋ก๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค:
1. ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฑ๋ฅ ์ ํ ๋ฐฉ์ง
์ ๋ฝ์ ํ ๋ํ ์ ์์๊ฑฐ๋ ํ์ฌ๋ ์ ํ ์ด๋ฏธ์ง ์บ๋ฌ์ ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กดํ๊ณ ์์์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ๋ฒ์ ์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ ํ, ์ ํ ํ์ด์ง์ ๋ก๋ ์๊ฐ์ด ํฌ๊ฒ ์ฆ๊ฐํ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค. ์บ๋ฌ์ ๋ก๋ ์๊ฐ์ ์ธก์ ํ๋ ์๋ํ๋ ์ฑ๋ฅ ํ ์คํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ๋ฅ ์ ํ๋ฅผ ์ ์ํ๊ฒ ์๋ณํ๊ณ ์ด์ ๋ฒ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋๋๋ฆด ์ ์์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ณต๊ธ์ ์ฒด์ ์ฐ๋ฝํ์ฌ ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ํ๊ณ , ์ ๋ฐ์ดํธ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ๋ก๋์ ์ ๋ฐฐํฌํ๊ธฐ ์ ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํ๋ ฅํ์ต๋๋ค.
2. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ ๋ณ๋ชฉ ํ์ ๊ฐ์ง
ํ ๊ธ๋ก๋ฒ ๋ด์ค ๊ธฐ๊ด์ ๊ธฐ์ฌ ํ์ด์ง์ ์๋ฒ ์๋ต ์๊ฐ์ด ๊ธ๊ฒฉํ ์ฆ๊ฐํ๋ ๊ฒ์ ๊ฒฝํํ์ต๋๋ค. ์๋ฒ ์ธก ๋ชจ๋ํฐ๋ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋๋ฆฌ๊ฒ ์คํ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ๊ฐ ์์ธ์์ ํ์ธํ์ต๋๋ค. ์ด ์ฟผ๋ฆฌ๋ ๊ด๋ จ ๊ธฐ์ฌ๋ฅผ ๊ฐ์ ธ์ค๋ ์ญํ ์ ํ๋๋ฐ, ์ต๊ทผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง ๋ณ๊ฒฝ์ผ๋ก ์ธํด ์๋์น ์๊ฒ ์ฟผ๋ฆฌ ํจ์จ์ฑ์ด ๋จ์ด์ก์ต๋๋ค. ์ฟผ๋ฆฌ๋ฅผ ์ต์ ํํ๊ณ ์ ์ ํ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํจ์ผ๋ก์จ ์ฑ๋ฅ์ ์ด์ ์์ค์ผ๋ก ๋ณต์ํ ์ ์์์ต๋๋ค.3. ๋จ์ผ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฉ๋ชจ๋ฆฌ ๋์ ์๋ณํ ์์ ๋ฏธ๋์ด ํ๋ซํผ์ ์์ฌ์ ๋จ์ผ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์ ์ ๋๋ ค์ง๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค. Chrome DevTools๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ํ๋กํ์ผ๋งํ์ฌ ์ฌ์ฉ์ ํผ๋๋ฅผ ํ์ํ๋ ์ปดํฌ๋ํธ์์ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ํ์ธํ์ต๋๋ค. ์ด ์ปดํฌ๋ํธ๋ ์ฌ์ฉ์๊ฐ ํผ๋๋ฅผ ๋ ๋ ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๋๋ก ํด์ ํ์ง ์์ ์ฌ์ฉ๋์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ ์ง์ ์ผ๋ก ์ถ์ ๋๊ณ ์์์ต๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์์ ํจ์ผ๋ก์จ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ๊ณผ ์์ ์ฑ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์์ต๋๋ค.
๊ฒฐ๋ก
์๋ฐ์คํฌ๋ฆฝํธ ์ฑ๋ฅ ์ ํ๋ ์ฌ์ฉ์ ๊ฒฝํ๊ณผ ๋น์ฆ๋์ค ๊ฒฐ๊ณผ์ ์๋นํ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ์๋ํ๋ ํ ์คํธ์ ์ง์์ ์ธ ๋ชจ๋ํฐ๋ง์ ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ์ ํตํฉํจ์ผ๋ก์จ ์ฑ๋ฅ ์ ํ๋ฅผ ์ฌ์ ์ ๋ฐฉ์งํ๊ณ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ๊ณผ ์๋ต์ฑ์ ์ ์งํ ์ ์์ต๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๋ ๊ฒ๊ณผ ํจ๊ป ์ด๋ฌํ ๊ดํ์ ์์ฉํ๋ฉด ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ์ฐ์ํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์์ ๊ฒ์ ๋๋ค.