Django로 제작한 웹 서버를 배포하게 되었는데, 전에 했던 야매.. 방식이 아니라 좀 더 공부할 기회가 생겼다. 컴퓨터 네트워크를 수강하면서 이론적으로 배웠던 개념들을 직접 해보게 되는 것 같아서 신기하기도 하고, 아직은 제대로 이해한 게 못 한 거 같아 앞으로 더 자세히 알아봐야 할 것 같다.
먼저 네트워크의 주체가 다음과 같이 있다.
- 클라이언트
- 웹 서버
- 웹 어플리케이션 서버
클라이언트는 흔히 알고 있듯이 서버에 요청을 보내고 응답을 받는 주체이다. 이 때 웹 브라우저 (IE, 크롬, 사파리 등)을 이용해서 좀 더 쉽게 요청을 보내고 응답을 우리가 흔히 아는 웹 페이지처럼 구성해서 볼 수 있다.
웹 서버(WS)는 클라이언트로부터 HTTP request를 받아들이고, HTML과 같은 웹 페이지를 정적으로 처리해준다. html, css, js 파일들을 처리한다. 진짜 서버에 닿기 전에 언제나 사용되는 파일들이니까 접근하기 쉽도록 여기에 담아둔다고 생각해도 될 듯 하다. 대표적으로 Apache, nginx 등이 있다.
특히 웹 서버는 Reverse proxy server로 로드 밸런싱(Load balancing)을 해준다. 로드 밸런싱은 과부하가 걸리지 않도록 부하를 분산한다는 의미로, 트래픽이 많을 때 여러 대의 서버에 나눠서 한 서버에 집중되는 것을 막는 것이다. 프록시는 클라이언트가 WAS에 바로 요청을 보내지 않고, 프록시에 요청을 먼저 보내서 해당 내용이 있는지 확인한 후에 없다면 프록시가 WAS에 요청을 보내 해당 정보를 받아오는 중간다리 역할을 의미한다. 이 때, 클라이언트가 원하는 정보가 프록시에 없어서 프록시가 서버에 요청을 보내고 받는 그 응답을 프록시에도 저장하게 되는데, 클라이언트 대신 서버에서 자원을 추출하는 프록시 서버를 리버스 프록시라고 한다.
웹 어플리케이션 서버(WAS)는 웹 서버에서 오는 동적인 요청들을 처리하는 서버이다. django와 같은 프레임워크를 사용해 만드는 백엔드를 WAS라고 생각하면 될 듯 하다. 프로그램 실행 환경과 데이터 베이스 접속 기능을 제공하고, 여러 개의 트랜잭션을 관리한다.
Django의 경우 클라이언트 요청이 들어오면 WSGI(Web Server Gateway Interface)라는 것을 반드시 거치게 되는데, 이것은 파이썬을 위한 인터페이스이다. 이름은 굉장히 어느 언어에나 사용할 수 있게 보이지만, HTTP request가 들어왔을 때 파이썬이 이해할 수 있는 언어로 바꿔주는 통역기 정도로 생각하면 된다. 한번도 제대로 본 적은 없었지만, django의 프로젝트 폴더에 들어가면 항상 wsgi.py 파일이 자동 생성되어 있다. 그럼 이런 식으로 파일이 존재하는 것을 확인할 수 있다.
WSGI 에서도 종류가 두 가지 있는데 가장 대표적으로 사용되는 것이 gunicorn 이다. (uwsgi도 있긴 한데, 성능이 gunicorn이 더 좋다고 한다.)
WSGI(사용되는 것은 gunicorn)는 django에서 기본적으로 제공하는 기능인 runserver와 비슷한 역할인데, runserver는 단일 스레드로 동작한다. 따라서 여러 요청이 한꺼번에 들어오면 처리 능력이 현저히 떨어진다. 반면에 WSGI은 멀티 스레드를 생성할 수 있어서 runserver보다 실제 서버 배포에 적합하다.
기말고사 기간이 끝나면 전에 배포했던 사이트를 gunicorn을 이용해서 제대로 수정 배포해봐야겠다. 이후에 혹시 추가 설정 방법이 필요하다면 추가할 예정이다. (배포 관련 참고할 사이트)
'TIL > Python | Django' 카테고리의 다른 글
2021.11.26 TIL : [Django] ORM lazy loading (0) | 2021.11.27 |
---|---|
2021.11.18 TIL : [Python] 비동기 프로그래밍 (0) | 2021.11.18 |
2021.8.25 TIL : [Python] 웹 크롤러 - 2 (0) | 2021.08.24 |
2021.8.24 TIL : [Python] 웹 크롤러 - 1 (0) | 2021.08.24 |
2021.8.23 TIL : [Python] 기초 문법9 - super() (2) | 2021.08.23 |
댓글