공부를 하면서 세 용어를 계속 혼용해서 사용하다 보니.. 점점 헷갈리기 시작하였다.
이참에 제대로 이해하고 넘어가기 위해 정리해보려고 한다.
둘을 간단하게 정리한 내용은 다음과 같다.
https://jmxx219.tistory.com/45?category=1053819
가장 헷갈렸던 부분은 Web Container와 WAS의 용어였다. 거기에 Servlet Container 까지 합쳐지면서 더 혼동 오기 시작한 것 같다.
Static vs Dynamic Pages
정적 페이지
- DB에 정보를 가져오거나 별로의 처리가 없이, 동일하게 보여주는 페이지
동적 페이지
- 요청에 따라 서버가 DB에서 정보를 가져와 일을 처리하고 결과가 포함된 파일을 보여주는 페이지
WAS(Web Application Server)
WAS = Web Server + Web Container
- J2EE의 스펙을 구현하며, Servlet이나 Jsp로 작성된 애플리케이션을 실행하는 소프트웨어(구동 환경 제공)
- WAS는 다양한 종류의 Web Container를 내장하고 있음(Servlet, JSP, EJB Container 등등)
- ex) Tomcat, JBoss, Jeus, Web Sphere 등등
Tomcat은 Servlet Container이면서도 WAS의 역할을 하고 있다.
하지만 Tomcat은 J2EE 스펙을 모두 구현하고 있지는 않기 때문에 WAS라고 칭하기도, Servlet Container라고 칭하기도 하는 것 같다.
Tomcat에 대한 내용은 추가적으로 정리할 생각이다.
Web Server
- 클라이언트가 요청한 정적 콘텐츠를 HTTP 프로토콜을 이용하여 정적 페이지를 제공(응답)
- 동적인 요청이 들어왔을 때, 해당 요청을 Web Container에 요청 전달
- 이후 처리한 결과를 받으면 클라이언트에게 응답
- Web Server는 동적 콘텐츠 처리 불가능
- ex) Nginx, Appach HTTP Server, IIS
Web Container(Servlet Container)
- WAS 내부에서 동적인 데이터들을 처리하여 정적인 페이지로 생성해주는 모듈
- 웹 서버는 정적 콘텐츠만 클라이언트에게 보낼 수 있기 때문에 동적으로 처리해야하는 부분들을 담당
- JSP, Servlet을 실행시킬 수 있는 소프트웨어
CGI(Common Gateway Interface)
웹 서버와 외부 프로그램 사이에서 정보를 주고 받는 인터페이스
웹 서버에서 동적인 데이터를 반환하기 위해서는 동적 데이터 처리를 위한 요청에 알맞은 프로그램과 그 프로그램에 알맞게 넘겨주는 중간자 역할을 하는 프로그램이 필요하다. 그 역할을 하는 것이 CGI이며 PHP, Perl, Python과 같은 언어는 Apache를 통해 CGI를 적용시키는 것이 가능하다.
하지만 Java는 CGI 적용이 불가능하여 같은 기능을 하는 컨테이너 즉, 서블릿이 필요하다.
서블릿
https://jmxx219.tistory.com/23?category=1011184
Web Server와 WAS를 같이 사용 하는 이유
WAS는 Web Server를 포함하고 있음에도 Web Server의 기능까지 수행하지 않고 따로 Web Server를 함께 사용하는 것일까?
- 웹 페이지는 정적 컨텐츠와 동적 컨텐츠가 모두 존재 ➞ 요청에 맞게 적절하게 제공해야 함
- 기능을 분리하여 서버 부하 방지
- Web Server
- 정적 콘텐츠만 처리하도록 기능을 분배하면 서버의 부담을 줄일 수 있음
- 정적 콘텐츠는 WAS까지 가지 않아도 앞단에서 빠르게 클라이언트에게 제공 가능
- WAS
- 요청에 맞는 데이터를 DB에서 가져와 로직에 맞게 처리하고 결과를 제공 -> 자원을 효율적으로 사용
- 정적 컨텐츠 요청까지 처리하면 부하가 커지고, 동적 컨텐츠의 처리가 지연되면서 수행 속도가 느려질 수 있음
- Web Server
- 효율적인 리소스 관리 가능
- 정적 리소스가 많이 사용되면 Web Server 증설
- 애플리케이션 리소스가 많이 사용되면 WAS 증설
- 논리, 물리적으로 분리하여 보안 강화
- Web Server가 뚫려도 WAS는 같이 뚫리지 않음
- 여러 대의 WAS 연결
- Load Balancing
- 서버에 가해지는 부하를 분산해주는 기술
- WebServer를 WAS 앞에 두고 플러그인 형태로 설정하면 효율적인 분산 처리가 가능해짐
- 대용량 웹 애플리케이션의 경우 무중단 운영을 위한 장애 극복에 쉽게 대응 가능
- Load Balancing
참고
'Web > Web' 카테고리의 다른 글
[WEB] JWT 및 웹 보안 이해하기 (0) | 2023.09.15 |
---|---|
[WEB] 자바 백엔드 웹 기술 역사 (0) | 2022.03.30 |
[WEB] HTML, HTTP API, CSR, SSR (0) | 2022.03.30 |
[WEB] 동시 요청 - 멀티 쓰레드 (0) | 2022.03.29 |
[WEB] 서블릿 (0) | 2022.03.29 |