IT 지식

Web Server 와 Web Application Server (WAS) 란?

JasonM 2023. 5. 22. 11:26
반응형

웹 서버(Web Server)와 웹 어플리케이션 서버(WAS)는 일반적으로 웹 사이트나 Web based system의 콘텐츠에 대한 사용자 요청을 처리하는 공통 목적을 위해 이 두 가지 유형의 서버가 함께 사용됩니다. 웹 서버와 애플리케이션 서버의 속성을 정의한 표준 문서는 없지만 일반적으로 용어를 이해하는 방법을 살펴보겠습니다.
 

웹 서버(Web Server) 란?

웹 서버의 기본 작업은 웹 사이트의 정적 콘텐츠(HTML 페이지, 파일, 이미지, 비디오 등)에 대한 클라이언트의 요청을 수락하고 이행하는 것입니다. 클라이언트는 대부분 브라우저 또는 모바일 애플리케이션이며 요청은 웹 서버의 응답과 마찬가지로 HTTP(Hypertext Transfer Protocol) 메시지 형식을 취합니다.

 

웹 애플리케이션 서버 (WAS) 란?

 
웹과 기업의 기간 시스템 사이에 위치하면서, 웹 기반 분산 시스템 개발을 쉽게 도와주고 안정적인 트랜잭션 처리를 보장해 주는 일종의 미들웨어 소프트웨어 서버.

 
3계층 웹 컴퓨팅 환경에서 기존 클라이언트/서버 환경의 애플리케이션 서버와 같은 역할을 하며, 클라이언트와 서버 환경에서 트랜잭션 처리 및 관리와 다른 기종 시스템 간의 애플리케이션 연동 등을 주된 기능으로 하고 있다.
 
웹 애플리케이션 서버의 기본 작업은 동적 콘텐츠를 생성하는 일반적으로 비즈니스 로직이라고 하는 것에 대한 액세스를 클라이언트에 제공하는 것입니다. 즉, 비즈니스, 서비스 또는 애플리케이션에서 제공하는 특수 기능(예: 로그인 한 사용자의 계정에 따라 동적으로 Database의 정보를 조회)을 제공하기 위해 데이터를 변환하는 코드입니다. 응용 프로그램 서버의 클라이언트는 종종 응용 프로그램 자체이며 웹 서버 및 기타 응용 프로그램 서버를 포함할 수 있습니다. 애플리케이션 서버와 해당 클라이언트 간의 통신은 HTTP 메시지 형식을 취할 수 있지만 웹 서버와 해당 클라이언트 간의 통신에는 필요하지 않습니다. CGI의 변형을 포함하여 많은 다른 프로토콜이 널리 사용됩니다.
 
 

웹 서버와 웹 어플리케이션 서버 조합

 
일반적인 환경에서 정적 콘텐츠와 동적으로 생성된 콘텐츠를 모두 제공하는 웹 사이트는 정적 콘텐츠용 웹 서버와 애플리케이션 서버를 실행하여 콘텐츠를 동적으로 생성합니다. 리버스 프록시(reverse proxy) 및 로드 밸런서(load balancer)는 하나 이상의 웹 서버와 하나 이상의 웹 애플리케이션 서버 앞에 위치하여 먼저 요청된 콘텐츠 유형에 따라 트래픽을 라우팅한 다음 구성된 로드 밸런싱 알고리즘에 따라 트래픽을 라우팅 합니다. 대부분의 로드 밸런서 프로그램은 웹 애플리케이션 서버 아키텍처를 단순화하는 리버스 프록시 서버이기도 합니다.
 


 

[참고] 그렇다면 Spring Boot에서는 어떻게 정적 컨텐츠와 동적 컨텐츠를 분리하는가?

 
Spring Boot는 다음 디렉토리에 있는 정적 웹 리소스를 자동으로 추가합니다.

  • /META-INF/resources/
  • /resources/
  • /static/
  • /public/

Spring Boot에서 WebMvcAutoConfiguration의 소스 코드를 검토하여 작동 방식에 대한 세부 정보를 분석할 수 있습니다. 클래스 경로 리소스의 위치를 포함하는 문자열 배열에 대한 다음 선언을 볼 수 있습니다.
 

private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
		"classpath:/META-INF/resources/", "classpath:/resources/",
		"classpath:/static/", "classpath:/public/" 
};

 
추가로 ResourceHandlerRegistry 코드에서 리소스의 위치가 Spring MVC ResourceHandlerRegistry에 추가된 것을 볼 수 있습니다.

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
	if (!registry.hasMappingForPattern("/webjars/**")) {
		registry.addResourceHandler("/webjars/**").addResourceLocations(
				"classpath:/META-INF/resources/webjars/");
	}
	if (!registry.hasMappingForPattern("/**")) {
		registry.addResourceHandler("/**").addResourceLocations(
				RESOURCE_LOCATIONS);
	}
}

 
web AutoConfiguration은 Spring Boot가 @Controller 어노테이션을 참고해서 클래스를 식별할 때 실행됩니다. 결과적으로 이러한 위치에 정적 웹 리소스를 배치할 수 있으며 애플리케이션에 액세스할 때 Tomcat에서 이러한 정적 자산을 제공합니다.

반응형