아파치(apache)
- 요청 하나 당 프로세스(또는 스레드)가 처리하는 구조
- 요청이 많을수록 CPU와 메모리 사용이 증가하기 때문에 성능 저하가 있을 수 있다.
- Apache서버의 프로세스가 블록킹(blocking)되면 요청을 처리하지 못하고, 처리가 완료 될 때까지 계속 대기
- 이와같은 문제들은 Keep Alive를 활성화 함으로써 해결이 가능하지만, Keep Alive때문에 대량 접속 시 효율이 급격하게 떨어지는 또 다른 문제점이 발생
- Keep Alive
- HTTP프로토콜의 특성상 한 번 통신이 이루어지면 접속을 끊어버리지만, KeepAlive On 상태에서는 KeepAliveTimeOut 시간동안 접속을 끊지 않고 다음 접속을 기다립니다.
- 즉, 한번 연결된 클라이언트와 통신을 유지하고 있기 때문에, 다음 통신 시에 Connection을 생성하고 끊는 작업이 필요 없게 된다.
- 따라서 Keep Alive을 활성화 함으로써, 성능향상을 기대할 수 있다
- 정적자원으로만 구성된 웹서버에 KeepAlive On으로 설정할 경우 약 50%의 성능 향상을 보인다.
- 바쁜 서버 환경에서 KeepAlive On으로 설정해 놓을 경우, 모든 요청마다 연결을 유지해야 하기 때문에 프로세스 수가 기하급수적으로 늘어나 MaxClient값을 초과하게 된다.
- 따라서 메모리를 많이 사용하게 되며 이는 곧 성능 저하의 원인이 된다.(대량 접속시 효율이 떨어짐)
엔진엑스(nginx)
- 보안과 속도를 최적화 시키려는 노력에 탄생한 웹서버
- 사용이 매우 심플
- 규모가 작은 서비스
- 정적 데이터 처리가 많은 서비스에 적합
- Apache에서 지원하는 수많은 기능이 필요 없고 알려진 보안 문제들은 특별한 업데이트 없이 Nginx자체에서 처리해주고 있다.
- 프로그램의 흐름이 이벤트에 의해 결정되는 Event Driven방식의 웹서버
- 요청에 대한 각 상태(state)를 정해서, event가 발생할 때마다 event를 처리한다.
- 적은 수의 쓰레드로 효율적인 일 처리
- 쓰레드를 적게 사용하기 때문에 쓰레드당 할당되는 메모리도 적게 사용하는 구조
- 쓰레드를 많이 사용하지 않기 때문에 context switching 비용이 적고, 따라서 CPU소모도 적다.
- 그러나 모듈 개발이 어려우며 다양한 모듈이 없다는 것이 단점
참조
'컴퓨터 기본 개념' 카테고리의 다른 글
자바스크립트 기본 개념 & Auth0 & 교차기원 & CORS (0) | 2020.10.22 |
---|---|
배포의 개념과 종류 (0) | 2020.10.14 |
웹 서버(WS) VS 웹 어플리케이션 서버(WAS) (0) | 2020.10.12 |
VPC(Virtual Private Cloud) (0) | 2020.10.06 |
리다이렉트(Redirect) & 포워드(Forward) (0) | 2020.10.05 |