아래 사진을 만들어준 동기 PJW님께 감사의 말씀 전해 드립니다.
우리의 현상태,,,,,,도라버렸따,,,,
우리는 현재 회사에서 첫 django로 온보딩 프로젝트를 진행하고 있고 배포 과정(삽질 매우 다수,,,)을 한번 정리해보려고한다.
이것은 해결방법이 아니다.
우리가 해온 삽질이다.
이글을 보고 다른 사람들이 우리처럼 삽질하지 않기를 바라며 작성하는 글이다.
아직도 삽질중,,,,,
첫번째 아키텍처
위의 그림처럼 front와 back을 분리하여 설계하였더니 발생한 문제
1. 쿠키에 sessionID를 담기 위해 Same Site Cookies 옵션
https://www.certkorea.co.kr/bbs/board.php?bo_table=31&wr_id=42
- 구글 크롬의 80버전(20-02-04)부터 http 사이트에서 쿠키 사용이 제한
- 동일한 도메인을 가진 사이트에서만 사용되도록 쿠키 사용이 제한
- 일부 예외적인 상황 HTTP get method, a href 에서만 쿠키 사용이 가능
- Same Site 옵션을 바꿔주면 cookie에 sessionID가 담길 것이라고 생각하였다.
- Same Site 기능 사용은 HTTPS에서만 사용할 수 있다.
- Front인스턴스에 있는 nginx에 SSL을 적용해보자
2. nginx에 SSL적용
- 발급 절차가 간단하고 무료인 Let's Encrypt에서 SSL을 발급 받았다.
- Let's Encrypt에서 ip주소로 SSL 발그비 불가능하여 도메인을 생성
- SSL을 적용했고 테스트해본 결과 장고는 HTTPS요청을 지원하지 않는다.
진짜 산넘어 산이다...
3. django는 https 요청을 지원하지 않아서 발생하는 문제
- django는 http 통신에 기반해 request에 따른 처리과정을 이해한다.
- back 인스턴스에는 webserver(nginx)가 존재하지 않는다.
- webserver없이 django에도 SSL을 적용해보자
- INSTALLED_APPS에 ssslserver를 추가하고 설치
- front에서 request를 보냈을때 back인스턴스에 request를 받아 처리하는 log가 존재하지 않는다.(실패)
- 다른 방법을 찾아야한다고 생각
4. 쿠키문제를 해결하기 위해 front와 back 인스턴스를 합쳐서 하나로 사용
- front에 back인스턴스를 세팅하여 Django 서버를 실행하여 localhost로 호출하고 포트 번호도 맞춰 주었다.
- 인스턴스 내에서 localhost로 API를 요청
- 하지만 요청이 생성되지 않았다. pm2에서 request log를 확인하였을때 API요청이 보이지 않는다.
6. WSGI 도입
- API 요청이 없는 이유는 웹서버인 nginx는 파이썬 프로그램을 호출하는 기능이 없다.
Nginx가 어떻게 파이썬 프로그램을 호출해야 하는지 모르기 때문인다.
- 파이썬 프로그램을 호출하는 WSGI(Web Server Gateway Interface)서버가 반드시 필요
- 동적 요청 발생시 웹서버가 WSGI를 호출하고, WSGI 서버는 파있너 프로그램을 호출하여 동적 페이지 요청을 대신 처리
- 동적 요청 처리를 위해 반드시 WSGI 서버가 필요하다.
결론
cookie문제를 해결하기 위해 이것저것 시도했지만 의미 없는 삽질
공식문서를 먼저 제대로 봐야한다는 것을 느꼈다.
블로그 이것저것 보지말고,,,공식 문서 부터 봐야한다.
괜히 공식 문서에서 WSGI 사용하는 것이 나온게 아니다,,,
꼭 경험을 해봐야 아는,,우리 였다
'Django' 카테고리의 다른 글
[django]Django 소개 및 장단점 (2) | 2022.05.24 |
---|---|
[AWS/nginx/react/Gunicorn/django]신입 개발자의 django 프로젝트 배포 삽질_2(해결) (0) | 2022.05.18 |
[django/ubuntu] letsencrypt nginx에 인증서 적용하기 (0) | 2022.05.09 |
[django/ubuntu]ubuntu에서 mysqlclient 설치 에러(패키지 설치 하나면 해결)/ERROR: No matching distribution found for Mysqlclient (0) | 2022.04.29 |
[django] ORM Query Set 구조와 원리 그리고 최적화 전략 (0) | 2022.04.27 |