본문 바로가기
컴퓨터 활용/노년에 즐기는 코딩

AWS EC2에 Django 서버 배포기

by easyfly 2025. 6. 13.
반응형

 

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 보안 인증서 적용, 도메인 연결, 자동 배포 설정 등도 이어서 진행할 예정입니다.

 

반응형

댓글