WEB 서버 vs WAS 서버


WEB과 WAS가 무엇인지, 차이점은 무엇인지 알아보자

WEB Server

HTML과 같은 정적 파일을 전달해주는 역할

Web Application Container(WAS)

Web Application이 배포되는 공간. PHP, JSP, ASP와 같은 동적인 페이지들을 생성 가능한 서버. Web Application Server(WAS)라고도 하고 Web Application Container 라고도 함.

class loader

자바 코드를 작성한 후 컴파일하면 해당 코드는 JVM(Java Virtual Machine)에서 실행 가능한 상태가 된다. 이때 JVM이 클래스를 실행하기 위해서는 클래스를 로딩하는 과정이 필요하다. 그 과정을 수행해주는 역할을 하는 것이 클래스 로더이다.

class loader 특징

  1. 구조가 계층적이다.
  2. 클래스 로딩을 위임할 수 있다.
  3. 클래스 로더는 가시적인 규약(클래스를 로딩할때 가능한 범위)가 있다.
  4. 언로딩이 불가능하다.

class loader 유형

boot strap class loader

최상위 class loader. JVM 런타임 실행을 위해 기반이 되는 파일 로드. rt.jar파일과 연관.

extension class loader

boot strap class loader로딩이 끝나면 확장클래스로더(extension class loader)가 자바의 최상위 객체인 Object를 포함한 자바 API를 로드.

system class loader

extension class loader 로딩이 끝나면 system class loader가 classpath에 포함된 클래스를 로드.

user-defined class loader

독립적인 영역이 필요한 경우 WAS에서 system class loader하위에 사용자 정의 로더를 만들어 사용.

WAR파일

보통 배포할때 실행프로그램은 JAR로 , 웹은 WAR로 패키징한다. WAR는 압축파일에 자바 관련 규약이 포함된것이다. WEB-INF 폴더에 자바관련규약이 들어있으며 WAS는 WAR파일의 WEB-INF폴더를 기준으로 class 파일들을 로드한다. content directory는 정적자원 관리를 위한 폴더로 WEB-INF 폴더 밑에 위치하며 WAR로 패키징하면 클래스파일들은 WEB-INF\classes 폴더에 저장된다. libs 폴더에는 JAR 형식의 외부 라이브러리들이 있다. JAR라이브러리들은 사용자 정의 클래스 로더, 웹 어플리케이션 컨테이너 로더를 통해 클래스 패스에 추가된다.

web Arcive(war)  
 ㄴ content directory  
 ㄴ WEB-INF  
    ㄴ classes  // ---> java  
    ㄴ lib      // --> jar  

WAS 동작

WAS는 web application 자체 API를 제공하기 위해 컨테이너를 로드하는 클래스 로더와 사용자가 추가한 JSP나 WAR파일들을 다루기위한 Servlet Context Loader를 사용한다. 컨테이너가 시작되고 context가 초기화되면 Servlet 스펙의 권장 사항에 따라 WEB-INF/classes 파일을 먼저 검색해서 로딩하고 그 후에 WEB-INF/libs에있는 jar파일을 로딩한다.




© 2020. by berrrrr

Powered by berrrrr