[Python] 웹서버, WAS, 파이썬에서 웹서비스 구성
in Development on Python
나는 백엔드가 아니여서 그런가 너무 용어들이 헷갈린다. 친한동생이 잘 설명해줘 서 까먹기전에 정리하자.
영상 정리
혹시 이해가 안되면 다시 영상 보기.
- Web Server
- 인터넷을 기반으로 클라이언트에게 웹서비스를 제공하는 컴퓨터
- Web Application Server
- 웹 애플리케이션과 서버 환경을 만들어 동작시키는 기능을 제공하는 소프트웨어 프레임워크
- 웹 에플리케이션을 실행시켜 필요한 기능을 수행하고 그 결과를 웹 서버에게 전달
좀 더 자세하게 정리
- 기본(그냥 장고로 만들고 runserver해버렸을 때)
- 클라이언트 <—> 웹 어플리케이션 서버(django로 만들어진 web application)
- 기본 장고로 앱을 만들어서 돌리면 기본 WSGI가 앱을 사용가능하게(callable) 만듬
- 단일 쓰레드로 대용량 처리가 불가능, 웹어플리케이션이 전방에 나와있어 보안에 취약
- 웹서버와 WSGI 웹 어플리케이션 서버 선택이 필요
- nginx, uwsgi/gunicorn
- 신경 쓴 형태
- 클라이언트 <—> nginx 웹 서버가 돌아감 <—-> gunicorn로 실행된 웹 어플리케이션 서버(내부 앱은 django로 만들어짐)
- 1) 클라이언트는 아파치나 nginx로 만들어진 웹서버에 요청을 한다.
- 2) 그 웹서버는 적당히 잘 분배하여 웹어플리케이션 서버에 다시 요청을 한다.
- 3) 토네이도 또는 gunicorn으로 돌아가고 있는 웹 어플리케이션은 장고, 플라스크로 만들어짐.
- 웹 서버(리버스 프록시 서버) ex. 아파치, nginx
- 클라이언트 — 요청 —> 리버스 프록시 —– 요청—–> 내부 서버
- 클라이언트 <— 응답 — 리버스 프록시 <—– 응답—– 내부 서버
- 다이렉트로 안하고 이런식으로 하는 이유는 보안 때문이다. 일종의 버퍼라고 생각하면 됨
- 웹 어플리케이션 서버가 최전방에 있으면 털릴 위험이 증가 하기 때문이다. 또한 로드 밸런싱, 정적 파일 제공 등에 사용
- WSGI 웹 어플리케이션 서버 ex. 토네이도, uwsgi, gunicorn, 톰캣
- 실제 클라이언트 호출에 대응하여 결과물을 내놓는 곳
- 웹 어플리케이션은 돌리는 녀석
- WSGI는 웹 서버와 웹 어플리케이션을 연결하는 다리
- 이게 왜 필요한가??
- 1) wsgi server는 많은 request들을 다룰 수 있도록 설계되었다. framework들은 스스로 수천개의 request들을 실행하고 최고의 방법으로 처리할 수 있도록 설계되어있지 않다.
- 2) 개발 효율을 증가시킨다.
- 3) 유연한 형태를 손대지 않고 만들어진다.
- WSGI 웹 어플리케이션
- 웹 어플리케이션 서버 내에서 돌아가는 애
- 이는 Django, flask, pyramids 등과 같은 웹어플리케이션 프레임워크로 만들어진 부분을 의미한다. 요청에 따라 함수를 실행하고 응답을 내어주는 역할이다.
출처:웹 서비스 구성 형태(파이썬 기준) 보고 정리