📌 Django 실무 배포 완전 정복 - Gunicorn, Nginx, Docker, AWS 흐름 중심 정리
✅ 1. 배포란 무엇인가요?
**배포(Deployment)**란 개발한 Django 프로젝트를 실제 사용자가 인터넷에서 접속할 수 있도록 서버에 올리고, 실행 환경을 구성하는 과정입니다.
단순히 python manage.py runserver로 개발하는 환경에서 벗어나,
**운영 환경(production)**에 맞게 안정성, 확장성, 보안 등을 고려해야 합니다.
✅ 2. Django 배포 구성 요소 설명
실무에서는 아래 구성요소들을 조합하여 Django를 배포합니다.
구성 요소 역할 설명
Django | 웹 애플리케이션 자체, 비즈니스 로직 담당 |
Gunicorn | WSGI 서버, Django 프로젝트를 외부에서 실행 가능하게 만듦 |
Nginx | 웹 서버. 클라이언트 요청을 받아 Gunicorn에 전달하고, 정적 파일도 처리함 |
Docker | 애플리케이션을 컨테이너로 포장해 어디서든 동일한 환경에서 실행 가능 |
AWS (EC2, RDS, S3) | 클라우드 인프라 (서버, 데이터베이스, 파일저장소 제공) |
도메인 + SSL (HTTPS) | 사용자 접근 주소 제공 + 보안 연결 (Certbot 등으로 발급) |
✅ 3. Gunicorn과 Nginx 더 자세히 이해하기
🔸 Gunicorn이란?
Gunicorn = "Green Unicorn"
Python 웹 애플리케이션을 실행할 수 있도록 도와주는 WSGI 서버입니다.
- Django는 기본적으로 개발용 서버(runserver)만 포함되어 있음
- 실제 서비스에서는 이 개발 서버를 쓰면 안 되고, Gunicorn 같은 운영용 WSGI 서버를 사용해야 함
- Gunicorn은 여러 클라이언트 요청을 멀티 프로세스로 안정적으로 처리함
# Gunicorn으로 Django 실행 예시
$ gunicorn myproject.wsgi:application --bind 0.0.0.0:8000
🔸 Nginx란?
Nginx는 클라이언트 요청을 받아서 Gunicorn에 전달하고,
정적 파일(CSS/JS/이미지)은 자체적으로 서빙하는 웹 서버입니다.
- Nginx는 가볍고 빠르며, 리버스 프록시로도 동작
- HTTPS 보안 통신도 Nginx가 처리함
- Gunicorn은 HTML 응답만 처리하고, 정적파일은 직접 제공하지 않기 때문에 Nginx가 분담
# 예시 Nginx 설정
location /static/ {
alias /home/ubuntu/myproject/static/;
}
location / {
proxy_pass http://127.0.0.1:8000; # Gunicorn으로 요청 전달
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
📌 정리하면:
- Gunicorn은 Django 앱을 실행시키는 Python 서버
- Nginx는 웹 브라우저의 요청을 Gunicorn으로 중계하고, 정적 파일을 직접 제공
✅ 4. Django 배포 전체 흐름
[클라이언트] → [Nginx] → [Gunicorn] → [Django App]
↓
[정적파일, 미디어 파일 서비스]
- 사용자 요청이 Nginx로 들어옴
- Nginx가 Gunicorn으로 요청 전달
- Gunicorn이 Django 앱을 실행
- Django에서 결과 응답을 생성해 Gunicorn → Nginx → 사용자 순으로 반환
- 정적 파일(CSS/JS)은 Nginx가 직접 제공
✅ 5. 실무에서 사용하는 배포 조합
조합 사용 이유
Gunicorn + Nginx | 기본적이고 가장 안정적인 배포 조합 |
+ Docker | 환경 이식성과 버전 통제가 용이 (운영 = 개발 환경) |
+ AWS EC2 | 서버 호스팅, SSH 접근, 탄력적인 리소스 할당 가능 |
+ RDS, S3 | 외부 DB 및 파일 저장소 분리로 성능 향상 |
+ Certbot | HTTPS 인증서 무료 발급으로 보안 강화 |
+ GitHub Actions / CI-CD | 코드 푸시 시 자동 배포 가능 (무중단 배포 포함) |
✅ 6. 예시: Docker + EC2 + Gunicorn + Nginx 배포 흐름
1. Django 프로젝트 준비
2. Dockerfile & docker-compose.yml 작성
3. AWS EC2 서버 생성 후 SSH 접속
4. Docker로 이미지 빌드 및 컨테이너 실행
5. Gunicorn 설정 → Django 실행
6. Nginx 설정 → 포트 포워딩
7. Certbot 설치 → SSL 적용
8. 도메인 연결 → 운영 시작
✅ 7. 배포 시 고려할 점
- STATIC & MEDIA 파일 처리: collectstatic으로 정리 후, Nginx 또는 S3에서 서비스
- 환경 분리: .env 파일로 DEBUG, SECRET_KEY, DB 정보 등 분리
- 보안 설정: ALLOWED_HOSTS, HTTPS 적용, CSRF 보안 강화
- 에러 핸들링: 500, 404 등 에러 페이지 커스터마이징
✅ 8. 요약 정리
키워드 핵심 요약
배포 | Django 프로젝트를 실제 운영 서버에 올려 서비스하는 것 |
Gunicorn | Django를 실행하는 Python WSGI 서버 |
Nginx | 클라이언트 요청 처리 및 정적파일 서빙 역할 |
Docker | 환경 통일 및 배포 자동화에 유리한 도구 |
AWS | 실무에서 가장 널리 쓰이는 클라우드 인프라 |
💬 배포는 단순히 코드를 올리는 게 아니라, 운영 환경을 고려한 전체 시스템 구성입니다.
초기에는 복잡해 보일 수 있지만, 한 번 흐름을 익히면 재사용성과 자동화가 가능합니다!
다음 단계로 CI/CD 또는 무중단 배포 전략도 학습해보시면 좋습니다.
'기술블로그-Django편' 카테고리의 다른 글
📌 Django CBV의 핵심 원리: as_view()와 dispatch() 완전 이해하기 (0) | 2025.05.08 |
---|---|
📌 Django CBV는 결국 함수일까? CBV vs FBV 본질 비교와 실무 활용 전략 (0) | 2025.05.08 |
📌 Django 뷰 구성 전략 - CBV vs FBV, 그리고 혼합 전략까지 완벽 비교 정리 (0) | 2025.05.08 |
📘 URL과 Django에서의 & 사용법 + 검색 유지 페이지네이션 패턴 + Q 객체 완전 이해 (0) | 2025.05.07 |
📘 Django 코드에서 점(.)과 언더스코어(_) 완전 정복 (0) | 2025.05.07 |