반응형
0. 배포의 중요성
서비스가 성장할수록 “배포”는 더 중요해집니다. 특히, 사용자가 많은 서비스는 배포 순간의 서버 다운타임조차 큰 장애로 이어질 수 있습니다. 이번 글에서는 배포 방식의 종류, 무중단 배포의 장점, 그리고 무중단 배포 방법과 예제를 정리해보겠습니다.
1. 배포의 종류
| 배포 방식 | 특징 | 장점 | 단점 |
| 수동 배포 | 서버에 직접 들어가서 코드 교체 후 재시작 | 단순, 작은 프로젝트에 적합 | 다운타임 발생, 자동화 부족 |
| Rolling Update | 서버를 하나씩 교체하면서 배포 | 다운타임 최소화 | 오래 걸릴 수 있음 |
| Blue-Green | 기존 서버(Blue)와 새로운 서버(Green)를 준비 후 전환 | 즉시 전환 가능, 빠른 롤백 | 서버 리소스 2배 필요 |
| Canary 배포 | 일부 트래픽만 새 버전으로 보내 테스트 | 위험 최소화, 점진적 배포 | 설정 복잡, 모니터링 필수 |
2. 무중단 배포란?
무중단 배포(Zero-Downtime Deployment)란 사용자가 서비스를 이용하는 동안 서버가 중단되지 않고 배포가 이루어지는 방식을 말합니다.
- 무중단 배포의 장점
- 사용자 경험 향상 → 장애 없는 안정적인 서비스 제공
- 빠른 롤백 가능 → 문제 발생 시 즉시 이전 버전으로 전환
- 배포 자동화와 연계 → CI/CD 파이프라인과 결합하여 효율성↑
3. 무중단 배포의 주요 방법
1) Rolling Update
- 서버를 하나씩 순차적으로 업데이트
- Kubernetes, AWS ECS 등에서 기본 제공
- 다운타임은 거의 없지만 전체 배포 완료까지 시간이 오래 걸림
2) Blue-Green Deployment
- Blue(현재 서비스 중) / Green(새 버전) 두 개의 환경 운영
- 트래픽을 Green으로 전환하면 즉시 배포 완료
- 문제 발생 시 Blue로 빠르게 롤백 가능
- 단점: 서버 리소스가 2배 필요
3) Canary Deployment
- 전체 트래픽 중 일부(예: 5%)만 새 버전으로 전달
- 모니터링 결과 이상 없으면 점진적으로 100%까지 확장
- 실서비스 환경에서 새 버전 테스트 가능
- 단점: 설정/모니터링이 복잡
4) Load Balancer 기반 무중단 배포
- Nginx, HAProxy, AWS ALB 등을 사용
- 배포 시 새 서버를 추가 → 로드 밸런서에 연결
- 구 서버는 연결 해제 후 종료 → 자연스럽게 무중단 배포 완성
4. 실전 예제 (Spring Boot + Nginx + Blue-Green 방식)
1) Nginx 설정 (두 개의 WAS 서버를 Blue/Green으로 운영)
upstream backend {
server 127.0.0.1:8081; # Blue
# server 127.0.0.1:8082; # Green
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
- 현재는 Blue 서버(8081)만 연결된 상태.
2) Blue → Green 전환
- Green 서버(8082)에 새 버전 배포
- Nginx 설정 수정:
upstream backend {
# server 127.0.0.1:8081; # Blue
server 127.0.0.1:8082; # Green
}
- Nginx 설정 reload:
nginx -s reload
- 기존 Blue 서버는 종료 → 무중단 전환 완료 ✅
3) 장점
- 다운타임 없이 배포 가능
- 장애 시 Blue 서버로 즉시 롤백 가능
- Nginx 로드밸런싱 기능 활용
5. 정리
- 배포 방식은 수동/롤링/블루-그린/카나리 등 다양하며, 서비스 특성에 맞게 선택해야 합니다.
- 무중단 배포는 사용자 경험과 안정성을 보장하며, 대규모 서비스에서는 필수.
- 대표적인 방식은 Rolling Update, Blue-Green, Canary이며, Nginx·Kubernetes·AWS 등을 활용해 쉽게 구현할 수 있습니다.
반응형
'Backend > Study' 카테고리의 다른 글
| [Study] JWT 동작방식 깊게 살펴보기 (0) | 2025.10.02 |
|---|---|
| [Study] JWT 토큰 인증 방식과 보안 고려사항 (0) | 2025.10.01 |
| [Study] Nginx 리버스 프록시 설정 예제 (502/504 에러 해결) (0) | 2025.09.29 |
| [Study] Redis 캐시 적용 방법 (Spring Boot 실전 예제) (0) | 2025.09.25 |
| [Study] JPA vs MyBatis 비교 – 언제 어떤 걸 써야 할까 (0) | 2025.09.24 |