Nginx 개념 정리(Feat. Apache)

BM1201·2024년 8월 19일
0

Nginx

목록 보기
1/4
post-thumbnail

Web Server 와 WAS(Web Application Server) 의 차이

Web Server

파일 경로 이름을 받아 경로와 일치하는 file contents를 반환합니다.
즉, 웹 브라우저 클라이언트로부터 HTTP 요청을 받아 정적인 컨텐츠(.html .jpeg .css 등)를 제공하는 프로그램입니다.

WAS(Web Application Server) ⇒ Web Server + Web Container

Web Containers는 JSP, Servlet을 실행시키는 소프트웨어입니다.
클라이언트의 요청(Request)을 WAS에 보내고, WAS가 처리한 결과를 클라이언트에게 전달(응답, Response)합니다.

Web Server가 필요한 이유

  • 기능을 분리하여 서버 부하 방지
    WAS는 기본적으로 동적 컨텐츠를 제공하기 위해 존재하는 서버입니다. 만약 정적 컨텐츠 요청까지 WAS가 처리한다면 정적 데이터 처리로 인해 부하가 커지게 되고, 동적 컨텐츠의 처리가 지연됨에 따라 수행 속도가 느려질 것입니다. 그 결과 페이지 노출 시간이 늘어나게 될 것 입니다.

  • 물리적으로 분리하여 보안 강화
    SSL에 대한 암복호화 처리에 Web Server를 사용

  • 여러 대의 WAS를 연결 가능

  1. Load Balancing을 위해서 Web Server를 사용

  2. fail over(장애 극복), fail back 처리에 유리
    대용량 웹 어플리케이션의 경우(여러 개의 서버 사용) Web Server와 WAS를 분리하여 무중단 운영 및 장애 극복에 쉽게 대응할 수 있습니다. 예를 들어, 앞 단의 Web Server에서 오류가 발생한 WAS를 이용하지 못하도록 한 후 WAS를 재시작함으로써 사용자는 오류를 느끼지 못하고 이용할 수 있습니다.

결론적으로 자원 이용의 효율성 및 장애 극복, 배포 및 유지보수의 편의성 을 위해 Web Server와 WAS를 분리합니다.

Reference(💡필독추천)

Nginx와 Apache의 차이

  • NGINX란?
    NGINX란 apache의 C10K 문제 (한 시스템에 동시접속자 수가 1만명이 넘어갈 때 효율적인 방안)를 해결하기 위해 Event-Driven 구조로 만든 웹 서버입니다. 우리가 개발한 응용 프로그램이 OSI 7 Layer 중 application Level에서 동작하고 그 아래 Level에서 NGINX 같은 웹 서버가 HTTP 통신을 제공하게 됩니다.

  • Nginx와 Apache의 구동방식
    Apache의 경우 Client가 HTTP 요청을 보낼 때 MPM(Multi-Process Module)을 사용하여 처리하는데 2가지 방법(PreFork 방식, Worker 방식)이 있습니다. 앞의 방식들의 문제는 요청이 많아지는 경우 Process 또는 Thread 생성 비용이 늘어난다는 문제가 있습니다. 하지만 Nginx의 경우 Event-Driven 방식으로 동작합니다. 그러므로 한 개 또는 고정된 프로세스만 생성 하고, 그 프로세스 내부에서 비 동기 방식으로 효율적으로 작업들을 처리합니다. 따라서 동시 접속 요청이 많아도 Process 또는 Thread 생성 비용이 존재하지 않습니다.

Reference

Nginx에서 제공하는 기술

  • 리버스 프록시
    클라이언트 요청을 어느 서버로 보낼지를 설정

사용예시
API는 backbone 서버에 있고 홈페이지 웹을 DMZ서버에 설치한 경우 홈페이지에서 API서버를 호출하게 되면 CORS오류가 발생하게 됩니다. 이런 경우 Nginx를 리버스 프록시기능을 이용하여 proxy 서버처럼 사용할 수 있습니다.

  • 가상 호스팅
    서버 한 대를 여러 고객이 사용할 수 있게 호스팅 서비스를 제공하는 것

사용예시
nginx.conf파일의 server 블록을 이용하여 구현할 수 있습니다. server 블록은 하나의 웹사이트를 선언하는데 사용되며 http://test1.com과 http://test2.com 을 동시에 운영하고 싶은 경우 사용할 수 있습니다.

  • 로드밸런싱
    클라이언트에서 온 요청을 분산 처리하게 하는 것

사용예시
API 서버에 트랙픽이 과도하게 몰려 문제가 발생한다면 API 서버를 여러개 올리고 nginx.conf 설정을 통해 API 서버에 몰리는 트랙픽을 분산시켜서 성능향상을 유도할 수 있습니다.

위의 기술들 외에도 캐싱설정 및 웹 압축, SSL/TLS 보안설정, 성능최적화등 다양한 기능을 제공합니다.

Reference(사용해본 기술 위주로 정리하였고 추가적인 기능들은 아래 URL 참고)

profile
개발자의 기록하는 습관

0개의 댓글