슈뢰딩거의 고등어
HTTPS 를 통해 로컬 Django 개발 서버를 실행하는 방법 본문
장고로 개발한 서비스에 facebook 로그인 기능을 추가하고 싶었는데 facebook 은 http가 아닌 https만 지원을 했기 때문에 http를 제공하는 기본세팅의 장고로는 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/
'tech' 카테고리의 다른 글
업무 용어 정리 (0) | 2022.10.09 |
---|---|
아이폰의 음성분리모드가 고양이를 필터링하고 있습니다. (0) | 2022.06.10 |
[JAVA] 다형성,상속, 멤버변수 (0) | 2022.03.28 |
[네트워크] TCP 통신과 UDP 통신의 차이 (0) | 2022.01.30 |
리눅스 네트워크 문제해결 (0) | 2022.01.25 |