Nginx, Apache의 개념

  • 클라이언트의 HTTP(HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜) 요청을 받아 정적인 컨텐츠를 제공하는 서버 혹은 프로그램
    • 정적인 컨텐츠 = html, css, js, 이미지
     

https://ithub.tistory.com/101

html, JS 같은 정적인 프론트엔드 컨텐츠들은 웹서버를 구축한다면 웹서버 선에서 요청을 정리할 수 있습니다.

 

하지만 정적인 컨텐츠말고도 당연히 동적인 컨텐츠를 처리하기 위한 구조가 항상 웹서버를 공부할 때 따라다니는데, 이것을 WAS(Web Application Server)라고 합니다.

 

웹서버는 정적인 컨텐츠를 제공하는 것 외에도 WAS구조에서 동적인 처리를 하는 컨테이너에게 요청을 넘겨주게 되며 처리가 끝나면 응답을 받아 다시 클라이언트로 전송하는 역할을 합니다

 

이때 대표적인 웹서버로 사용되는 것들이 APACHE와 NGINX입니다


Nginx와 Apache 중 뭘 쓸까

둘의 차이는 과거부터 천천히 알아보면 쉽습니다.

우선 과거의 버그가 많았던 초기의 웹서버 프로그램이 수정되고 개발된게 아파치입니다


Apache 처리 방식 (커넥션 기반)

아파치는 Multi-Process Module방식

⇒ 클라이언트로부터 하나의 요청이 들어오게되면 하나의 process를 생성해서 연결

⇒이러한 방식은 확장성면에서 큰 장점을 가짐

⇒ 하나의 요청만을 처리함으로써 동적인 처리도 가능

하지만 스마트폰이 등장하고 트래픽이 점점 많아지면서 일정 수준 이상에 연결 프로세스를 만들지 못하거나 혹은 처리가 매우 느려지는 현상이 발생했습니다.

  • C10K라고도 불렀는데 Connection 10000 Problem이라는 이름으로 불리며 10,000개의 요청이 들어왔을 때 발생하는 문제라고 함 (클라이언트 요청이 들어왔을 때마다 프로세스를 만들면서 CPU/메모리 사용률이 증가하는 등 대용량 처리 에러가 많이 발생)

장단점

  • 장점
    • 개발자가 쉽게 확장할 수 있음
    • 확장하기 쉽게 호환성 또한 높음
  • 단점
    • 많은 요청 처리에 취약

Nginx의 등장

대규모 연결 처리를 위한 Nginx가 등장했는데 이때 Nginx는 Apache를 대체하는 프로그램이 아닌 Apache앞단에서 사용되며 Apache가 감당하기 힘들었던 대용량 트래픽(과도한 부하)에 대한 동시 연결을 지원하는 프로그램이었습니다.

이런 대규모 동시 연결을 제외하고도 Nginx는 앞서 얘기했던 웹서버로써 스스로 정적인 데이터들을 처리할 수 있었고 동시에 동적인 컨텐츠 요청들만 뒤로 넘기면서 웹컨테이너 에게 처리를 요청하고 받을 수 있었습니다.


Nginx 처리 방식(이벤트 기반)

  • Nginx도 master process를 본따서 worker process를 생성
  • Worker process가 대기 → 클라이언트로부터 요청이 들어왔을 때 부터 연결되어 동작을 시작

이쯤되니 Apache와 비슷해보이지만 Nginx는 하나의 요청을 받고도 여러 개의 요청을 하나의 Worker process가 받을 수 있습니다.

 

(먼저 연결된 클라이언트에 요청이 없으면 Keep-Alive를 통해 연결은 끊지않고 추가적인 요청을 대기하면서 다른 클라이언트의 요청을 받음)

 

클라이언트에서 온 하나의 요청을 Event라고 하며 이 요청을 OS 커널이 큐 형식으로 worker process 에 하나씩 넣어서 순차적 처리, 이때 오래 걸리는 작업들은 따로 빼서 처리( blocking )

 

장단점

  • 장점
    • 동시 커넥션할 수 있는 양 아파치에 비해 엄청나게 증가
    • 동적인 설정 변경
    • 프로그램이 가볍다( 많은 프로세스들을 실행시키지 않음)
    • 리버스 프록시 ⇒ 서버 앞에 위치하며 클라이언트가 서버를 호출할 때 Nginx를 부르고 서버가 클라이언트에게 응답할때도 Nginx를 부르는 구조
      • 보안(서버에 직접 접근을 막음)
      • 로드밸런싱(동적인 데이터들을 넘길 때 분산해서 넘김 - 부하를 분산)
    • 이 외에도 SSL , 캐싱 , CORS 처리 장점이 있음
  • 단점
    • 개발자가 따로 확장해서 쓰긴 어렵다는 것
    • 동적인 처리가 어렵다는 점

https://www.youtube.com/watch?v=6FAwAXXj5N0

https://hue9010.github.io/aws/nginx를-적용해-보자/

 

EC2 인스턴스에 Nginx를 구축해 보자

하나의 EC2 인스턴스에 Nginx와 WAS를 두는 구조를 실습 해보자

hue9010.github.io

https://www.youtube.com/watch?v=8IGgeaLlYW8 

 

'TIL > 개념정리' 카테고리의 다른 글

Git, Github 정리  (0) 2022.07.29
DB 트랜잭션에 대해서  (0) 2022.07.27
swagger가 필요한 이유와 정리  (0) 2022.07.19
API 쉽게 이해하기  (0) 2022.07.19
Framer-motion 간단한 사용법 정리  (0) 2022.07.16
복사했습니다!