AWS EC2에 Django 서버 배포기
– Gunicorn + Nginx 설정과 502 오류 해결 과정 –
이번 글에서는 AWS EC2 인스턴스에 Django 웹 애플리케이션을 배포하고, Gunicorn과 Nginx를 통해 서비스하는 전체 과정을 정리해 보았습니다. 특히 502 Bad Gateway 오류를 해결하는 데 집중하며 하나씩 점검했던 내용을 공유합니다.
1. EC2 인스턴스 구성
- 리전: us-east-1
- OS: Ubuntu 22.04
- 인바운드 규칙: HTTP(80), HTTPS(443), SSH(22) 허용
인스턴스에 접속한 후 Python, pip, virtualenv, Git 등을 설치하고, Django 프로젝트 코드를 가져왔습니다.
2. Django 프로젝트 준비
sudo apt update
sudo apt install python3-venv nginx
python3 -m venv venv
source venv/bin/activate
pip install django gunicorn
- manage.py migrate로 DB 마이그레이션
- createsuperuser로 관리자 계정 생성
- runserver로 로컬 실행 테스트 완료
3. Gunicorn 설정
Django 프로젝트 루트에서 Gunicorn을 socket 방식으로 구동하도록 systemd 서비스 파일을 작성했습니다.
/etc/systemd/system/gunicorn.service:
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/Resonance
ExecStart=/home/ubuntu/Resonance/venv/bin/gunicorn \
--workers 3 \
--bind unix:/home/ubuntu/Resonance/gunicorn.sock \
--umask 007 \
resonance.wsgi:application
[Install]
WantedBy=multi-user.target
적용:
sudo systemctl daemon-reload
sudo systemctl enable gunicorn
sudo systemctl start gunicorn
4. Nginx 설정
/etc/nginx/sites-available/resonance 파일 생성 후 심볼릭 링크 설정:
server {
listen 80;
server_name _;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/ubuntu/Resonance;
}
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://unix:/home/ubuntu/Resonance/gunicorn.sock;
}
}
적용:
sudo ln -s /etc/nginx/sites-available/resonance /etc/nginx/sites-enabled
sudo nginx -t
sudo systemctl restart nginx
5. 발생한 문제: 502 Bad Gateway
502 Bad Gateway 오류가 반복적으로 발생했고, 로그 분석 결과 아래와 같은 문제가 확인되었습니다.
connect() to unix:/home/ubuntu/Resonance/gunicorn.sock failed (13: Permission denied)
6. 해결 방법 요약
- .sock 파일 권한 설정:
- sudo chown ubuntu:www-data /home/ubuntu/Resonance/gunicorn.sock sudo chmod 660 /home/ubuntu/Resonance/gunicorn.sock
- .sock이 위치한 디렉토리 권한 추가:
- sudo chmod 755 /home/ubuntu sudo chmod 755 /home/ubuntu/Resonance
- Gunicorn에 --umask 007 추가로 .sock 생성 권한 명확히 설정
7. 관리자 페이지 접속 성공
최종적으로 다음 주소로 접속하여 Django 관리자 페이지가 정상적으로 작동하는 것을 확인했습니다.
http://고정아이피/admin
관리자 로그인 후 모델 관리, 사용자 추가 등 기능을 사용할 수 있었습니다.
마치며
이번 과정은 단순히 서버를 실행하는 것이 아니라, 운영체제의 권한 구조, 소켓 통신, 리버스 프록시 구성까지 전반적인 웹 서비스 아키텍처를 경험할 수 있는 소중한 기회였습니다.
문제가 발생했을 때 포기하지 않고 원인을 찾아 해결하는 것이 가장 큰 배움이었습니다.
앞으로는 이 기반 위에 정적 파일 관리, HTTPS 보안 인증서 적용, 도메인 연결, 자동 배포 설정 등도 이어서 진행할 예정입니다.
'컴퓨터 활용 > 노년에 즐기는 코딩' 카테고리의 다른 글
| Apache + Django 연동 핵심 정리 노트 (4) | 2025.06.17 |
|---|---|
| AWS의 데이터 분석 파이프라인 전체 구조 (8) | 2025.06.15 |
| Django 관리자(superuser) 계정 확인 및 비밀번호 재설정 방법 (8) | 2025.06.12 |
| Django 프로젝트 생성 및 MySQL 연동 (8) | 2025.06.11 |
| 시집 자동화 플랫폼 구축 기획안 (7) | 2025.06.10 |
댓글