웹 서버와 WAS
웹 서버
- HTTP 기반으로 동작하며, 정적 HTML, CSS, JS, 이미지, 영상같은 정적 리소스를 제공한다.
- 예) NGINX, APACHE
WAS
- 웹 애플리케이션 서버의 약자로, 프로그램 코드를 실행해서 애플리케이션 로직을 수행한다.
- 서블릿, JSP, 스프링MVC 등의 기술을 통해 동적 HTML, HTTP API(JSON) 등을 제공한다.
- 기본적으로 웹 서버의 기능도 제공하지만, WAS는 애플리케이션 코드를 실행하는데 더 특화되어 있다.
- 예) Tomcat
웹 시스템 구성
- 정적 리소스는 웹 서버가 처리하고 WAS는 애플리케이션 로직 처리를 전담하는 구조로, 웹 서버는 애플리케이션 로직같은 동적인 처리가 필요하면 WAS에 요청한다.
- 정적 리소스가 많이 사용되면 웹 서버를 증석하고, 애플리케이션 리소스가 많이 사용되면 WAS를 증설하면 되므로 효율적인 리소스 관리가 가능하다.
- 또한, 장애 가능성이 높은 WAS에 비해 웹 서버는 잘 죽지 않기 때문에 WAS, DB 장애 시 웹 서버가 오류 화면을 제공할 수 있다.
서블릿
- 서블릿을 지원하는 WAS를 사용하면 비즈니스 로직 부분을 제외한 모든 일을 WAS가 대신 해주기 때문에, 개발자는 의미있는 비즈니스 로직에만 집중할 수 있다.
- 서블릿은 톰캣 같은 WAS를 설치하고, 그 위에 서블릿 코드를 클래스 파일로 빌드해서 올린 다음 톰캣 서버를 실행한다.
- 하지만 스프링 부트는 톰캣 서버를 내장하고 있으므로 톰캣 서버 설치없이 편리하게 서블릿 코드를 실행할 수 있다.
- 톰캣처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 하며, 서블릿 컨테이너는 서블릿 객체의 생명주기를 관리한다.
- HTTP 요청 시 WAS는 Request, Response 객체를 만들어서 서블릿 객체를 호출한다.
- 서블릿은 개발자가 HTTP 요청 메시지를 편리하게 사용할 수 있도록 HTTP 요청 메시지를 파싱하고, 그 결과를 HttpServletRequest 객체에 담아서 제공한다.
- 또한 개발자는 HttpSerlverResponse 객체를 통해 HTTP 응답 정보를 편리하게 입력하고, WAS가 해당 객체에 담겨있는 내용으로 HTTP 응답 메시를 생성한다.
'Web' 카테고리의 다른 글
HTTP 기초 (0) | 2022.03.05 |
---|---|
동시 요청과 멀티 쓰레드 (0) | 2022.03.05 |
캐시와 조건부 요청 (0) | 2022.03.05 |
HTTP 헤더 정보 (0) | 2022.03.05 |
HTTP 상태 코드 (0) | 2022.03.05 |