⁉️ Ngnix ?!
높은 성능과 안정성을 갖춘 현재 가장 많이 사용되고 있는 웹서버.
Apache 같은 웹 서버와 비교하면 빠르고, 대규모 어플리케이션 처리에 적합하다는 장점이 있음.
Ngnix를 이해하기 위해 필요한 용어 4가지
-
클라이언트
- 클라이언트란 서비스를 이용하기 위해 네트워크를 통해 요청을 보내는 주체를 말함.
- 예를 들어, 인터넷에서 웹페이지를 보기 위해 웹 브라우저를 실행하면 웹 브라우저가 클라이언트가 된다.
- 웹 개발 영역에서 보통 클라이언트라 하면 크롬, 사파리, 익스플로러 등 웹 브라우저를 의미한다고 보면 됨.
-
웹 서버
- 웹 서버는 클라이언트의 요청에 따라 HTML, CSS, JS, 이미지 파일과 같은 정적 파일을 응답하여 제공하는 소프트웨어를 말함.
- 웹 서버는 HTTP 프로토콜을 사용하여 클라이언트와 통신한다.
- 대표적인 웹서버로는
Ngnix, Apache 등이 있음.
- 이 외에도 Microsoft IIS, LIGHTTPD 등 다양한 웹서버가 존재함.
-
WAS (Web Application Server)
- WAS는 클라이언트의 요청에 대해 동적인 처리를 담당하는 영역.
- 웹 서버와 달리 어플리케이션 로직을 실행할 수 있도록 구성되어 있다.
- 예를 들어 회원가입이나 로그인 등의 로직을 처리하는 영역이 WAS.
- 또한 데이터베이스 연동, 트랜젝션 관리, 보안, 로깅 등의 기능도 제공한다.
- 이를 통해 웹 어플리케이션의 안정성과 성능을 향상시키며, 개발자들은 어플리케이션 개발에 집중할 수 있다.
- 대표적인 WAS로는
Tomcat, JBoss, WebLogic 등이 있음.
- 웹 서버와 WAS는 역할의 차이가 있지만, 현업에서는 웹 서버로 퉁(?)쳐서 얘기하곤 한다.
- Node.js는 웹 서버 또는 WAS로도 사용할 수 있다.
-
DB
- DB는 조직이나 개인이 필요한 정보를 체계적으로 저장, 관리하고 검색할 수 있는 시스템이다.
- DB는 일반적으로 다수의 사용자가 공유할 수 있으므로, 대규모 데이터의 저장과 검색을 처리할 수 있다.
- 가장 많이 사용되는 DB 유형으로는 관계형(RDBMS), NoSQL 등이 있다.
일반적인 요청과 응답의 순서
-> 보통의 웹 서비스는 클라이언트 > 웹서버 > WAS > DB 순으로 요청 되고, DB > WAS > 웹 서버 > 클라이언트 순으로 응답이 된다.
웹 서버를 사용해야 하는 이유 ⁉️
- WAS의 부담을 줄여주기 위함
- WAS는 로그인, 회원가입, 개인정보 수정 등 동적 작업을 처리하는 것만으로도 작업량이 많음. 이에 HTML, CSS, JS, 이미지 등 정적인 파일을 클라이언트에게 전달하는 역할을 웹 서버에게 위임함으로써 WAS의 작업 부담을 줄일 수 있다.
- 보안 기능 제공
- 웹 서버는 보안 기능을 제공하여 웹 페이지에 대한 접근을 제어할 수 있다.
- 예를 들어, 웹 서버는 SSL/TLS 프로토콜을 사용하여 데이터를 암호화하고, 엑세스 제어, 웹 방화벽 보안 기능을 제공하여 웹 사이트를 보호할 수 있음
- 높은 성능 제공
- 웹 서버는 대부분 비동기 처리 방식을 사용하여 높은 성능을 제공함.
- 예를 들어 Ngnix, Apache 등의 웹 서버는 이벤트 기반, 멀티 프로세싱, 스레드 풀 등의 기술을 사용하여 수천대의 클라이언트 요청을 동시에 처리할 수 있다.
Ngnix를 사용하는 이유 ‼️
-
높은 성능과 적은 메모리 사용
- Ngnix는 비동기 I/O 처리 방식을 사용하여 높은 성능을 제공한다. 이를 통해 대규모 웹 사이트에서도 빠른 응답 시간을 보장할 수 있다.
- 또한 Ngnix는 적은 메모리 사용량으로도 높은 성능을 제공한다. 이를 통해 운용 비용을 절감할 수 있다.
-
리버스 프록시(Reverse Proxy) 사용이 가능함
- 프록시(Proxy)의 사전 정의는 "대리"이다. 인터넷 접속을 할 때 보안상의 문제로 직접 통신을 주고 받을 수 없을 때, 그 사이의 중계기로서 대리로 통신을 수행하는 기능을 프록시라고 말한다. 이렇게 중계를 기능하게 하는 것을
프록시 서버 라고 부른다.
- 프록시는 크게
포워드 프록시와 리버스 프록시로 구분한다.

