Nginx 를 이해하기 위해 먼저 클라이언트, 웹서버, WAS, DB 의 개념을 짧게 정리하고 가자
클라이언트란 서비스를 이용하기 위해 네트워크에 요청을 보내는 주체이다
예를들어 웹페이지를 보기 위해 웹 브라우저를 실행하면 웹 브라우저가 클라이언트가 된다
웹 개발 영역에서 클라이언트라고 하면, 보통 크롬이나 파이어폭스를 말한다
웹 서버는 클라이언트의 요청에 따라 HTML, CSS, JS, 이미지 파일과 같은 정적 파일을 응답하여 제공하는 소프트웨어를 말한다
웹 서버는 HTTP 프로토콜을 사용해 클라이언트와 통신한다. 대표적인 웹서버로는 Nginx, Apache 가 존재한다
클라이언트의 요청에 대해 동적인 처리를 담당하는 영역
웹 서버와는 달리 애플리케이션 로직을 실행하도록 구성되어있다
회원가입 등의 API 를 처리하는 역할을 WAS 가 담당한다
참고로 Node.js 는 웹서버, WAS 둘 다로 사용된다고 한다
우리의 웹 서비스는 클라이언트 → 웹 서버 → WAS → DB 순으로 요청이 되고
DB → WAS → 웹 서버 → 클라이언트 순으로 응답이된다
WAS 부담을 줄여주기 위해 사용한다
보안 기능을 제공한다
웹 서버는 보안 기능을 제공하여 웹페이지에 대한 접근을 제어할 수 있는데, 예를들어 SSL/TLS 프로토콜을 사용해 데이터를 암호화하고, 엑세스 제어, 웹 방화벽 등의 기능을 사용하여 웹 사이트를 보호할 수 있다
높은 성능을 제공한다
웹 서버는 보통 비동기 처리 방식을 사용해 높은 성능을 제공한다. 예를들어 Nginx 는 이벤트기반, 멀티 프로세싱, 스레드 풀 등의 기술을 사용해 수천대의 클라이언트 요청을 동시에 처리할 수 있다
높은 성능과 적은 메모리 사용
리버스 프록시 사용이 가능
SSL 지원
SSL(Secure Socket Layers)는 웹 사이트와 사용자간의 통신을 암호화하고 보안을 유지하는데 사용되는 프로토콜
데이터 압축
비동기 처리
NGINX 는 HTTP 웹 서버로 활용되기도 하고, 리버스 프록시 서버 (Reverse proxy server)로 활용하여 WAS 서버의 부하를 줄일 수 있는 로드 밸런서로 활용된다
높은 성능과 안정성 그리고 현재 가장 많이 사용되고 있는 웹 서버
제목처럼 차세대 웹서버로 불리며, 동시접속 처리에 특화된 웹 서버 프로그램이다.
Apache 와 비교 했을때 더 빠르고 가볍고, 대규모 애플리케이션 처리에 적합하다
정적 파일 처리하는 HTTP 서버로서의 역할
응용프로그램 서버에 요청을 보내는 리버스 프록시(reverse proxy)로서의 역할
리버스 프록시(reverse proxy)란 외부 클라이언트에서 서버로 접근 시, 중간에서 중개자 역할을 하여 내부 서버(응용프로그램 서버)로 접근할 수 있도록 도와주는 서버
리버스 프록시를 활용했을 때 얻을 수 있는 장점은 다음과 같다.
프록시(Proxy)
인터넷 접속을 할 때 보안상의 문제로 직접 통신을 주고 받을 수 없을 때, 그 사이의 중계기로써 대리로 통신을 수행하는 기능을 프록시라고 한다.
이렇게 중계를 기능하는 것을 프록시 서버라고 부른다프록시의 종류
포워드 프록시
포워드 프록시는 클라이언트와 인터넷 그 사이에 있는 영역을 말한다
이를 사용하면 클라이언트의 IP주소가 웹 서버에 노출되지 않는다. 이렇게 함으로써 보안이 강화되고, 특정 URL 에 대한 접근을 제한할 수 있다. 이외에도 포워드 프록시를 사용하여 미디어 파일을 캐시하고 클라이언트에게 빠르게 제공할 수 있다
리버스 프록시
앞서 리버스 프록시가 로드밸런싱의 역할을 한다고 언급했는데 추가적으로
- 캐싱 서버의 역할을 할 수도 있다.
예를들어 클라이언트에서 이미지를 요청했을때 처음에는 서버에서 가져오지만 이 후 동일한 요청이 있을 경우에는 캐시 서버에서 가져와 클라이언트에게 전달된다. 이 때문에 사이트 속도가 빨라진다고 한다- 마지막으로 보안효과도 있다.
WAS가 데이터를 응답할 때는 기기의 명칭이나 주소 등 실제로는 민감한 정보들이 담겨있을 수 있다. 리버스 프록시는 이러한 정보들을 중간에서 숨겨줌으로써 보안을 높일 수가 있다.
끝으로 이러한 Nginx 를 다른 웹서버인 Apache 와 비교해보자
Nginx는 동작이 단순하고, 전달자 역할만 하기 때문에 동시접속 처리에 특화되어 있다.
아래는 Apache 의 동작과정이다. 그림에서 볼 수 있듯이 Apache 는 클라이언트로부터 받은 요청을 처리할 때 새로운 프로세스 또는 쓰레드를 생성하여 처리한다. 이 경우 요청마다 쓰레드가 생성되므로 접속하는 사용자가 많으면 그만큼 쓰레드가 생성되어 CPU와 메모리 자원의 소모가 커질 수밖에 없다.
현재 프로젝트로 진행한 잇츠 무비타임은 WAS 로만 작동되고 HTTP 프로토콜을 사용하고 있어서 보안을 강화하기 위해 HTTPS를 사용할 예정이고 추가적으로 로드밸런싱도 사용하기 위해서는 Nginx 를 도입해봐야겠다!!
유익한 자료 감사합니다.