티스토리 뷰

개발/Infrastructure

Apache vs Nginx

무주아빠 2020. 5. 18. 16:48

APACHE

  • 요청(Request)하나 당 프로세스(또는 스레드)가 처리하는 구조
  • 즉 요청이 많을수록 CPU와 메모리사용이 증가 -> 성능 저하
  • 서버의 프로세스가 블록킹이 되면 요청을 처리하지 못하고, 처리가 완료 될 때까지 계속 대기 하는 일이 발생
  • 위의 문제는 Keep Alive를 활성화 함으로써 해결 가능하나, 이 때문에 대량 접속 시 효율이 급격히 떨어지는 다른 문제가 발생
  • Keep Alive?
    • KeepAlive On -> KeepAliveTimeOut 시간동안 접속을 끊지 않고 다음 접속을 기다림
    • 한 번 연결된 클라이언트와 통신을 유지하고 있기에, 다음 통신시 Connection을 생성하고 끝는 작업이 불필요
    • 성능 향상을 기대 할 수 있음
    • 정적 자원으로만 구성된 웹 서버에 설정시 약 50% 성능 향상이 기대 가능 하다고 함
    • 단 바쁜 서버환경에서 KeepAlive On 설정시엔 모든 요청마다 연결을 유지 -> 프로세스 수 급격히 증가 -> MaxClient 초과 -> 많은 메모리 사용 -> 성능 저하
    • 즉 트래픽이 적은 서버 환경에 유리
    • 2.4 버전부터 Event MPM방식을 지원 => 요청을 처리하는 스레드를 따로 두어 분산된 처리를 가능하게 함

NGINX

  • 아파치에 비해 가벼움
  • 보안과 속도를 최적화 시키려는 노력에서 탄생
  • 사용이 매우 심플하고 규모가 작은 서비스 + 정적 데이터 처리가 많은 서비스에 적합
  • 프로그램 흐름이 이벤트에 의해 결정이 되는 Event Driven(비동기 이벤트 기반) 방식
  • 즉 요청에 대한 각 상태(state)를 정해서, event가 발생하면 event를 처리
  • 적은 수의 스레드로 효율적인 일 처리 가능 -> 스레드당 할당되는 메모리도 작음 -> context switching 비용 적음 -> cpu소모 적음
  • 모듈 개발이 어려우며, 다양한 모듈이 없는 것이 단점
  • .htaccess를 지원하지 않아, ReWrite나 특정 디렉토리에만 권한부여 하는 것이 어려움

정리

  • Apache는 요청 당 스레드 또는 프로세스가 처리, Nginx는 비동기 이벤트 기반으로 처리
  • 최근 대용량의 정적파일 및 큰 규모의 사이트가 많아짐에 따라 대량 접속에도 적은 리소스를 사용하며 빠르게 서비스를 할 수 있는 웹 사이트가 대세가 됨
  • 이로인해 Nginx가 각광 받기 시작
  • 하지만 Apache 2.4가 발표되면서 Nginx에 대응 시작
  • 그래도 Nginx가 성능면에서는 크진 않지만 더 뛰어남
  • 하지만 PHP모듈등을 직접 적재가능한 구조적 특징상 복잡한 사이트의 경우 Apache가 유리, 손쉬운 셋팅도 한 몫
  • 안정성, 확장성, 호환성은 Apache가 성능은 Nginx가 우세

'개발 > Infrastructure' 카테고리의 다른 글

Proxy Server  (5) 2020.05.18
스케일 아웃 / 스케일 업 / 로드밸런싱  (8) 2020.05.13
아파치(Apache)인증 설정 (Basic, Digest)  (6) 2019.10.23
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함