Just Do IT!

Nginx란 무엇인가? 본문

개발 공부/DevOps

Nginx란 무엇인가?

MOON달 2024. 9. 24. 16:09
728x90
반응형

  • 트래픽이 많은 웹사이트의 서버(AWS)를 도와주는 비동기 이벤트 기반 구조의 경량화 웹 서버 프로그램
  • 클라이언트로부터 요청을 받았을 때, 요청에 맞는 정적 파일을 응답해주는 HTTP Web Server로 활용된다
  • Reverse Proxy Server로 활용하여 WAS의 부하를 줄일 수 있는 로드밸런서 역할을 수행할 수 있다

 

이러한 특징을 이해하기 위해서는 아래의 흐름을 먼저 이해해야 한다.

 

클라이언트

  • 서비스를 이용하기 위해 네트워크를 통해 요청을 보내는 주체
  • 웹 개발 영역에서는 보통 크롬, 사파리, 익스플로러 등 웹 브라우저를 의미한다.

 

웹 서버

  • 클라이언트와 서버 간의 통신을 처리하며 웹 애플리케이션을 호스팅할 수 있게 해주는 소프트웨어
  • 클라이언트의 HTTP 요청을 받아 정적 or 동적으로 웹 페이지를 제공해주는 소프트웨어
  • Appach Tomcat, Nginx, Mocrosoft IIS 등이 있다

 

WAS (Web Application Server)

  • 클라이언트 요청에 대해 동적인 처리를 담당하는 영역
  • 웹 서버와 달리 애플리케이션 로직을 실행할 수 있도록 구성되어 있다.
  • (예) 회원가입, 로그인 등의 로직을 처리하는 영역
  • 데이터베이스 연동, 트랜잭션 관리, 보안, 로깅 등의 기능도 제공
  • Tomcat, JBoss, WebLogic, WebSphere 등이 있다.

 

DB (Database)

  • 조직이나 개인이 필요한 정보를 체계적으로 저장, 관리하고 검색할 수 있는 시스템
  • 대규모 데이터의 저장과 검색을 처리할 수 있다.
  • 가장 많이 사용되는 유형으로는 관계형(RDBMS), NoSQL 등이 있다.

 

 

 

 

웹 서비스에서 클라이언트 > 웹 서버 > WAS > DB 순으로 요청이 되고,
DB > WAS > 웹 서버 > 클라이언트 순으로 응답이 된다.

 

 

 

 

 

 

 

웹 서버를 사용하는 이유?

  1. WAS 부담을 줄여주기 위해 사용
    • 정적 파일을 클라이언트에게 전달하는 역할을 웹 서버에게 위임함으로써 WAS 작업 부담을 줄일 수 있다.
  2. 보안 기능을 제공
    • SSL/TLS 프로토콜을 사용하여 데이터를 암호화하고, 액세스 제어, 웹 방화벽 등 보안 기능을 제곻하여 웹 사이트를 보호할 수 있다.
  3. 높은 성능을 제공
    • 대부분 비동기 방식을 사용하여 높은 성능을 제공
    • Nginx, Apache 등의 웹 서버는 이벤트 기반, 멀티 프로세싱, 스레드 풀 등의 기술을 사용하여 수천 대의 클라이언트 요청을 동시에 처리할 수 있다.

 

 

 

 

 

 

 

 

 

Apache란?

  • 쓰레드 / 프로세스 기반 구조로 요청 하나당 쓰레드 하나가 처리하는 구조

  • 사용자가 많으면 많은 쓰레드 생성, 메모리 및 CPU 낭비가 심함
  • 하나의 쓰레드 : 하나의 클라이언트 라는 구조
  • Apache 서버의 프로세스가 blocking되면 요청을 처리하기 못하고 처리가 완료될 때 까지 계속 대기해야 한다.
  • Keep Alive(접속 대기)를 이용해 해결이 가능하지만, Keep Alive 때문에 대량 접속 시 효율이 떨어짐

 

 

 

 

 

