[TIL] WEB/HTTP : Nginx

은경·2022년 4월 7일
0

[WEB/HTTP]

목록 보기
7/7
post-thumbnail

📌 Nginx 란?


Nginx웹 서버 소프트웨어로, 가벼움과 높은 성능을 목표로 한다.
웹 서버, 리버스 프록시 및 메일 프록시 기능을 가진다.
위키백과 : Nginx

  • 경량 웹 서버

  • 클라이언트로부터 요청을 받았을 때 요청에 맞는 정적 파일을 응답해주는 HTTP Web Server로 활용

    • Web Server는 클라이언트가 HTML, CSS 와 같은 정적 데이터를 요청하면 HTTP 프로토콜을 준수하여 웹 브라우저에 전송하는 역할을 한다.
    • 동적 데이터가 필요하면 WAS 에 요청을 보내고, WAS 가 처리한 데이터를 클라이언트에 전달한다.

📌 WAS 🆚 Web Server 차이점

  • Web Server
    웹 브라우저 클라이언트로부터 HTTP 요청을 받아 정적인 컨텐츠(html jpeg css 등)를 제공하는 컴퓨터 프로그램
  • WAS (Web Server + Web Container)
    DB 조회나 다양한 로직 처리를 요구하는 동적인 컨텐츠를 제공하기 위해 만들어진 Application Server
  • Reverse Proxy Server로 활용하여 WAS 서버의 부하를 줄여주는 로드 밸런서로 활용
  • Apache보다 동작이 단순하고, 전달자 역할만 하기 때문에 동시접속 처리에 특화되어 있다.
웹 서버ApacheNginx
동작 방식스레드 / 프로세스 기반비동기 이벤트 기반
구조요청 하나당 스레드 하나가 처리 (요청마다 새로운 스레드 생성)고정된 프로세스만 생성하여 사용하고, 비동기 방식으로 요청들을 처리
성능사용자 증가, CPU / 메모리 사용 증가 시 성능 저하단일서버 동시연결 가능, 적은 자원으로 효율적인 운용(스레드 생성비용 ❌)


📌 Nginx의 구조


  • 하나의 Master Process와 다수의 Worker Process로 구성

  • Master Process설정 파일을 읽고, 유효성을 검사하며 Worker Process를 관리함

  • Worker Process에서 모든 요청을 처리

  • Nginx는 이벤트 기반 모델을 사용하고, Worker Process 사이에 요청을 효율적으로 분배하기 위해 OS에 의존적인 메커니즘을 사용한다.

  • Worker Process의 개수는 설정 파일에서 정의 -> 정의된 프로세스 개수와 사용 가능한 CPU 코어 숫자에 맞게 자동으로 조정

출처 : https://icarus8050.tistory.com/57

📌 Nginx의 특징


리버스 프록시 (Reverse Proxy)

리버스 프록시 서버는 중계 기능을 하는 하는 서버. 클라이언트가 서버를 호출할 때 직접 서버에 접근 하는 것이 아니라 리버스 프록시 서버를 호출하게 되고 -> 리버스 프록시 서버가 서버에게 요청을 하고 -> 응답을 받아 클라이언트에 전달함.

클라이언트는 리버스 프록시 서버를 호출하기 때문에 실제 서버의 IP를 감출 수 있고, 이를 통해 보안을 높일 수 있다는 장점이 존재.

로드 밸런싱

로드밸런서는 부하 분산이라는 뜻, 서버에 가해지는 부하를 분산해주는 역할을 하는 것이다.

이용자가 많아서 발생하는 요청이 많을 때, 하나의 서버가 아닌 여러대의 서버를 이용하여 요청을 처리하게 하는데, 이때 서버의 로드율과 부하량 등을 고려하여 적절하게 서버들에게 분산처리 하는 것을 로드 밸런싱이라고 함.

하나의 서버가 멈춰도 서비스가 중단 되지않고 다른 서버가 서비스를 계속 유지할 수 있는 무중단 배포가 가능하다는 장점이 있다.

Nginx 환경설정, 셋팅 예제 : https://whatisthenext.tistory.com/123



참고 자료 (Reference)


https://tecoble.techcourse.co.kr/post/2021-07-30-web-server-and-nginx/
https://whatisthenext.tistory.com/123
https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html
https://icarus8050.tistory.com/57

profile
Python 서버 개발자

0개의 댓글