Django

[AWS/nginx/react/Gunicorn/django]신입 개발자의 django 프로젝트 배포 삽질_1

a-몬드 2022. 5. 18. 11:08
반응형

아래 사진을 만들어준 동기 PJW님께 감사의 말씀 전해 드립니다.

우리의 현상태,,,,,,도라버렸따,,,,

우리는 현재 회사에서 첫 django로 온보딩 프로젝트를 진행하고 있고 배포 과정(삽질 매우 다수,,,)을 한번 정리해보려고한다.

 

이것은 해결방법이 아니다.

우리가 해온 삽질이다.

이글을 보고 다른 사람들이 우리처럼 삽질하지 않기를 바라며 작성하는 글이다. 

아직도 삽질중,,,,,

 

첫번째  아키텍처

정말ㅜ 눈물난다,,,배포란 이런것인가,,,, 

 

위의 그림처럼 front와 back을 분리하여 설계하였더니 발생한 문제

 

 

1. 쿠키에 sessionID를 담기 위해 Same Site Cookies 옵션

https://www.certkorea.co.kr/bbs/board.php?bo_table=31&wr_id=42 

 

[공지] 구글 크롬, SSL인증서 비적용 사이트의 쿠키 사용 제한 > 공지사항 | SSL 인증서 써트코리아-

> 고객지원/이벤트 > 공지사항 공지사항

www.certkorea.co.kr

- 구글 크롬의 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요청이 보이지 않는다.

- 지금와서 보면 여기서 wsgi를 바로 도입했으면 투인스턴스로 됐을지도 모른다,,,,(우리의 역량 부족,,)

6. WSGI 도입

- API 요청이 없는 이유는 웹서버인 nginx는 파이썬 프로그램을 호출하는 기능이 없다.
Nginx가 어떻게 파이썬 프로그램을 호출해야 하는지 모르기 때문인다.
- 파이썬 프로그램을 호출하는 WSGI(Web Server Gateway Interface)서버가 반드시 필요
- 동적 요청 발생시 웹서버가 WSGI를 호출하고, WSGI 서버는 파있너 프로그램을 호출하여 동적 페이지 요청을 대신 처리
- 동적 요청 처리를 위해 반드시 WSGI 서버가 필요하다.

 

 

 
 
 

결론

cookie문제를 해결하기 위해 이것저것 시도했지만 의미 없는 삽질

공식문서를 먼저 제대로 봐야한다는 것을 느꼈다.

블로그 이것저것 보지말고,,,공식 문서 부터 봐야한다.

괜히 공식 문서에서 WSGI 사용하는 것이 나온게 아니다,,,

꼭 경험을 해봐야 아는,,우리 였다

 

 

 

반응형