슈뢰딩거의 고등어

HTTPS 를 통해 로컬 Django 개발 서버를 실행하는 방법 본문

tech

HTTPS 를 통해 로컬 Django 개발 서버를 실행하는 방법

슈뢰딩거의 고등어 2022. 7. 29. 19:58

장고로 개발한 서비스에 facebook 로그인 기능을 추가하고 싶었는데 facebook 은 http가 아닌 https만 지원을 했기 때문에 http를 제공하는 기본세팅의 장고로는 facebook 로그인 기능을 사용할 수가 없었다. 

facebook 로그인불가

" You're accessing the development server over HTTPS, but it only supports HTTP."

HTTP 만 제공하기 때문에 사용할 수 없다는 의미이다. 하지만 페이스북 로그인을 하기 위해서는 또 요즘 HTTPS 는 기본적으로 제공을 해야하는게 당연하다고 생각하기 때문에 HTTPS 로 세팅을 하고 싶었다.

:(

아래는 빠르고 간단하게 SSL인증서를 생성하여 장고에서 사용할 수 있는 방법이다.


로컬 Django 개발을 위해 자체 서명된 SSL 인증서를 생성하는 것은 번거로운 일이다.

로컬에서 신뢰할 수 있는 개발 인증서를 생성하는 mkcert 를 사용해서 장고를 이용한 서비스를 개발해보자

 

1 . 로컬 SSL 인증서 생성

1. macOS 를 사용하기 때문에 homebrew 를 이용하여 설치했다.

brew install mkcert

그 외의 os를 사용한다면 아래 링크로 이동하여 각 운영체제에 맞는 설치를 하면 된다.

https://github.com/FiloSottile/mkcert#windows

 

2. 다음으로 os가 생성하려는 로컬 인증서를 신뢰하도록 만든다. 이를 위해 로컬 인증기관 (CA)를 설치해야한다.

아래 명령어로 설치할 수 있다.

mkcert -install

3. 다음으로 localhost 도메인에 대한 인증서를 생성해야한다.

터미널에서 Django 프로젝트의 루트로 이동한 뒤 터미널 명령어를 실행하여 localhost(127.0.0.1) 에 대한 인증서를 생성한다.

localhost 이외의 도메인에서 로컬 서버를 실행하고 싶다면 localhost를 선택한 도메인으로 바꿔서 사용하면 된다.

mkcert -cert-file cert.pem -key-file key.pem localhost 127.0.0.1

성공했다면 아래와 같은 성공 결과와 유효기간이 나온다.

이 인증서는 Djanogo 또는 python과 무관하게 localhost 에서 실행되는 모든 로컬 프로젝트에서 재사용할 수 있다.

 

2. HTTPS와 작동하도록 Django 서버 구성

기본 Django 의 manage.py runserver 명령어는 SSL을 지원하지 않는다.

그렇기 때문에 Django Extensions 패키지 manage.py runserver_plus 의 명령어를 사용해야한다.

 

1. 다음 명령어를 실행하여 Werkzeug 서버와 함께 Django-extensions 을 설치한다.

이를 위해 sudo 권한 또는 --user 옵션이 필요할 수도 있다.

Werkzeug 은 Flask 에서 많이 사용이 되는데 django 에서 https 을 사용하고 싶을 경우에도 사용된다.

pip3 install django-extensions Werkzeug

2. settings.py 의 INSTALLED_APPS 에 djagno_extensions 을 추가한다.

INSTALLED_APPS = [
    ...
    "django_extensions",
]

3. 마지막으로 다음 명령어를 실행하여 HTTPS 모드에서 로컬 개발서버를 run 한다.

python3 manage.py runserver_plus --cert-file cert.pem --key-file key.pem

성공!

https://127.0.0.1:8000

에 접속한다.

 

참고: https://timonweb.com/django/https-django-development-server-ssl-certificate/

 

How to run a local Django development server over HTTPS with a trusted self-signed SSL certificate

How to run a local Django development server over HTTPS with a trusted self-signed SSL certificate.

timonweb.com

 

Comments