본문 바로가기
개발 공부/서버

[서버 성능 최적화] 정적 vs 동적 자원 구분과 최적화, 이미지, JS, CSS 속도 향상 전략

by 악마의 개발자 2025. 5. 27.
반응형

서버 성능 최적화


💡 “서버 성능이라면서 왜 이미지나 CSS 이야기를 하죠?”

사용자가 느끼는 "속도"는 단순히 서버 응답 시간뿐만 아니라

페이지가 얼마나 빨리 보이느냐로 결정됩니다.

→ 즉, 정적 자원을 어떻게 처리하느냐가 서버 전체 성능 체감에 큰 영향을 줍니다.


🧾 정적 vs 동적 자원이란?

구분 설명 예시
정적 자원 바뀌지 않는 파일, 서버가 계산 없이 바로 전송 이미지, JS, CSS, HTML
동적 자원 요청마다 내용이 바뀌는 데이터 API 응답(JSON), 검색 결과 등
 

🚀 정적 자원 최적화 전략

✅ 1. CDN(Content Delivery Network) 활용

  • 전 세계 엣지 서버에 정적 자원 배포
  • 사용자에게 가장 가까운 서버에서 응답
  • Cloudflare, AWS CloudFront, Vercel 등 활용
<link rel="stylesheet" href="https://cdn.example.com/styles.css">

✅ 정적 자원은 원서버가 아닌 CDN에서 제공 → 트래픽 감소 + 응답 속도 향상


✅ 2. 브라우저 캐싱 설정

Cache-Control: max-age=31536000
  • 한 번 받은 정적 자원을 브라우저에 저장
  • 페이지 재방문 시 다시 다운로드하지 않음
  • JS/CSS, 이미지 등에 강력하게 적용 가능

✅ 3. 이미지 최적화

전략 설명
WebP 사용 JPG/PNG보다 용량 ↓, 품질 유지
Lazy Loading 화면에 보일 때 로드 (loading="lazy")
크기 조절 필요한 해상도만 전달 (srcset, picture)
이미지 CDN 이미지 전용 처리 서버로 자동 최적화
 
<img src="cat.jpg" loading="lazy" width="300">

✅ 사용자는 스크롤할 때만 이미지 로딩 → 초기 렌더링 속도 개선


✅ 4. JS / CSS 최적화

전략 설명
압축(minify) 공백/주석 제거 → 용량 ↓
번들링(bundle) 여러 파일을 하나로 병합 → 요청 수 ↓
코드 분할(code splitting) 필요한 파일만 로딩 → 초기 속도 ↑
defer / async 속성 JS 파일 로딩 시 렌더링 지연 방지
<script src="main.js" defer></script>

🔄 동적 자원 처리 팁

  • API 응답은 캐싱 가능 여부 검토 (예: 인기 게시글 목록)
  • SSR(서버 사이드 렌더링) or SWR(재검증 전략) 등으로 느린 API 보완
  • GraphQL의 @defer 같이 부분 응답도 고려 가능

🧠 실무 적용 순서 예시

  1. 이미지 용량 체크 → WebP로 변환
  2. JS 번들링/압축 적용 → Webpack, Vite 설정
  3. CSS 분할 적용 → unused CSS 제거
  4. 정적 자원 CDN 이전
  5. Cache-Control 헤더 적용 및 브라우저 캐싱 확인

🧠 정리 한마디!

"정적 자원은 서버의 부담을 가장 쉽게 줄일 수 있는 성능 향상 지점입니다."

 

✔️ 핵심 요약

항목 해야 할 일
이미지 WebP, lazy load, CDN 적용
JS/CSS 번들링 + minify + defer
자원 전송 CDN 활용 + 브라우저 캐싱
동적 자원 필요 시 캐싱, 코드 분할
반응형