Ngnix를 사용하는 이유

  1. 높은 성능과 적은 메모리 사용
    • 비동기 I/O 처리 방식을 사용하여 높은 성능을 제공
    • 대규모 웹 사이트에서도 빠른 응답 시간을 보장할 수 있다
    • 적은 메모리 사용량으로 높은 성능을 제공하여 서버 운용 비용을 절감할 수 있다
  2. 리버스 프록시 사용이 가능
    • 프록시 : 인터넷 접속할 때 대리로 통신을 수행하는 기능
    • 포워드 프록시 : 클라이언트와 인터넷 그 사이에 있는 영역
      • 클라이언트가 어떠한 정보를 요청하면 포워드 프록시가 대신 받아서 서버에게 전달,
      • 서버의 응답 또한 포워드 프록시가 대신 받아 클라이언트에게 전달
      • 클라이언트의 IP 주소가 웹 서버에 노출되지 않는다.
      • 포워드 프록시를 활용하면 특정 IP 주소, 도메인 또는 URL에 대한 접근을 제한할 수 있다.
      • 미디어 스트리밍을 지원할 수 있다. (미디어 파일을 캐시하고, 클라이언트에게 빠르게 제공할 수 있다)
    • 리버스 프록시 : 인터넷과 백엔드 사이에 있는 서버 영역
      • 캐싱 서버로도 이용 가능
      • 보안 효과도 있음
  3. SSL 지원 (Secure Sockets Layer)
    • 웹 사이트와 사용자 간의 통신을 암호화하고 보안을 유지하는 데 사용되는 프로토콜
    • SSL은 HTTPS로 알려진 보안 HTTP 프로토콜 기반 기술이다.
    • SSL 프로토콜을 통해 웹 서버와 클라이언트 간에 보안 연결을 설정하고, SSL 인증서를 사용하여 서버의 신원을 인증
    • 중간자 공격과 같은 보안 위협을 방지하고 사용자의 개인 정보와 웹 사이트 기밀 정보를 보호할 수 있다.
    • nginx는 HTTPS 인증서를 제공해줄 수 있다
  4. 데이터 압축
  5. 비동기 처리
    • 이벤트 루프 방식을 사용하여 높은 성능을 제공하여 동시에 여러 요청이 들어와도 많은 트래픽을 동시에 처리할 수 있다

 

 

 

 

 

Apache와 Nginx, 어느 것을 선택해야 할까?

Apache 는 Nginx 에 비해 모듈이 다양하고, 안정성, 확장성, 호환성이 장점이고,

Nginx는 속도가 빠르고 안정성이라는 장점이 있다. (컨텐츠가 많은 인기있는 사이트를 운영하는 경우 nginx를 선호)

 

이러한 각 장단점을 인지하고, 특정 요구사항과 우선 순위에 따라 선택을 하면 된다.

 

 

 

 

 

 

 

 


 

도커와 컨테이너에 대한 실습을 하면서,

왜 Nginx를 쓰는지 이게 뭔지 너무 궁금해서 직접 구글링을 통해 정리해봤다.

 

도커 관련도 블로그에 정리하고 싶은데, 이부분은 우선 나중에...

우선은 위의 내용을 복습하면서 내것으로 만들어야 할 것 같다.

 

 

 

참고

https://blog.naver.com/gi_balja/223028077537

 

Nginx란 무엇인가?

Nginx(엔진엑스)는 높은 성능과 안정성 그리고 현재 가장 많이 사용되고 있는 웹 서버입니다. Apache(아...

blog.naver.com

https://medium.com/@limstar/spring-docker-nginx-%EB%9E%80-bde33c252789

 

[Spring] Docker, NginX 란?

Docker

medium.com

https://velog.io/@deannn/Apache%EC%99%80-NginX-%EB%B9%84%EA%B5%90-%EC%B0%A8%EC%9D%B4%EC%A0%90

 

Apache와 NginX 비교, 차이점

Apache, NginX 장단점 비교

velog.io

 

728x90