K_blueprint
NginX & Apache 본문
728x90
반응형
※ Web Server란?
- 백엔드 단에서 HTML, CSS, JS, img 파일 등 static page(정적 페이지)를 요청하고 처리해 주는 서버
● Apache란?
- Apache 재단에서 1995년 유닉스 기반으로 만들어진 웹 서버(HTTP)
- 기본적으로 정적인 데이터를 처리하는 웹 서버이다.
- NCSA HTTPD라는 서버가 기존에 존재했지만 버그가 너무 많아 이를 해결해야 했고 그래서 나온 것이 Apache라고 할 수 있다.(Apache HTTP Server의 탄생 계기)
- 아파치 서버는 요청이 들어오면 커넥션을 형성하기 위해 프로세스를 생성하는 구조를 가지고 있는데 이는 프로세스 생성 시간이 오래 걸리기 때문에 요청이 들어오기 전에 프로세스를 미리 만들어 두는 Prefork방식을 사용한다.(만약 만들어 놓은 프로세스가 모두 할당되면 추가로 프로세스를 만든다. -> 확장성의 장점)
- 다양한 모듈을 만들어 서버에 빠르게 기능을 추가할 수 있다.(동적 콘텐츠 처리 기능 등)
- 즉, 확장성이 좋다는 장점 덕분에 요청을 받고 응답을 처리하는 과정을 하나의 서버에서 해결하기 좋았다.
- Apache의 구조(스레드/프로세스 기반 구조)
- Apache는 클라이언트 요청당 하나의 스레드가 처리하는 구조(하나의 스레드 = 하나의 클라이언트)
- 확장성이 좋아 개발하기 용이한 환경
- 사용자가 많으면 많은 스레드를 생성하기 때문에 메모리 부족 및 CPU의 낭비의 문제가 있었다.
- Apache의 장/단점
( 장 점 )
- 서버에서 사용 가능한 프로그램 코드를 필요에 따라 수정 및 업데이트할 수 있다.
- 구조가 단순하여 비용을 절약할 수 있다.
- 처리 속도가 빠르다.
- 다양한 운영체제에서 사용된다.
- 동일한 IP주소를 사용하여 다른 호스트를 생성할 수 있다.
( 단 점 )
- 많은 Connection 요청이 들어오면 Context Switching을 많이 하기에 CPU의 부하가 증가한다.
- Connection이 연결될 때마다 프로세스를 생성하기 때문에 메모리 부족 현상이 나타난다.
- 확장성이 좋다는 건 곧 리소스가 많다는 말과도 같음(무거운 프로그램)
- C10k 문제(Connection 10000 problem) : 1999년부터 컴퓨터의 보급이 활발해지면서 동시에 서버의 트래픽 량이 높아지고 그에 따라 서버에 동시 연결된 커넥션이 많아졌을 때 10000개 이상의 커넥션을 처리하지 못하는 문제 발생
- Apache 서버의 구조는 수많은 동시 커넥션을 감당하기에 적합하지 않은 구조였다.
● NginX란?
- Apache의 C10k 문제를 해결하기 위해 출시된 소프트웨어(쉽게 말해 Apache 서버의 부하를 줄여주기 위해 출시되었다.)
- Apache서버가 트래픽 량이 높아졌을 때 서버에 동시 연결된 커넥션을 감당하기 위한 장치로서의 역할
- WAS서버를 도와주는 비동기 이벤트 기반 구조의 경량 웹 서버
- 경량 웹 서버로서 클라이언트로부터 요청을 받았을 때 요청에 맞는 정적 파일을 응답해 주는 HTTP Web Server로 활용되거나, Reverse Proxy Server로 활용하여 WAS서버의 부하를 줄일 수 있는 '로드 밸런서'로도 활용되는 오픈소스 웹 서버이다.
- NginX의 구조(Event-Driven 구조)
- 하나의 Master Process와 다수의 Worker Process로 구성되어 실행
- Master Process는 설정 파일을 읽고, 유효성 검사 및 Worker Process를 관리
- 비동기 방식으로 요청들을 동시적으로 처리할 수 있다.
- 이벤트 기반 모델을 사용
- Worker Process 사이에 요청을 효율적으로 분배하기 위해 OS에 의존적인 메커니즘을 사용한다.
- 모든 요청은 Worker process에서 처리한다.
- NginX의 장/단점
( 장 점 )
- 새로운 요청이 들어오더라도 프로세스나 스레드를 추가적으로 생성하지 않기 때문에 프로세스와 스레드의 생성 비용이 존재하지 않는다.(즉, 프로세스를 적게 만들기 때문에 구조가 가볍다.)
- 적은 자원으로도 효율적인 운용이 가능하다.
- 이벤트 중심 접근 방식을 사용하여 클라이언트 요청을 제공한다.
- 여러 클라이언트 요청을 동시에 효율적으로 처리
- 단일 스레드를 통해 여러 연결 처리 가능 (단일 서버에서도 동시에 많은 연결을 처리할 수 있음)
( 단 점 )
- 동적 콘텐츠를 기본적으로 처리할 수 없음
- 동적 웹 페이지 콘텐츠를 가진 모든 요청을 위해 동적 콘텐츠를 처리할 수 있는 외부 자원과 연계해야 한다.(ex. PHP-fpm)
- 그럼 Apache를 지금까지도 사용하는 이유는 뭘까?('안정성' 때문)
- 본래의 목적이 버그 수정을 패치 & 호환이 되는 것을 목표로 출시가 되었기 때문에 다양한 OS에서 안정적이다.
- 모듈 기능의 추가가 쉽고 모듈의 종류 또한 NginX에 비해서 훨씬 많다.
728x90
반응형
'도구 & 정보 정리' 카테고리의 다른 글
IIS(Internet Information Service) (0) | 2023.11.14 |
---|---|
Tomcat (0) | 2023.11.14 |
Web Server & Web Application Server(WAS) (0) | 2023.11.12 |
Wordpress(워드 프레스란?) (0) | 2023.11.12 |
프로토타이핑 툴 소개(Figma & 카카오 오븐) (0) | 2023.11.11 |