장고 배포하기
배포 준비하기
장고 프로젝트를 배포하기 전에 먼저 개발 환경에서 프로덕션 환경으로 설정을 변경해야 합니다. settings.py에서 DEBUG 값을 False로 설정하고, ALLOWED_HOSTS에 배포할 서버의 IP 주소나 도메인을 추가해야 합니다. 또한, 데이터베이스와 같은 외부 서비스에 연결하는 설정을 프로덕션 환경에 맞게 수정해야 합니다. 보안을 위해 SECRET_KEY는 환경 변수로 설정하거나 비밀 파일로 관리하는 것이 좋습니다. 배포 전, 모든 미사용 코드를 제거하고, collectstatic 명령어를 사용하여 정적 파일을 수집하는 것도 중요합니다.
웹 서버 설정 (Gunicorn 사용)
장고 애플리케이션을 실제 서비스에 배포할 때는 WSGI 서버가 필요합니다. 가장 많이 사용되는 WSGI 서버는 Gunicorn입니다. Gunicorn은 장고와 잘 호환되며, 프로덕션 환경에서 빠르고 안정적인 성능을 제공합니다. Gunicorn을 설치하려면 pip install gunicorn 명령어로 설치한 후, gunicorn myproject.wsgi:application으로 실행할 수 있습니다. 또한, 배포 시에는 Gunicorn을 시스템 서비스로 등록하여 서버가 재시작되더라도 자동으로 실행되도록 설정할 수 있습니다.
Nginx 설정 (리버스 프록시)
Nginx는 Gunicorn 앞단에 리버스 프록시로 설정하여 요청을 Gunicorn 서버로 전달하는 역할을 합니다. Nginx는 정적 파일 제공, 로드 밸런싱, 보안 설정 등 다양한 기능을 제공하며, Gunicorn은 애플리케이션 요청을 처리합니다. Nginx를 설치한 후, /etc/nginx/sites-available/ 디렉터리에 설정 파일을 작성하여 서버 도메인과 Gunicorn 포트를 연결합니다. 리버스 프록시 설정을 통해 클라이언트는 Nginx를 통해 요청하고, Nginx가 이를 Gunicorn으로 전달하여 애플리케이션을 처리합니다.
데이터베이스 마이그레이션 및 정적 파일 처리
배포 전에 데이터베이스 마이그레이션을 실행하여 프로덕션 데이터베이스를 최신 상태로 만들어야 합니다. python manage.py migrate 명령어를 사용하여 모든 마이그레이션을 적용합니다. 또한, python manage.py collectstatic 명령어를 통해 모든 정적 파일을 한 곳에 모아 서버에서 쉽게 제공할 수 있도록 합니다. 이 정적 파일들은 Nginx가 직접 제공하므로, Gunicorn은 애플리케이션 로직만 처리하게 됩니다. 이를 통해 애플리케이션의 성능을 최적화하고, 파일 요청을 더 효율적으로 처리할 수 있습니다.
서버 보안 설정
배포 후 서버의 보안을 강화하는 것은 매우 중요합니다. 서버에 ufw(Uncomplicated Firewall)를 설정하여 외부에서 접속할 수 있는 포트를 제한하고, SSH 접근 시 비밀번호 인증을 비활성화하고, 키 인증을 사용하는 것이 좋습니다. 또한, SSL 인증서를 설정하여 HTTPS로 보안 연결을 사용하고, 웹 애플리케이션 방화벽(WAF)을 적용해 악의적인 공격을 차단할 수 있습니다. Let's Encrypt와 같은 무료 SSL 인증서를 사용하면 HTTPS를 간편하게 설정할 수 있습니다. 이를 통해 서버와 데이터의 보안을 강화할 수 있습니다.