Nginx
, 이름 부터 생소한 이 친구를 알아 보기 전에, 조금 더 익숙한 친구들로 이야기를 시작해보고자 합니다.
Node.JS 는 TCP/IP 포트를 점유하기 위한 내장 모듈로서 http
를 선택해서 사용하고 있습니다. 해당 모듈이 가지고 있는 메서드인 createServer 를 통해서 간단한 서버를 구현할 수도 있습니다.
Node.JS 공식 API 문서 - http.createServer
http.createServer([options], [, requestHandler]);
또한 Java 와 같이 내장 모듈을 가지고 있지 않은 경우에는 Apache Tomcat 과 같은 외부 소프트웨어 과 협력해서 서버를 구축하기도 합니다.
Nginx 는 이런 친구들처럼 특정한 TCP/IP 포트를 점유하여, 요청을 listen
하고 설정된 행동을 하도록 만들어줄 수 있습니다.
그런데 왜 Nginx 를 정상적으로 작동하고 있는 서버와 함께 운영하는 것일까요? 전 이부분이 너무 궁금해서 자세히 들어가 보고자 했습니다.
Nginx 에 대해서 검색을 하면 제일 먼저 공식 사이트가 나오게 됩니다.
2 번째를 제외하고는 전부 생소한 단어들이라서 너무나 낯설었습니다. 그래서 하나하나 조금 더 디테일하게 이론을 짚어보도록 하겠습니다.
일반적으로 사용자, 요청자
를 클라이언트 라고 부르며, 공급자, 응답자
를 서버라고 부릅니다.
두 친구들을 일정한 양식 의 문서를 통해서 교신을 나누고 있을 것입니다. 클라이언트가 보내는 문서가 Request
이며, 이에 대해서 서버가 반환하는 문서가 Response
입니다.
아래 그림을 보면 더욱 쉽게 이해할 수 있을 것입니다.
프록시 서버는 클라이언트 와 서버 사이에 존재하며 Gateway
, 일종의 통로 역할을 해주는 서버입니다.
아래 그림을 보면 더욱 쉽게 이해할 수 있을 것입니다.
이러한 프록시 서버는 특정 목적 을 수행하기 위해서 존재하며 다음과 같은 예시를 찾아습니다.
이러한 프록시 서버는 제품 단위에서 다음과 같은 목적을 수행할 수 있습니다.
이러한 Proxy Server 는 존재하는 위치에 따라 다음과 같이 구성 됩니다.
Gist - unchaptered/Proxy.md
TStory - [네트워크] 프록시 서버란? 원리와 사용 목적
FORTINET - What is Proxy? How does it work?
포워드 프록시 서버는 인터넷 접속
전에 경유하게 만들어 놓은 Proxy Server 입니다.
일종의 인트라넷 처럼 격리된 구역에서 높은 수준의 보안 상태를 유지할 수 있습니다.
하지만, 인트라넷 과는 달리 인터넷을 사용할 수 있다는 점이 다릅니다.
이러한 프록시 서버는 제품 단계에서 다음과 같은 목적을 수행할 수 있습니다.
리버스 프록시 서버는 인터넷
을 통해서 넘어온 요청이 Server 에 도달 하기 전에 경유 하도록 만들어 놓은 Proxy Server 입니다.
리버스 프록시 서버는 아래와 같이 다양한 프로토콜에 Gateway
로서 간섭할 수 있습니다.
해당 프로토콜 들에게 제공할 수 있는 옵션을 간단하게 정리하면 다음과 같습니다.
그 외에도 다양한 옵션들이 제공되고 있으며 자세한 내용은 공식 문서 를 참고해 주기실 바랍니다.
마지막으로, Advanced LOad Balancer 에 대해서 알아보고자 합니다.
로드 밸런서에 대해서 검색을 해보면 다음과 같은 내용이 나옵니다.
컴퓨팅에서 부하 분산은 전체 처리를보다 효율적으로 만들기 위해 일련의 작업을 리소스 (컴퓨팅 단위)에 분산시키는 프로세스를 말합니다
Wikipidea - Load balancing (computing)
결국 로드 밸런서라는 친구는 1 개의 서비스
에 걸릴 부하들을 N 개의 서버
로 일련의 프로세스를 효율적으로 만드는 것을 의미합니다.
이러한 Load Balancer 는 Nginx
와 AWS Elastic Load Balancer
를 이용하는 방법이 있는데 그 차이는 다음과 같습니다.
Nginx
- 하나의 PC 에서 N 개의 서버를 실행 및 관리AWS Elastic Load Balancer
- 여러 개의 PC 를 연결 해서 실행 및 관리