본 내용은 얄팍한 코딩사전님의 아파치, 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
'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 |