Django 를 통해 간단한 pytorch 자연어 처리 모델 배포를 위해 정리한 내용
우선, Django 는 Web Framework 라는 생각으로, 그럼 Django 를 사용할 때 웹 서버는 무엇인지에 대한 의문으로
검색을 시작했다.
우선, 결론적으로 말하자면 Django 는 웹 서버가 아니다!!
Django 란 ?
1. Django 개념
- 파이썬으로 작성된 오픈 소스 웹 프레임워크이다. 즉, Web Server 가 아닌 ' Web Application Framework ' 이다.
- Django는 모델-뷰-컨트롤러의 MVC 패턴을 따르고 있다.
2. Django 서버 실행
- Django 프로젝트 생성 후 서버를 실행할 때, 아래 명령어를 사용하는데
./manage.py runserver (= python manage.py runserver)
- 위의 명령어를 사용하는 경우는, 디버그 용으로 Local 에서만 실행할 때 사용해야하며,
- 실제 Production 환경에서는 사용하지 않는 것이 옳다.
Web Server 란 ?
1. Web Server 의 개념
- HTTP 프로토콜로 요청을 받아, HTML 문서 등과 같은 정적 웹 페이지를 응답해주는 소프트웨어이며,
- 하드웨어와 소프트웨어 측면의 웹 서버가 존재한다.
2. 하드웨어/소프트웨어 측면의 웹 서버
하드웨어 측면 | 소프트웨어 측면 |
웹 사이트의 컴포넌트 파일들을 저장하는 컴퓨터 - 컴포넌트 파일 : html 문서, images, css stylesheets, javascript 파일 등 - 컴포넌트 파일들을 -> 최종 소비자의 디바이스에 전달 - 웹 서버는 인터넷에 연결되어 있고, 도메인 이름을 통해 접속 가능 |
웹 사용자가 어떻게 호스트 파일들에 접근하는지를 관리 - HTTP server : URL(Web address) & HTTP 소프트웨어의 일부 |
3. Web Server 의 역할
- 웹 페이지를 클라이언트로 전달하는 것이 Web Server 의 역할이다.
- 주로, 그림이나 CSS, 자바스크립트를 포함한 정적인 HTML 문서가 클라이언트로 전달된다.
4. Web Server 예시
- 대표적인 예시로는, Ngnix, Apache, GWS 등이 있으며 최근 Ngnix를 많이 쓴다고 한다.
+ Apache 와 Ngnix 차이
Apache | Ngnix |
Request에 대해 Process를 하나씩 처리 | Event-Driven 방식으로, 비동기 처리 |
WSGI 란 ?
1. WSGI 개념
- WSGI = Web Server Gateway Interface의 약자로,
Python Application(Python Script)이 Web Server와 통신하기 위한 표준 Interface이다.
- python Framwork 로, 일종의 프로토콜에 해당한다.
2. WSGI 의 필요성
- Ngnix와 Apache와 같은 서버들은, Django 나 Flask로 작성한 Web Application 을 이해하지 못해,
-> WSGI를 이용해 웹 서버와 우리가 작성한 애플리케이션이 서로 통신할 수 있게 하는 것이다.
3. WSGI server(Middleware)
(1) WSGI server 의 필요성
- 웹 서비스를 개발하다 보면, '쿠키나 세션, 인증, 라우팅 등'의 공통적으로 사용하는 기능이 있는데,
- WSGI 자체는 서버나 프레임워크 자체가 아니라 해당 기능들을 매번 개발해야 한다.
-> 따라서, 이러한 기능들을 구현해 확장할 수 있도록 한 것이 WSGI Middleware 이고,
-> WSGI Middleware 는 Web Application 실행 전후 공통적으로 사용하는 기능들을 추가해주는 것이다.
-> 즉, 그 자체로 WSGI Application 이라고 할 수 있다.
(2) WSGI Middleware 예시
- Gunicorn, uWSGI, Werkzeug, mod-wsgie
(3) 기능
1) 환경변수가 바뀌면, 타겟 url 에 따라 Request 경로 지정
2) 같은 프로세스에서, 여러 애플리케이션과 프레임워크가 실행되게 함.
3) XLST 스타일 시트를 적용하는 것과 같이 전처리
- WSGI request 를 처리하려면,
서버 단에서 ---- 환경 정보 & 콜백 함수를 ----> 애플리케이션 단에 제공해야 하고,
애플리케이션은 ---- 그 요청을 처리하고 ---- 미리 제공된 콜백 함수를 통해 ----> 서버 단에 응답 하는데,
-> 이때, WSGI Middleware 가 서버와 애플리케이션 사이를 보충해준다.
- 서버 관점에서는 -> 애플리케이션으로,
- 애플리케이션 관점에서는 -> 서버로 행동하는 것이다.
HTTP request --> Web Server --> WSGI Server(Middleware) --> Django(WSGI 지원) |
Gunicorn
1. gunicorn 개념
- gunicorn 은 Python WSGI HTTP Server 로,
- 위에서 언급한 것과 같이 WSGI Middleware 의 기능을 가진 라이브러리이다.
2. gunicorn 특징
1) WSGI, Web2py, Django 지원
2) Automatic worker process management
3) 간단한 Python Configuration
4) Multi worker Configuration
5) 확장성(Extensibility) 을 위한 다양한 Server hook
6) python2.6+ 와 python3.2+ 과 호환 가능
3. Django에서 사용
- Django 에서 startproject 를 통해 생성한 프로젝트의 구조로는, 아래와 같은데
- wsgi.py 에서 application = get_wsgi_application() 을 통해 wsgi handler 를 가져온다.
- wsgi handler 에서는 middleware 등을 처리하고,
- WSGI Server 에서는 설정을 읽어 application 의 경로를 가져온다.
- Django의 기본 명령어 runserver 는 WSGI APPLICATION 설정에서 경로를 가져온다.
참고
- https://velog.io/@han0707/WSGI%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C
- https://jay-ji.tistory.com/66
* 이후 추가 : Web Server 와 WAS(Web Application Server) 차이 정리
- 참고 : https://devmoony.tistory.com/113
'Programming > Web' 카테고리의 다른 글
[Web/DL] Django 기반의 자연어 처리 서비스 구현 (0) | 2022.02.22 |
---|---|
[Web] JPA와 Hibernate, Spring Data JPA (0) | 2022.01.18 |
[Web] application.properties / application.yml (0) | 2022.01.18 |
[JavaScript] 동기와 비동기 / blocking과 Non-blocking (0) | 2022.01.17 |