Nginx는 높은 성능과 안정성 그리고 현재 가장 많이 사용되고 있는 웹 서버이다. Apache(아파치) 같은 웹 서버와 비교하면 더 빠르고 가볍고, 대규모 애플리케이션 처리에 적합하다는 장점이 있다. Nginx를 이해하기 위해서는 다음 4가지 용어를 알아둘 필요가 있다.
1. 클라이언트
- 클라이언트(Client)란 서비스를 이용하기 위해 네트워크를 통해 요청을 보내는 주체를 의미한다. 예를 들어, 인터넷에서 웹 페이지를 보기 위해 웹 브라우저를 실행하면 웹 브라우저가 클라이언트가 된다. 또한, 이메일을 보내기 위해 이메일 클라이언트를 실행하면 이메일 클라이언트가 된다.
2. 웹서버
- 웹 서버는 클라이언트의 요청에 따라 HTML, CSS, JS, 이미지 파일과 같은 정적 파일을 응답하여 제공하는 소프트웨어를 말한다. 웹 서버는 HTTP 프로토콜을 사용하여 클라이언트와 통신한다. 대표적인 웹 서버로는 Nginx, Apache 등이 있다.
3. WAS (Web Application Server)
- WAS는 클라이언트 요청에 대해 동적인 처리를 담당하는 영역이다. 웹 서버와 달리 애플리케이션 로직을 실행할 수 있도록 구성되어 있다. 예를 들어 회원가입이나 로그인 등의 로직을 처리하는 영역이 WAS 이다. 또한 데이터베이스 연동, 트랜잭션 관리, 보안, 로깅 등의 기능도 제공한다. 이를 통해 웹 애플리케이션의 안정성과 성능을 향상시키며, 개발자들은 애플리케이션 개발에 집중할 수 있다. 대표적인 WAS로는 Tomcat, Apache 등이 있다.
4. DB (데이터베이스)
DB는 정보를 체계적으로 저장, 관리하고 검색할 수 있는 시스템이다. DB는 일반적으로 다수의 사용자가 공유할 수 있으며, 대규모 데이터의 저장과 검색을 처리할 수 있습니다. 가장 많이 사용되는 DB 유형으로는 관계형(RDBMS), NoSQL 등이 있다.
보통 웹 서비스는 클라이언트 -> 웹 서버 -> WAS -> DB 순으로 요청이 되고 DB -> WAS -> 웹 서버 -> 클라이언트 순으로 응답이 진행된다.
5. 웹 서버를 사용하는 이유
1) WAS 부담을 줄여주기 위해 사용된다. WAS는 로그인, 회원가입, 개인정보 수정 등 동적 작업을 처리하는 것만으로도 작업량이 많다. 이에 HTML, CSS, JS, 이미지 등 정적인 파일을 클라이언트에게 전달하는 역할을 웹 서버에게 위임함으로써 WAS 작업 부담을 줄일 수 있다.
2) 보안 기능을 제공한다. 웹 서버는 보안 기능을 제공하여 웹 페이지에 대한 접근을 제어할 수 있다. 예를 들어, 웹 서버는 SSL/TLS 프로토콜을 사용하여 데이터를 암호화하고, 액세스 제어, 웹 방화벽 등의 보안 기능을 제공하여 웹 사이트를 보호할 수 있다.
3) 높은 성능을 제공한다. 웹 서버는 대부분 비동기 처리 방식을 사용하여 높은 성능을 제공한다. 예를 들어, Nginx, Apache 등의 웹 서버는 이벤트 기반, 멀티 프로세싱, 스레드 풀 등의 기술을 사용하여 수천 대의 클라이언트 요청을 동시에 처리할 수 있다.
6. Nginx의 장점
1) 높은 성능과 적은 메모리 사용
- Nginx는 비동기 I/O 처리 방식을 사용하여 높은 성능을 제공한다. 이를 통해 대규모 웹 사이트에서도 빠른 응답 시간을 보장할 수 있다. 또한 Nginx는 적은 메모리 사용량으로도 높은 성능을 제공한다. 이를 통해 서버 운용 비용을 절감할 수 있다.
2) 리버스 프록시(Reverse Proxy) 사용이 가능
- 프록시(Proxy)의 사전적 정의는 "대리"이다. 인터넷 접속을 할 때 보안상의 문제로 직접 통신을 주고받을 수 없을 때 그 사이의 중계기로서 대리로 통신을 수행하는 기능을 프록시라고 말한다. 이렇게 중계를 기능하는 것을 우리는 프록시 서버라고 부흔다. 프록시는 크게 포워드 프록시, 리버스 프록시로 구분됩니다.
2-1) 포워드 프록시는 클라이언트와 인터넷 그 사이에 있는 영역을 말한다. 클라이언트가 어떠한 정보를 요청하면 포워드 프록시가 이를 대신 받아서 서버에게 전달을 한다. 이후 서버의 응답 또한 포워드 프록시가 대신 받아 클라이언트에게 전달한다. 이때 포워드 프록시를 사용하면 클라이언트의 IP 주소가 웹 서버에 노출되지 않는다. 따라서, 클라이언트의 위치나 신원을 식별하는 것이 어려워져 보안이 강화된다.
또한 접근 제어를 수행할 수 있다. 포워드 프록시를 사용하여 특정 IP 주소, 도메인 또는 URL에 대한 접근을 제한할 수 있다. 또한 미디어 스트리밍을 지원할 수 있다. 미디어 파일은 일반적으로 큰 용량을 가지고 있기 때문에, 웹 서버에서 직접 전송하는 것은 효율적이지 않다. 포워드 프록시를 사용하여 미디어 파일을 캐시하고, 클라이언트에게 빠르게 제공할 수 있다.

