공부한 내용
[테코톡] Nginx 등장 배경 (vs 아파치 서버)
- 아파치 서버
- 등장)
- unix 기반 최초의 웹서버 NCSA HTTPd의 버그가 많아, 이를 수정해 만든 것이 아파치 서버 (1995)
- 구조)
- 새로운 요청 들어옴 → 새로운 프로세스 생성 → 커넥션 형성
- 유닉스 계열 OS가 네트워크 커넥션 형성하는 모델 적용한 것
- prefork 방식 사용함
- 프로세스 생성 시간 오래 걸림 → 요청 전 프로세스 미리 생성해 해결
- 생성해둔 프로세스 모두 할당됨 → 추가로 프로세스 생성
- 장점)
- 개발 쉬움
- 서버에 기능 추가 쉬움
- 동적 컨텐츠 처리 가능
- 확장성 좋음
- 요청, 응답 처리를 하나의 서버에서 해결 가능
- 단점)
- 1999, 인터넷 트래픽 증가 → C10K 문제 발생
- 클라이언트 수 많아지면 동시 연결 커넥션 많아짐 → 동시 커넥션 수 10000 넘어가면 더이상 추가적인 커넥션 형성이 불가한 C10K 문제 발생
- 동시 연결 커넥션 수 vs 초당 요청 처리 수
- 동시) 요청을 처리하기 위해 서버가 한 시점에 얼마나 많은 클라이언트와 커넥션을 형성하고 있는지 나타내는 지표
- 초당) 서버가 얼마나 빨리 요청을 처리할 수 있는지 나타내는 지표
- 둘이 같지 않은 이유)
- 한 클라이언트는 하나의 커넥션으로 여러 요청 보낼 수 있음
- 커넥션은 긴 시간동안 유지될 수도 있음
- 각 요청마다 매번 커넥션 만드는 건 비효율적 → 커넥션 재활용
- http header Keep-Alive: timeout=5 → 5시간동안 클라와 서버가 형성한 커넥션 재활용
- 아파치 서버 구조 상 동시 처리 커넥션 많아지면 발생하는 문제들
- 할당되는 프로세스가 많아져 메모리 부족 현상을 일으킴
- 여러 기능이 추가된 무거운 프로그램으로 인해 프로세스가 차지하는 리소스 양 더 늘어남
- 많은 커넥션에서 요청 들어오면 CPU 코어 컨텍스트 스위칭 빈번해져 CPU 부하 일으킴
클라이언트 수와 동시 연결 커넥션의 상관 관계 (토글)
- Nginx
- 등장) 새로운 구조 채택해, 아파치 서버 보완하는 소프트웨어로 만든 것이 Nginx (2004)
- 초기 목적)
- 아파치 서버 앞 단에 놓여서 아파치 서버의 구조적 한계를 보완
- 많은 동시 커넥션 대신 유지
- 웹 서버 역할
- 정적 파일에 대한 요청 스스로 처리 가능
- 동적 파일 요청 받았을 때만 서버와 커넥션 형성

![[10분 테코톡] 🤫 피케이의 Nginx](https://www.notion.so/image/https%3A%2F%2Fi.ytimg.com%2Fvi%2F6FAwAXXj5N0%2Fsddefault.jpg?table=block&id=6fa568f9-9129-4727-b7ad-accf1f2fe06b&cache=v2)