- 서버에 대한 지식! 매우 중요! -
웹 서버 :
소프트웨어적으로는 클라이언트로부터 HTTP 요청을 받고 HTML 등 웹 페이지를 반환하는 컴퓨터 프로그램
하드웨어적으로는 위 기능을 제공하는 컴퓨터 프로그램을 실행하는 컴퓨터!
웹 어플리케이션 서버 (WAS, Web Application Server) :
클라이언트에게 동적인 컨텐츠를 제공하는 서버
Web Server + CGI의 형식. 웹서버가 따로 있고 CGI가웹 어플리케이션에서 직접 실행
- CGI와 WAS의 차이점
CGI는 요청이 올 때마다 '프로세스를 실행'시켜 동적 컨텐츠를 생성
WAS는 '스레드를 실행'시켜 동적 컨텐츠 생성
=> WAS는 CGI보다 메모리를 덜 잡아먹게 되고, 속도도 더 빠르다.
Server Gateway Interface :
어플리케이션과 웹 서버의 중간에서 번역해주는 python framework 전용 미들웨어!
기존 Tomcat, Apache등의 검증된 Java기반 미들웨어를 python에서 활용하기위해 만들어졌다.
💡 WSGI, ASGI, CGI의 개념을 설명하시오
WSGI (Web Server Gateway Interface)
- Python 기반으로 작성된 웹 응용프로그램 간의 표준 인터페이스로 동기적 통신을 지원한다.
CGI디자인 패턴에 기반해 업그레이드된 인터페이스!
- Python에서 웹 서버와 웹 어플리케이션의 표준화된 동기적 통신을 지원, 호환성과 유연성이 높다
Nginx, Apache와 같은 서버들은 django, flask로 작성한 web application을 이해하지 못한다
이 때 WSGI를 이용해 웹 서버와 웹 어플리케이션이 서로 통신할 수 있도록 한다
- WSGI서버는 단독으로도 사용 가능하지만 한계가 있어 Nginx와 함께 이용되곤 한다
1) DDos등 외부 공격에 취약함
2) HTTPS 처리 불가
3) Static파일 전송 효율성
4) 다수 연결을 효과적으로 처리하기 어려움
- 대표적으로 Gunicorn, uWSGI가 있다
*** 동기적이란 무엇인가:
동기적(Synchronous)
동기적 작업은 순서대로 진행되는것, 위에서 아래로 코드가 순서대로 실행이 되는 것을 동기적 처리라고 한다
지금 진행하는 작업이 끝이나면 다른 작업으로 넘어가고 그 작업이 끝이 나면 다른 작업으로 넘어가는 방식이 동기적 처리 방식
ASGI (Asynchronous Server Gateway Interface)
- ASGI는 Python의 비동기 웹 애플리케이션과 웹 서버 간의 표준 인터페이스
기존 WSGI의 한계를 극복하기 위해 개발되었다. 대용량 트래픽 처리 등..
- 비동기 요청 처리를 지원하여 동시성이 높고, 최신 웹 기술과의 호환성이 높다
- 대표적으로 uvicorn, 웹소켓, Daphne가 있다
*** 비동기적
비동기적(Asynchronous)
작업이 한 번에 여러개가 진행되는 것, 특정 코드를 수행하는 와중에도 다음 작업을 진행한다.
비동기적 처리는 주로 api요청, 파일읽기, 암호화, 복호화 등에서 자주 사용된다.
비동기적 처리를 사용하는데 주로 사용되는 함수와 문법으로는 callback 함수와 Promise, async/await 문법 등이 존재한다.
CGI (Common Gateway Interface).
웹 서버에서 어플리케이션을 작동시키기 위한 인터페이스
정적으로 동작하는 웹 서버를 동적으로 기능하기 하도록 위해 사용한다
request가 들어오면 CGI가 외부 프로그램과 연결하여 해당 프로그램이 요청을 처리하도록 한다
들어온 요청을 연결해주는 역할만 하며, 웹 서버가 외부 프로그램을 직접 실행한다
요청 -> 웹서버(nginx, apache) -> (웹서버가 직접 실행)프로그램
👎단점
- 요청이 들어올때마다 프로그램을 부르기때문에 서버메모리를 많이 잡아먹는다
- 성능제약으로 인해 요즘에는 거의 사용되지 않는다
[참고] :
https://medium.com/svelte-seoul/서버-web-server-cgi-was-wsgi-에-대한-이해-2ab0f9bfabd4
https://velog.io/@jeong-god/WSGI-CGI-ASGI란
💡 Django 프로젝트를 배포할 때 사용되는 Gunicorn이 무엇이며, WSGI를 왜 사용해야 하는지 설명하시오
Gunicorn은 python 규약에 맞게 개발된 WSGI서버로 서버와 Django 애플리케이션사이의 통신을 담당하며,
그 자체로 서버의 역할을 수행할 수도 있습니다.
WSGI 서버는 웹서버와 웹 어플리케이션 간의 표준화된 통신을 지원하고,
호환성과 유연성이 높으며 배포를 간편하게 진행 할 수 있어 사용해야합니다.
- 호환성
WSGI를 지원하는 어플리케이션은 다양한 WSGI 호환 웹 서버에서 동작, WSGI 지원 웹서버는 WSGI호환 웹 어플리케이션을 호스팅 - 유연성
독립적인 웹 애플리케이션과 서버 개발 및 변경
요청 -> 웹서버(nginx, apache) -> WSGI 서버(gunicorn, uWSGI등) -> WSGI를 지원하는 웹 어플리케이션(Flask, Django등)
👍 Gunicorn의 장점
- 다양한 웹 서버와 호환 : Gunicorn은 WSGI를 구현하므로, 다양한 웹 서버(예: Nginx, Apache)와 호환
- 프로세스 관리: Gunicorn은 Unix에서 작동하기 때문에 프로세스 생성 및 관리, 다중 프로세스 처리를 지원
이를 통해 여러 클라이언트로부터 동시에 요청을 처리 - 설정 및 사용이 간편: Gunicorn은 설정이 간단하고 배포가 용이하여 많은 개발자가 선호하는 솔루션
** nginx만을 서버로 사용할 경우, nginx는 정적 파일인 html, xml, 미디어만 서빙 할 수 있고 python 프로그램을 실행하지 못합니다.
따라서 python 실행기 역할을 gunicorn이 맡아 중개자로써 Python어플리케이션을 실행하게 됩니다.
= nginx가 없어도 돌아갈 수는 있지만, 좀 더 복잡한 웹서버 구현시 필수적으로 필요한 여러가지 기능들을 nginx가 제공하므로 같이 쓰는 것!
💡 Django 프로젝트를 배포할 때 사용되는 NGINX가 무엇이며, 웹서버를 왜 사용해야 하는지 설명하시오
nginx란 정적 페이지 요청을 처리하고 웹 서버의 구축을 도와주는 소프트웨어로,
비동기 이벤트를 기반으로 하는 처리방식으로 응답이 빠르고 트래픽 처리에 유리합니다.
웹서버를 사용하는 이유 :
사용자가 많아질 수록 단순한 정적인 콘텐츠에 대한 요청을 따로 처리해주면 동적인 컨텐츠를 처리하는 것에 집중하기 좋다.
웹 서버가 웹페이지를 랜더링 후 요청을 받아 웹 어플리케이션 서버(WAS)에 전달하면, 웹 어플리케이션 서버는 동적인 컨텐츠에 대해 집중하여, 적은 비용으로 더 많은 요청을 처리할 수 있다.
Gunicorn만으로 서버를 구축하면 정적인 페이지를 관리할 수 없습니다.
Nginx를 통해 정적인 페이지를 관리하고 프록시 서버를 구축해 다양한 보안 이점을 얻을 수 있습니다.
(로드 밸런싱 기능, DDos 공격 완화, 웹서버의 ssl인증 등)
'취대넓얕' 카테고리의 다른 글
[기술면접] 17일차 문답 | Django 기본기 (0) | 2023.08.10 |
---|---|
[기술면접] 16일차 문답 | JWT, 쿠키 세션 토큰 (0) | 2023.08.09 |
[기술면접] 14일차 문답 | Django MVT, 프로세스 (0) | 2023.08.07 |
[기술면접] 13일차 문답 | 배포 시 주의점 (0) | 2023.08.04 |
[기술면접] 12일차 문답 | sqlite, django DB스택 (0) | 2023.08.03 |