2-2) 리버스 프록시는 인터넷과 백엔드 그 사이에 있는 서버 영역을 말한다. 예를 들어 WAS로 사용하고 있는 서버가 여러 대 있다고 가정을 해보겠다. 클라이언트가 https://example/blog1, https://example/blog2으로 접근을 했다면 blog1은 A 서버로 전달, blog2는 B 서버로 전달하여 요청에 해당하는 웹 서버로 길을 분배할 수 있다. 이를 로드 밸런싱이라고 한다.
또한 캐싱 서버로도 이용이 가능하다. 예를 들어 클라이언트가 이미지를 요청했을 때 처음에는 서버에서 가져오지만 이후에 동일한 요청이 있는 경우에는 캐시 서버에서 가져와 클라이언트게 전달해준다. 이를통해 사이트 접속 속도가 빨라지게 된다.
마지막으로 보안 효과도 있다. WAS가 데이터를 응답할 때는 기기의 명칭이나 주소 등 실제로는 민감이 정보들이 담겨져 있다. 이러한 정보들을 중간에서 숨겨줌으로써 보안을 높일 수가 있다.

3) SSL 지원
- SSL (ecure Sockets Layer)은 웹 사이트와 사용자 간의 통신을 암호화하고 보안을 유지하는 데 사용되는 프로토콜이다. SSL은 HTTPS (HTTP Secure)로 알려진 보안 HTTP 프로토콜의 기반 기술이다.
HTTPS는 HTTP 프로토콜의 암호화된 버전으로써 SSL 프로토콜을 사용하여 웹 서버와 클라이언트 간에 보안 연결을 설정하고, SSL 인증서를 사용하여 서버의 신원을 인증해준다. 이를 통해 중간자 공격과 같은 보안 위협을 방지하고, 사용자의 개인 정보와 웹 사이트의 기밀 정보를 보호할 수 있다.
4) 비동기 처리
- Nginx는 이벤트 루프 방식을 사용하여 높은 성능을 제공한다. 이를 통해 동시에 여러 요청이 들어왔을 때도 많은 트래픽을 동시에 처리할 수 있어 빠른 응답 시간을 보장한다.
'Spring' 카테고리의 다른 글
[Spring] Nginx에 http 대신 https 적용하기 (0) | 2024.01.29 |
---|---|
[Spring] Nginx에 Spring Server 연동하기 (0) | 2024.01.29 |
[Spring] Kakao의 API 활용하여 소셜 로그인 구현 (1) | 2024.01.28 |
[Spring] 미니프로젝트 종료 이후 (0) | 2024.01.23 |
[Spring] 김영한 Spring Data Jpa 요점정리 (1) (1) | 2024.01.23 |