728x90
반응형
- 3줄 요약
- 만들어놓은 것 그대로 제공하는 리소스를 정적 리소스라 하고, 데이터 처리에 따라 값이 다를 수 있는 리소스를 동적 리소스라 한다.
- 웹 서버는 정적 리소스 처리를 담당하기 때문에 동적 리소스를 처리하기 위해 웹 어플리케이션을 사용한다.
- CGI는 웹 서버와 웹 어플리케이션 서버 간 통신을 위한 공통의 인터페이스이고, 매 요청 때마다 프로세스를 생성해야 한다는 CGI의 단점을 보완한 게 WSGI, 비동기에 취약하다는 WSGI의 단점을 보완한 게 ASGI이다.
- 정적 리소스 (Static Resource) vs. 동적 리소스 (Dynamic Resource)
- 정적 리소스 (Static Resource)
- 만들어놓은 것 그대로 제공하는 리소스
- ex) 파일이나 이미지, HTML 페이지 등
- 동적 리소스 (Dynamic Resource)
- 상호작용을 통한 데이터 처리가 필요한 리소스
- 값이 그때그때 다를 수 있는 리소스
- 대표적으로 데이터베이스의 처리가 필요한 경우 ‘동적’이라는 말이 붙는다.
- → 서버가 사용자의 '요청(Request)'에 따라 데이터를 가공처리한 뒤에 생성되어진 웹 페이지를 보여주게 된다.
- 정적 리소스 (Static Resource)
- 웹 서버(Web Server) vs 웹 어플리케이션 서버(Web Application Server)
- Web Server 웹 서버
- 정적인 리소스 요청을 처리하는 프로그램으로, 웹 서버의 종류에는 아파치(Apach)와 Nginx 등이 있다.
- 동적 컨텐츠를 처리하기 위해 데이터 베이스 쿼리문 처리와 같은 동적 요청이 들어오면 웹 어플리케이션에 요청을 넣는다.
- Web Application 웹 어플리케이션 → 보통 WAS라고 부른다.
- 웹 서버로부터 오는 동적인 요청을 처리하는 서버로, 로직을 수행한 뒤 웹 서버에 결과를 돌려준다.
- 기능
- 프로그램 실행 환경과 데이터베이스 접속 기능을 제공
- 여러 개의 트랜잭션을 관리
- 업무를 처리하는 비즈니스 로직 수행
- 종류에는 아파치 톰캣, 제우스, 제티(Jetty), 레진(Resin) 등이 있다.
- 예시 : nginx가 웹 서버가 django가 백엔드에서 돌린 웹애플리케이션 서버에 해당한다
- Web Server 웹 서버
- 💡 Web Server 는 다소 광범위한 용어라서 Hardware 로서의 의미와 Software 로서의 의미를 함께 가지고 있어 여기에서는 Software 로서의 의미에 집중한다.
- CGI / WSGi / ASGI 개념 → 참고자료https://kangbk0120.github.io/articles/2022-02/cgi-wcgi-asgi
- CGI (Common Gateway Interface)
- 웹 서버가 동적인 리소스를 처리하기 위해 웹 어플리케이션과 소통할 때 서버 간, 그리고 언어 간 요청을 공통의 형태로(→Common Gateway Interface) 처리하기 위해 만들어진 인터페이스
- → 즉 한마디로 웹 서버와 웹 어플리케이션이 소통할 수 있는 인터페이스
- 단점
- 요청이 들어올 때마다 애플리케이션 프로세스를 다시 생성해 실행해야 한다.
- C와 같은 컴파일 언어보다 파이썬과 같은 스크립트 언어에서 실행에 더 많은 시간이 필요하기 때문에 더욱 단점이 두드러진다.
- 동작 원리
- Web Server 가 Client 로 부터 HTTP Request 를 받는다.
- Web Server 는 Request 에 대한 정보(Method, Url, Parameters, ...)를 환 경숭수오와 tanad rddIIut 을 통해 전달하면서 Script 를 실행한다.
- Script 는 비즈니스 로직을 수행하고 Standard Output 으로 결과를 Web Server 에게 전달한다.
- Web Server 는 이를 다시 Client 에게 전달한다.
- WSGI (Web Server Gateway Interface)
- 이름과 달리 범용적이라기보다는 파이썬에서 사용되는 개념
- CGI의 단점을 보완하기 위해 고안되었다.
- CGI가 환경 변수나 STDIN 등으로 처리했지만 WSGI에서는 웹 서버가 요청에 대한 정보를 어플리케이션에 전달할 때 Callable object(호출 가능한 객체), 즉 함수나 객체로 처리한다.
- → 서버에서 Callable object를 통해서 요청에 대한 정보와 Callback 함수를 전달하면 애플리케이션은 이 요청을 처리하고 Callback 함수를 실행한다.
- 하나의 동기적인 callable이 요청을 받아 응답을 리턴하는 방식으로, 비동기 요청 처리에 취약하다.
- WSGI compatible하다 : 앞서 설명한 인터페이스를 구현하는 서버나 어플리케이션을 설명하는 용어
- WSGI application : WSGi 어플리케이션 지칭
- WSGI Middleware : 중간에서 인증이나 쿠키 등을 관리하는 역할을 하며, WSGI application의 일종으로, gunicorn을 포함한다.
- WSGI Middleware
- 인증, 라우팅, 세션, 쿠키, 에러 페이지 보여주기 등 공통적으로 필요한 기능들을 웹 어플리케이션 실행 전후에 추가해주는 역할을 하는 WSGI 어플리케이션의 일종.
- gunicorn이 WSGI Middleware 기능을 가진 라이브러리 중 하나이다.
- gunicorn은 WSGI Middleware의 기능 뿐 아니라 그 자체로도 웹 서버의 역할을 할 수도 있다. 그래서 WSGI Server 나 Stand alone WSGI Container 라고 불리기도 한다.
- Nginx 는 주로 Buffering, Reverse Proxying, Load Balancing 등의 기능을 위해 Gunicorn 앞단에 배치하고, Gunicorn 은 Django 로 작성한 Web Application 에 HTTP 요청을 전달해주는 역할의 WSGI HTTP Server 로서 사용하는 것이다.
- Gunicorn 을 사용할 땐 worker process 의 개수와 worker class(async 방식인 Gevent, Tornado, ...)를 설정하여 요청 처리 성능을 높일 수 있다.
- ASGI
- 비동기에 취약한 WSGi를 보완하기 위해 고안되었다. ⇒ WSGI + 비동기
- → WSGI는 하나의 동기적인 callable이 요청을 받아 응답을 리턴하는 방식으로, 길게 유지돼야 하는 연결(ex. long-poll HTTP나 Websocket)에는 적합 X
- WSGI에 대한 호환성은 유지하면서 비동기적인 요청까지 처리할 수 있는 인터페이스
- ASGI 서버로는 주로 uvicorn 등을 많이 사용한다.
- CGI (Common Gateway Interface)
- 참고자료
반응형
'Programming > TIL and WIL' 카테고리의 다른 글
| CORS(Cross-Origin Resource Sharing) (0) | 2023.02.14 |
|---|---|
| HTTPS의 개념과 원리 (0) | 2023.02.11 |
| 프록시 - 포워드 프록시, 리버스 프록시 (0) | 2023.02.09 |
| 스키마, 인덱스, 수직적 확장과 수평적 확장 (0) | 2023.02.08 |
| 파이썬: 데코레이터, 가변 객체와 불변 객체, set 자료형 vs. dict 자료형, list 자료형 vs. tuple 자료형, assert와 raise (0) | 2023.02.07 |