[키워드]
Django WSGI
Web Server
Web Application Server
Django deploy
Django runserver deploy
[질문리스트]
- 웹 서버란 무엇일까요?
- 웹 어플리케이션 서버란 무엇일까요?
Django
에서 제공하는Runserver
로 배포를 하면 안되는 이유는?
🌸목표
배포에 대한 깊이있는 이해
Web Server
)란?웹 서버는 소프트웨어와 하드웨어로 구분된다.
인터넷을 기반으로 클라이언트로부터
HTTP
요청을 받아들이고, 정적 콘텐츠를 반환하는 프로그램
✔ 정적 콘텐츠란 누가 언제 서버에 요청하더라도 동일하게 내용을 보여주는 것을 말한다.
HTML
문서, CSS
, JavsScript
, 이미지 파일 등 서버에 미리 저장되어 있어, 즉시 응답이 가능한 콘텐츠를 말한다.
위에서 언급한 기능들을 제공하는 컴퓨터 프로그램을 실행하는 컴퓨터
웹 애플리케이션 서버(
Web Application Server
)는 웹 서버 + 웹 컨테이너로,
클라이언트가 URL을 통해 서버에 페이지를 요청하면 그 요청을 받아 동적 콘텐츠를 제공하는 서버이다.
✔ 웹 컨테이너(Web Container
)는 동적인 데이터들을 처리하여 정적인 페이지로 생성해주는 소프트웨어 모듈이다. 수행한 결과를 다시 웹 서버로 보내준다.
✔ 동적 콘텐츠란 누가, 언제, 어떻게 서버에 요청했는지에 따라 각각 다른 내용이 보여지는 콘텐츠를 말한다.
기기마다 조금씩 요소들의 위치가 바뀌는 것이나, 넷플릭스에서 기기마다 다른 영상을 추천해주는 것도 동적 콘텐츠이다.
✔ 위에서 언급한 웹 서버가 동적인 콘텐츠를 요청받으면, WAS
에게 해당 요청을 넘겨주고, WAS
에서 처리한 결과를 클라이언트에게 다시 보여주는 것이다!
WAS
WAS
는 동적 콘텐츠를 제공하는 것이 목적이지만, 정적 콘텐츠도 제공할 수 있다.
그러면 굳이 Web Server
를 사용하지 않고, WAS
만 사용해도 되지 않을까?
가능하기는 하지만, 이렇게 분리하는 이유가 있다.
WAS는 DB 조회 및 다양한 로직을 처리하기 때문에, 모든 요청을 처리하게 된다면 WAS가 감당하는 부담이 너무 커지게 된다. 그래서 정적 콘텐츠는 웹 서버에서 처리하도록 하는 것이다.
뿐만 아니라, WAS에는 실제 Web Application이 올라가 있어서 요청이 WAS로 바로 들어오면 보안 문제가 발생할 수 있다. 이를 막기 위해 웹 서버를 WAS 앞단에 배치해서 WAS 내부의 주요 설정 파일이나 리소스들을 보호할 수 있도록 한다.
WAS
연결 가능규모가 커지면 WAS 하나만으로는 버거울 수도 있다. 그래서 웹 서버에 WAS를 여러 개 연결하여 웹 서버로 들어오는 요청들을 적절하게 분배해주면, 안정적으로 서비스를 운영할 수 있게 된다.
Django
에서 제공하는 runserver
로 배포를 하면 안되는 이유는?django
를 이용하여 개발할 때,python manage.py runserver
를 통해 테스트를 한다.
하지만 이렇게 runserver
로 서버를 띄우는 것은 단지 테스트용일 뿐이며, 배포용은 아니라고 공식문서에도 나와있다.
프로덕션 세팅으로 서버를 사용하지 마라. 보안과 성능 테스트를 거치지 않았다. ~
대충 이런 내용이다.
정리하자면, runserver
의 성능은 매우 느리며, 보안 문제도 발생할 수 있기 때문에 하지 말라는 것이다.
우리는 이제 runserver
대신 서버를 실행시킬 것을 찾아야 한다. 이를 위해 WSGI
에 대해 알아보자.
WSGI
란?
WSGI(Web Server Gateway Interface)
는 웹 서버 소프트웨어와 파이썬으로 작성된 웹 응용 프로그램 간의 표준 인터페이스이다.
조금 더 쉽게 설명하자면, WSGI
란 python
으로 작성한 django
와 같은 웹 프레임워크를 웹 서버와 통신하도록 도와주기 위한 규칙이다.
WSGI
의 필요성그런데 이러한 WSGI
는 왜 필요한걸까?
일단 웹 서버는 python
코드를 이해하지 못하기 때문에 웹 서버와 웹 애플리케이션이 소통할 수 없다. 그 사이에서 통신할 수 있도록 WSGI
가 인터페이스 역할을 해주는 것이다.
아래 글을 참고하면 WSGI
를 이용하여 배포할 수 있다.
runserver
는 테스트용으로 만들어진 것이기 때문에 성능도 나쁘고, 사용하면 보안상의 문제도 발생할 수 있다. WSGI
를 사용하면 성능도 훨씬 빨라지니까 WSGI
를 사용하자!
https://charliecharlie.tistory.com/247
https://gyoogle.dev/blog/web-knowledge/Web%20Server%EC%99%80%20WAS%EC%9D%98%20%EC%B0%A8%EC%9D%B4.html
https://codechasseur.tistory.com/25
https://uiandwe.tistory.com/1268
https://dailyheumsi.tistory.com/19