WebServer를 공부하며 알게 된 흥미로운 사실이 있다.
실제 배포환경에선 지금까지 내가 친python manage runserver
로 서버를 열면 안된다. 라는 것이다 .
아래는 Django 공식문서에 runserver에 대한 내용중 하나이다.
보안상 문제와 여러가지 문제로 실제 배포환경에서 runserver를 사용하면 안된다고 한다. Django는 Web Framework를 만들지 Web Server를 만드는게 아니기 때문에 production환경을 처리할 수 없다고 한다.
- DO NOT USE THIS SERVER IN A PRODUCTION SETTING. It has not gone through security audits or performance tests.
https://docs.djangoproject.com/ko/4.0/ref/django-admin/#django-admin-runserver
이전 포스트에서 Django는 WAS라고 했다.
나는 Client와 WAS(Web Application Server)를 잇기 위해 WS(Web Server)를 써야 한다고도 했다. 그리고 Nginx를 공부하며 WSGI(Web Server Gateway Interface)의 존재를 알게 되었고 wsgi를 이용하여 WAS와 WS를 연결해야 한다는 것을 알았다.
Web Server Gateway Interface라는 이름에서 유추 할 수 있듯 서버 관문 인터페이스이고, 'WS'와 'WAS'간의 연동 규격이다.
*CGI(Common Gateway Interface) : 'WS'와 'Process'간의 연동 규격
클라이언트 측에서 요청이 전달되면 웹 서버가 각각 CGI프로그램을 직접 실행하고 호출한다(표준 응답, 표준 출력 형태로).
단점 : 요청이 하나가 올 때마다 플로세스가 하나씩 생성되기 때문에 치명적
ASGI(Asynchronous Server Gateway Interface)는 'WS'와 'WAS'간의 동기, 비동기처리를 지원하는 연동 규격이다.
동기식 응답처리 방식만 가능한 WSGI의 단점을 보완해 생겨났다.
종류 -> Uvicorn,Hypercorn 등
Client <-> WS<-> WSGI <-> WAS
통신순서는 위 박스와 같다.
이번 주말부로 uwsgi, nginx를 이용하여 배포를 성공했다.
(100% 성공 아님... 리버스 프록시, SSL 같은 여러가지 추가적인 기능은 사용하지 않았다 ㅠ)
이를 통해 내가 알던 runserver는 실제 서비스에서 사용해선 절대 안된다고 알게 되었고, 백엔드의 전체적인 흐름에 한 귀퉁이를 알면서 더욱 재미가 있어지고 있다!!