본문 바로가기

programming study/web

아파치, NginX, 톰캣

본 내용은 얄팍한 코딩사전님의 아파치, NginX, 톰캣이 뭔가요? (+ 웹서버, WAS, 로드밸런싱, 프록시) 강의를 토대로 작성하였습니다.

 

1. 서버와 클라이언트

  • 같은 컴퓨터라도, 서비스를 제공하냐 받느냐에 따라 서버와 클라이언트로 나누어 짐
    • 서비스를 제공 -> 서버
    • 서비스를 받음 -> 클라이언트

 

2. 웹 서버

  • 어떤 컴퓨터로 하여금 서버 역할을 하도록 해주는 소프트 웨어
    • 아파치, NginX, IIS가 대표적인 제품
  • 컴퓨터를 서버들 중에서도 웹 사이트를 제공하는 서버로 만들어주는 서비스

 

웹서버의 기본 역할

  • 서버의 특정 폴더에 HTML, CSS, JavaScript 및 자원(이미지 등)이 저장 되어 있음
  • 서버에 지정된 웹사이트 주소로 접속하면 이 폴더를 외부에서 접근 가능하도록 개방
  • 정적웹 제공
    • 블로그 페이지나 회사 소개 페이지 처럼 그 안의 내용이 바뀔 일이 없는 웹피이지를 고정된 HTML, CSS, JavaScript로 제공
  • 동적웹 또한 모듈로 제공 가능
    • APM: 아파치, PHP, MySQL을 연동시켜서 동적인 PHP 웹사이트를 제공
    • 아파치에 PHP를 해석할 수 있는 모듈을 세팅해 놓으면 웹 접근이 있을 때 마다 PHP로 적인 코드대로 MySQL에 있는 데이터들을 가져와서 웹 페이지 제공
    • NginX로도 가능

 

3. WAS

  • Web Application Server(WAS)
  • 톰캣, Jetty, Undertow
  • 최근에는 스프링 부트에 톰캣이 내장
  • Java. JSP로 만든 웹 또는 API 어플리케이션을 실행할 때 톰캣이 사용
  • 동적 사이트를 전문적으로 처리
  • Java 바이트 코드로 컴파일되는 언어들에 사용

 

톰캣 사용법

  • 스프링으로 코딩한 웹앱을 war 파일로 빌드
  • 빌드한 것들에는 .class 파일들과 jsp, 이미지, CSS, JavaScript 파일 등이 압축되어 있음
  • 톰캣은 여러 폴더들과 파일들이 들어있는 하나의 폴더로 이루어짐
    • 그 중 특정 폴더에 war 파일을 넣고 명령어를 실행하면 스프링 서비스가 톰캣을 사용해서 구동
    • 최근에는 스프링을 톰캣이 들어있는 jar 파일로 빌드해서 배포

 

정리

  • Java 외의 진영에서는 WAS라는 용어를 사용하지 않는 경우도 있음
  • 공통적인 것은 웹 서버를 앞단에 둠
    • 접대자
  • 그 뒤에서 WAS가 구동 됨
    • 요리사
  • 톰캣 또한 방문자에게 직접 동적 웹을 제공하거나 정적 리소스를 전달할 수 있음
    • 아파치 없이 톰캣만으로도 웹 사이트를 제공하는 것이 가능

 

4. 웹 서버의 추가적인 기능

  • WAS로도 충분히 웹 사이트를 제공할 수 있지만, 웹 서버의 추가적인 기능으로 인해 웹 서버와 WAS를 같이 사용
  • 어떤 웹 프레임워크든 앞 단에 웹 서버를 둠
  • 다양한 보안 기능을 제공
  • 수 많은 모듈 제공
    • 뒷 단 WAS 들이 정상 동작하는 지 주기적으로 헬스 체크
    • 서비스를 안정적으로 제공하기 위한 다양한 기능 제공

 

Reverse Proxy

  • Forward Proxy
    • 사용자들이 사이트를 접속할 때 아이피를 숨기기 위해 프록시를 두어 데이터를 주고 받음
  • Forward Porxy와 반대로 서버의 정보를 클라이언트에게 감춤
    • 보안
    • 서버 내부적으로 파일이 어느 폴더에 있는지, 서비스가 몇 번 포트로 돌고 있는지 등을 감춤

 

Reverse Porxy 캐싱

  • Foward Proxy 캐싱
    • 사용자 관점에서, 한 번 받아온 이미지 등 정적 파일이 사용자와 서버 사이에 있는 프록시 서버란 곳에 쌓임
    • 다음 요청 때 서버까지 다시 찾아갈 필요 없이 바로 받아와 짐
  • Reverse Proxy 캐싱
    • 서버단에서의 캐시
    • 서버로 찾아오는 사용자들이 자주, 반복적으로 찾을 만한 리소스들을 쌓아두어서 바로 건네 줌
  • 어느 쪽이든 사용자 입장에서는 빨라짐

 

로드 밸런싱

  • 여러 요청이 있을 때 요청을 분산하는 것
  • 지속성을 위해서 여러 WAS가 구동 됨
  • 하나의 WAS가 재부팅 되는 동안 웹 서버가 다른 WAS로 요청을 분산
  • 사용자 입장에서 서비스를 끊김없이 사용할 수 있음
  • 여러 인스턴스로 작업을 분산하면 성능 측면에서 나음
    • 인스턴스: 프로세스, 프로그램이 돌아가고 있는 상태
  • 정리해서, 다수의 인스턴스로 서비스를 구동하고 이를 웹서버로 밸런싱

 

아파치 vs. NginX

  • 아파치는 예전부터 두루 사용되어 온 것
  • NginX가 아파치의 점유율을 따라잡는 추세
  • 아파치는 다중 프로세스
    • MPM, 멀티 프로세스 모듈 방식
    • mpm_prefork: 사용자가 올 때마다 프로세스를 새로 생성하는 방식
    • mpm_worker: 한 프로세스 안에서 스레드를 새로 생성하는 방식
    • 컨텍스트 스위칭 방식을 사용하므로 컴퓨터 자원을 많이 사용
    • 이를 보완하기 위해, 아파치도 이벤트 방식을 도입
    • 다양하고 검증된 기능을 중시
  • NginX는 이벤트로 일을 처리
    • event driven: 사용자가 오는대로 집중하여 일을 처리
    • 컴퓨터에 부담이 덜하여 성능상 아파치보다 우위
    • 성능과 가벼움 중시

 

5. 정리

  • 웹 서버와 WAS의 역할이 겹치는 부분이 있지만,
  • 각자가 특화된 부분이 있어 이를 활용
  • 웹서버보안, 운영에 특화
  • WAS는 뒤에서 동적 요소들을 만드는 것에 집중

Reference

[얄팍한 코딩사전] 아파치, NginX, 톰캣이 뭔가요? (+ 웹서버, WAS, 로드밸런싱, 프록시)

'programming study > web' 카테고리의 다른 글

DNS(2)  (0) 2021.12.03
DNS(1)  (0) 2021.12.02
IP주소(2)  (0) 2021.12.01
IP주소(1)  (0) 2021.11.30
문자 인코딩, 유니코드, UTF-8  (0) 2021.11.29