- 포워드 프록시
- 클라이언트와 인터넷 그 사이에 있는 영역을 말한다.
- 클라이언트가 어떠한 정보를 요청하면 포워드 프록시가 이를 대신 받아서 서버에게 전달한다. 이후 서버의 응답 또한 포워드 프록시가 대신 받아서 클라이언트에게 전달한다.
- 포워드 프록시를 사용하면 클라이언트의 IP 주소가 웹 서버에 노출되지 않는다. 따라서, 클라이언트의 위치나 신원을 식별하는 것이 어려워지므로 보안이 강화된다.
- 또한 접근 제어를 수행할 수 있다. 포워드 프록시를 사용하여 특정 IP 주소, 도메인 또는 URL에 대한 접근을 제한할 수 있다.
- 미디어 스트리밍을 지원할 수 있다. 미디어 파일은 일반적으로 큰 용량을 가지고 있기 때문에, 웹 서버에서 직접 전송하는 것은 효율적이지 않다. 포워드 프록시를 사용하여 미디어 파일을 캐시하고, 클라이언트에게 빠르게 제공할 수 있다.

- 리버스 프록시
- 인터넷과 백엔드 그 사이에 있는 서버 영역을 말한다.
- 로드 밸런싱이 가능하다.
- 캐싱 서버로도 이용이 가능하다. 예를 들어 클라이언트가 이미지를 요청했을 때 처음에는 서버에서 가져오지만 이후에는 동일한 요청이 있을 때 캐시 서버에서 가져와 클라이언트에게 전달해 준다. 이를 통해 사이트 접속 속도를 빠르게 유지할 수 있다.
- 보안 효과가 있다. WAS가 데이터를 응답할 때는 기기의 명칭이나 주소 등 실제로는 민감한 정보들이 담겨져 있다. 이러한 정보들을 중간에서 숨겨 줌으로써 보안을 높일 수 있게 된다.
-
SSL 지원
- SSL(Secure Sockets Layer)은 웹 사이트와 사용자 간의 통신을 암호화하고 보안을 유지하는 데 사용되는 프로토콜이다. SSL은 HTTPS (HTTP Secure)로 알려진 보안 HTTP 프로토콜의 기반 기술이다.
- HTTPS는 HTTP 프로토콜의 암호화 된 버전이다. SSL 프로토콜을 사용하여 웹 서버와 클라이언트 간 보안 연결을 설정하고, SSL 인증서를 사용하여 서버의 신원을 인증한다. 이를 통해 중간자 공격과 같은 보안 위협을 방지하고, 사용자의 개인 정보와 웹 사이트의 기밀 정보를 보호할 수 있다.
- Ngnix는 HTTPS 인증서를 제공해 줄 수 있다.
-
데이터 압축
- 클라이언트가 보내는 요청이 Text일 경우 gzip을 사용하여 해당 데이터를 압축 시킬 수 있다.
-
비동기 처리
- Ngnix는 이벤트 루프 방식을 사용하여 높은 성능을 제공한다. 이를 통해 동시에 여러 요청이 들어왔을 때도 많은 트래픽을 동시에 처리할 수 있어 빠른 응답 시간을 보장한다.
(이미지 출처: https://www.cloudflare.com/ko-kr/learning/cdn/glossary/reverse-proxy/)