서문
이전의 웹 토이 프로젝트들을 배포할 때는 AWS의 EB서비스를 이용했다. EB의 장점은 간단하다는 것이다. 내가 만든 프로젝트 그대로 zip파일로 만들어서 EB applicatioin에 올리면 알아서 해준다. 하지만 AWS EB의 경우 서버 환경을 내가 제어할 수 없기에 내가 만든 애플리케이션에 최적의 배포 환경을 제공할 수가 없다. 그래서 백엔드 개발자로서 서버에 대한 깊은 공부를 위해 먼저 Nginx에 대해 알아보았다.
웹 서버
Nginx는 웹 서버 중 하나이다. 웹 서버란 웹 브라우저와 같은 클라이언트로부터 HTTP 요청을 받아들이고, HTML 문서와 같은 웹 페이지를 반환하는 컴퓨터 프로그램이다. (물론 이를 담당하는 컴퓨터를 말하기도 한다.)
여기서 한가지 집고 넘어갈 것이 있는데 Django는 웹 서버가 아니다! 웹 서버의 역할은 위에서 언급한 웹 서버의 정의처럼 요청을 받아들이고 결과를 반환하는 것이다. Django는 WAS에서 로직을 담당할 뿐 웹 서버 자체로 볼 수 없다. 하지만 Django는 스스로 개발서버를 갖고 있다. 개발에 한해서 사용하는 python manage.py runserver 명령어로 개발서버를 실행할 수 있다.(Django의 장점 중 하나!)
WAS
우선 웹 서버에 대해 더 깊게 이야기 하기 전에 Web Application Server에 대해 잠깐 이야기하고 넘어가자.
과거에는 웹페이지가 지금처럼 화려하지 않았다. 단순한 텍스트나 사진 몇 개 정도가 전부인 웹페이지를 처리하는데 큰 비용이 들지 않는다. 하지만 지금의 웹 페이지는 pc, 모바일 등 다양한 환경에서 많은 유저들이 다양한 동작을 실행한다. 따라서 이전과는 비교가 되지 않을 정도로 많은 처리가 필요했고 이를 해결하기 위해 웹 서버를 웹 서버와 WAS로 분리하여 웹 처리에 효율을 높였다.
결과적으로 이 둘은 다음과 같이 서로의 역할을 분리했다.
- 웹 서버
- 정적 페이지를 웹 클라이언트에게 제공
- 캐시 기능, 프록시 기능 등의 추가적인 기능도 처리
- 다수의 클라이언트 수의 제한 및 처리 프로세스의 관리
- 요청 및 응답에 관한 로그의 기록
- 안정성확보를 위한 인증 제어 및 암호화 처리 등
- WAS:
- 클라이언트 요청에 대해 동적인 처리가 이뤄진 후 응답(ex: 로그인)
Nginx
Nginx가 웹 서버이고 그 역할에 대해서 알아보았다. 그렇다면 다른 웹 서버도 있는데 왜 Nginx를 많이 사용하는 것일까?
Nginx 장점
1. 빠르다.
기존에 가장 많이 쓰이는 Apache와 비교하면 다음과 같다.
메모리 사용량은 적을수록 좋다. 위의 그래프르 보면 Nginx가 Apache보다 훨씬 적은 크기의 메모리를 사용하고 또 접속량에 따른 메모리 사용량도 큰 변화가 없다.
초당 처리량은 클수록 좋다. 위의 그래프를 보면 Nginx가 Apache보다 같은 시간 상에서 더 많은 처리량을 보여준다.
참고로 지금은 Apache보다 Nginx를 더 많이 사용하는 추세이다.(2021.07 기준)
2. 리버스 프록시 사용 가능
리버스 프록시는 다양한 기능을 제공한다. 잛게만 언급하면 다음과 같다.
- 로드 밸런싱을 사용하여 여러 대의 분산된 서버의 트래픽을 분산한다.
- 캐싱을 사용하여 서버의 자원 사용을 줄인다.
- 서버 또는 클라이언트의 IP를 숨겨주어 보안을 높여준다.
3. SSL 지원
Nginx는 http로 응답이 들어오면 이를 https로 전환해줄 수 있다. 이를 통해 웨 보안을 한층 더 높여준다.
4. 웹페이지 접근 인증
사용자가 웹 페이지에 접근했을 때 올바른 사용자인지 확인하는 작업을 WAS가 아닌 Nginx가 대신 해줄 수 있다.
5. 압축
클라이언트가 보내는 요청이 TEXT일 경우에 해당 데이터를 압축하여 보내줄 수 있다.
6. 비동기 처리
비동기 처리는 위에서 비교한 apache와의 성능 차이를 이끌어낸 기능이라 할 수 있다.
apache의 경우
클라이언트의 요청에 따라 각각 하나의 프로세스를 할당받는다. 이러한 방식은 많은 요청에을 동시에 해결하지 못하게 된다.
Nginx의 경우
이벤트 루프방식을 통해 비동기 처리가 가능하게 해준다.이를 통해 많은 트래픽을 동시에 처리할 수 있다.
사용법
나중에 직접 토이프로젝트에 적용한 걸 정리해서 올릴 계획이다.
출처
https://www.youtube.com/watch?v=ZJpT-Wa-pZ8&t=71s
http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9791162241042
파이썬 웹 프로그래밍 - 교보문고
Django(장고)로 배우는 쉽고 빠른 웹 개발 | 파이썬에 한계란 없다! Django를 통해 웹 프로그래밍까지 접수하자이제는 파이썬 웹 개발이다파이썬이라면 웹 애플리케이션 개발도 쉽고 빠르게 끝낼 수
www.kyobobook.co.kr
https://help.dreamhost.com/hc/en-us/articles/215945987-Web-server-performance-comparison
Web server performance comparison
Overview Over the years, a myriad of web servers have been written. Apache, being one of the oldest, is the most widely used today. However, it was implemented with a scaling mechanism that can be...
help.dreamhost.com
https://www.educative.io/edpresso/web-server-vs-application-server
Web server vs. Application server
Web server vs. Application server
www.educative.io
'개발 공부 > CS' 카테고리의 다른 글
인터넷 (0) | 2021.08.18 |
---|---|
Internet protocol suite (TCP/IP updated) (0) | 2021.07.21 |
Heroku VS AWS EC2 뭐가 다른 걸까? (0) | 2021.07.19 |
Web socket (0) | 2021.06.29 |
Docker (0) | 2021.06.23 |