티스토리 뷰
웹 개발 실무 기술 A to Z # 12 - 고성능 웹 아키텍처: 로드 밸런싱, 캐싱, 마이크로서비스 확장
octo54 2025. 2. 24. 23:48웹 개발 실무 기술 A to Z
고성능 웹 애플리케이션을 구축하려면 대규모 트래픽을 처리할 수 있는 안정적인 아키텍처가 필요합니다.
✔️ 로드 밸런싱 (Load Balancing) → 서버 부하 분산
✔️ 캐싱 (Caching) → 데이터베이스 부하 감소 및 성능 향상
✔️ 마이크로서비스 확장 (Scalability) → 트래픽 증가에 따른 시스템 확장
이번 글에서는 고성능 웹 아키텍처 설계 방법 및 주요 기술을 소개하겠습니다.
1. 고성능 웹 아키텍처 설계의 중요성
✔️ 사용자 증가에 따른 성능 저하 방지
✔️ 트래픽 급증 시 자동 확장 가능
✔️ 서버 장애 발생 시 서비스 지속성 유지
✔️ 데이터베이스 부하 분산 및 응답 속도 최적화
✅ 최적의 아키텍처를 구축하면 트래픽이 증가해도 안정적인 서비스 운영 가능!
2. 로드 밸런싱 (Load Balancing)
2-1. 로드 밸런싱 개념
✔️ 트래픽을 여러 서버로 분산하여 부하를 줄이는 기술
✔️ 가장 부하가 적은 서버로 요청을 라우팅하여 성능 최적화
✔️ 장애가 발생한 서버를 자동으로 감지하고 트래픽을 다른 서버로 전환
2-2. 로드 밸런서 유형
로드 밸런서 설명 예제
L4 로드 밸런서 | 네트워크 계층(4계층, TCP)에서 부하 분산 | Nginx, HAProxy |
L7 로드 밸런서 | 애플리케이션 계층(7계층, HTTP)에서 부하 분산 | AWS ALB, Traefik |
2-3. Nginx를 이용한 로드 밸런싱 구현
(1) Nginx 설치
sudo apt update && sudo apt install nginx
(2) Nginx 로드 밸런서 설정 (/etc/nginx/sites-available/default)
upstream backend_servers {
server 192.168.1.2:3000;
server 192.168.1.3:3000;
}
server {
listen 80;
location / {
proxy_pass http://backend_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
(3) Nginx 재시작
sudo systemctl restart nginx
✅ Nginx를 활용하면 여러 서버로 트래픽을 자동으로 분산 가능!
3. 캐싱 (Caching) – 데이터베이스 부하 감소
3-1. 캐싱이란?
✔️ 자주 사용되는 데이터를 미리 저장하여 빠르게 제공
✔️ 데이터베이스 조회 없이 캐시에서 즉시 응답 가능
✔️ API 성능 최적화 및 서버 부하 감소
3-2. 캐싱 방식
캐싱 방식 설명 예제
클라이언트 캐싱 | 브라우저에서 데이터 캐싱 | LocalStorage, IndexedDB |
서버 캐싱 | API 응답을 캐싱하여 반복적인 요청 방지 | Redis, Memcached |
CDN 캐싱 | 정적 파일(이미지, CSS, JS) 저장 | Cloudflare, AWS CloudFront |
3-3. Redis를 이용한 API 응답 캐싱
(1) Redis 설치
sudo apt install redis-server
(2) Node.js에서 Redis 캐싱 적용
npm install redis
const redis = require("redis");
const client = redis.createClient();
client.on("error", (err) => console.log("Redis Error:", err));
const cacheMiddleware = (req, res, next) => {
const key = req.originalUrl;
client.get(key, (err, data) => {
if (err) throw err;
if (data) return res.json(JSON.parse(data));
next();
});
};
app.get("/api/products", cacheMiddleware, async (req, res) => {
const products = await Product.find();
client.setex(req.originalUrl, 3600, JSON.stringify(products)); // 1시간 캐싱
res.json(products);
});
✅ Redis를 활용하면 동일한 API 요청 시 빠른 응답 가능!
4. 마이크로서비스 확장 (Scalability)
4-1. 확장성 유형
확장 방식 설명
수직 확장 (Scale-Up) | 더 강력한 서버로 업그레이드 |
수평 확장 (Scale-Out) | 여러 서버를 추가하여 부하 분산 |
4-2. Docker와 Kubernetes를 활용한 마이크로서비스 확장
✔️ Docker로 컨테이너화하여 빠르게 배포 가능
✔️ Kubernetes를 사용하여 자동 확장 및 오케스트레이션
(1) Kubernetes에서 마이크로서비스 자동 확장 설정
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: node-app-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: node-app
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
targetAverageUtilization: 50
✅ Kubernetes HPA(Horizontal Pod Autoscaler)를 활용하면 CPU 사용량에 따라 자동 확장 가능!
5. 고성능 웹 아키텍처 적용 전후 비교
5-1. 적용 전
- 단일 서버 사용 → 트래픽 증가 시 서비스 지연 발생
- API 요청마다 DB 조회 → 응답 속도 저하 및 성능 문제
- 서버 장애 시 서비스 중단
5-2. 적용 후
✔️ 로드 밸런싱 적용 → 트래픽 자동 분산 및 서버 장애 시 대체 서버 운영
✔️ 캐싱 적용 (Redis) → 자주 조회되는 데이터는 캐시에서 즉시 응답
✔️ 마이크로서비스 확장 (Kubernetes) → 트래픽 증가에 따라 자동 확장
✅ 고성능 아키텍처를 적용하면 웹 애플리케이션이 대규모 트래픽에도 안정적으로 운영 가능!
6. 마무리 및 다음 글 예고
이번 글에서는 고성능 웹 아키텍처 구축을 위한 로드 밸런싱, 캐싱, 마이크로서비스 확장 방법을 살펴봤습니다.
다음 글에서는 **웹 애플리케이션 성능 최적화 (코드 스플리팅, Gzip 압축, 웹팩 최적화)**을 소개하겠습니다.
다음 글 예고: "웹 애플리케이션 성능 최적화 – 코드 스플리팅, Gzip 압축, 웹팩 최적화" 🚀
'project > 웹 개발 실무 기술 A to Z' 카테고리의 다른 글
- Total
- Today
- Yesterday
- Python
- fastapi
- Ktor
- AI챗봇
- REACT
- llm
- 챗봇개발
- Project
- PostgreSQL
- nodejs
- 백엔드
- 관리자
- 페이지
- til
- Webpack
- 로컬LLM
- Docker
- 프론트엔드
- 웹개발
- Next.js
- 백엔드개발
- kotlin
- github
- rag
- babel
- nextJS
- Page
- 개발블로그
- 리액트
- LangChain
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |