Nginx는 무엇일까?

wodnr_P·2023년 7월 10일
0

CS 메모지

목록 보기
5/5

Nginx는?

트래픽이 많은 웹 사이트의 서버(WAS)를 도와주는 비동기 이벤트 기반 구조의 경량화 웹 서버 프로그램


Web Server?

HTTP 프로토콜을 기반으로 클라이언트의 요청을 서비스하는 기능을 담당

  • 정적인 컨텐츠를 제공
  • 동적인 컨텐츠는 WAS에 보내는 역할
  • Apache, Nginx 등 이 있음

왜 Web Server를 사용하는 것일까?

Reverse Proxy Server로 활용하여 WAS의 부하를 줄일 수 있는 로드밸런서의 역할을 함

  • 서버 부하 방지
    정적 컨텐츠 요청까지 WAS가 처리하게 될 경우, 부하가 커지고 동적 컨텐츠 처리가 지연되어 수행 속도가 느려짐
  • 보안 강화
    WAS와 WebServer 사이에 방화벽을 두어 WAS 접근의 보안을 강화할 수 있음
  • 무중단 운영
    대용량 웹 어플리케이션의 경우, 여러 WAS와 연결함으로써 무중단 운영, 장애에 쉽게 대비할 수 있음

Reverse Proxy Server?

  • <--> Forward Proxy : 서버에게 클라이언트를 감춤
  • 어플리케이션 서버의 앞에 위치
  • 클라이언트가 서버에 요청할 때, 리버스 프록시를 호출하고 리버스 프록시가 서버로 부터 응답을 전달 받아 다시 클라이언트에 전송하는 역할
    • 어플리케이션 서버를 감추는 역할 : 보안과 성능 향상시킬 수 있음

Proxy Server의 장점

  • 여러 개의 내부 서버를 둘 수 있기 때문에 로드밸런싱이나 서버 확장을 통해 트래픽 분산 시킬 수 있음
  • 캐시기능 사용 : 캐시 서버로 활용하여 성능 향상 가능

왜 Nginx를 사용할까?

WebServer는 Nginx 이외에도 Apach가 있으나 클라이언트의 요청이 무수히 많아짐에 따라서 동시 커넥션이 많아졌을 경우, 더 이상 커넥션을 형성하지 못하는 상황이 생김. 이러한 문제를 개선 하고자 Nginx를 활용

Apach의 구조

  • Apach의 구조는 요청이 들어올 때 마다 프로세스를 할당하는 구조
  • 이용자가 많아지면서 프로세스도 비례하여 증가, 메모리 부족을 야기시킴
  • 대용량의 트래픽을 감당하기엔 적합하지 않음

Nginx의 구조

  • 설정 파일을 읽고, 설정에 맞게 Worker process를 생성하는 Master process가 존재
  • Worker process : 실제로 일을 하는 프로세스
  • Worker process가 생성 될 때 지정된 listen 소켓을 배정, 그 소켓에 새 클라이언트 요청이 들어오면 Connection을 형성하고 처리
  • Connection은 정해진 Keep-alive 시간만큼 유지, Connection이 형성 되었다고 해서 Worker process가 해당 Connection 하나만 담당하지 않음
  • Connection에 아무 요청이 없을 시 새로운 Connection을 생성 하거나 다른 Connection으로 부터 들어온 요청 처리

📌 여러 요청 중 시간이 오래 걸리는 작업이 있어도 Nginx는 Event-driven방식으로 그러한 요청들을 따로 수행 할 수 있음

Event-driven 방식

여러 개의 Connection을 전부 Event-Handler를 통해 비동기 방식으로 처리해, 먼저 처리 되는 것부터 로직이 진행

  • Event : Connection 형성과 제거, 새로운 요청 처리하는 것
  • OS 커널이 큐 형식으로 Worker process에게 전달, 이벤트들은 큐에 담긴 상태에서 비동기 상태로 대기
  • Worker process는 하나의 스레드로 이벤트를 꺼내서 처리

장점과 단점

장점

  • 이벤트 중심 접근 방식을 사용하여 클라이언트 요청 제공, 제한된 하드웨어 리소스로도 여러 요청을 동시에 효율적으로 처리
  • 최소한의 리소스로 웹 서버의 아키텍처를 개선하기 위해 독립형 HTTP 서버로 배치 가능

단점

  • 동적 컨텐츠 기본적으로 처리 불가
    • 동적 웹 페이지 컨텐츠 가진 모든 요청을 위해 외부자원과 연계
      --> 프로세스 속도 저하
profile
발전하는 꿈나무 개발자 / 취준생

0개의 댓글