개발/Spring Boot Framework

웹 애플리케이션 컨테이너

펭귀니 :) 2019. 12. 18. 22:51

출처 : 윤석진, 『스프링 부트로 배우는 자바 웹 개발』, Jpub

웹 애플리케이션 컨테이너(Web Application Container)란?

웹 애플리케이션이 배포되는 공간.

웹 서버 vs 웹 애플리케이션 서버

웹 서버 : HTML과 같은 정적 파일을 전달해주는 역할을 하는 서버

웹 애플리케이션 서버(WAS) : PHP, JSP와 같은 동적인 페이지들을 생성 가능한 서버 (자바 계열에서는 웹 애플리케이션 컨테이너)

그럼 WAS가 어떻게 웹 애플리케이션을 인식하고 동작시킬까?

클래스 로더(class loader)

"Write one, run anywhere" 이 실행할 수 있게 한 기술이 바로 클래스 로더이다.

자바 코드를 컴파일하면 해당 코드는 JVM에서 실행 가능한 상태가 된다. 이때 JVM이 클래스를 로딩하는 과정에서 필요한게 클래스 로더이다.

ClassNotFoundException Error는 클래스 로더가 추가 된 라이블리나 클래스를 인지하지 못해서 발생하는 오류.

클래스 로더의 네 가지 특징

1. 구조가 계층적이다. 상위 클래스 로더에서 하위 클래스 로더를 갖는 방식. 최상위 클래스 로더는 부트스트랩 클래스 로더이다.

2. 클래스 로딩을 위임할 수 있다.

3. 클래스 로더는 가시적인 규약이 있다. (가시적인 규약이란? 클래스를 로딩할 때 가능한 범위)

4. 클래스 언로딩 불가능이다. 클래스 로더가 로딩한 클래스를 언로딩할 수 없으므로 GC가 동작하거나 WAS가 재시작할 때 초기화된다.

클래스 로더의 네 가지 유형

부트스트랩 클래스 로더 - JVM 런타임 실행을 위해 기반이 되는 파일들을 로드 (rt.jar)

확장 클래스 로더 - 자바 최상위 객체인 Object를 포함한 자바 API를 로드

시스템 클래스 로더 - 클래스 패스에 포함된 클래스들을 로드

사용자 정의 클래스 로더 - 독립적인 영역이 필요한 WAS를 여기에 만들어서 사용한다.

WAR(Web Application Resource)파일의 특성

웹 어플리케이션 컨테이너는 WAR파일의 WEB-INF폴더를 기준으로 클래스 파일들을 로드한다.

배포하기 위해 WAR로 패키징하면 클래스 파일들은 WEB-INF 하위 classes폴더에 저장된다. lib 폴더에는 JAR형식의 외부 라이브러리들이 있는데, 사용자 정의 클래스 로더에 의해 클래스 패스에 추가된다.

web Archive
└- /content directory
    └- *.html
    └- *.js
    └- *.css
    └- /WEB-INF
        └- /classes
            └- *.class
        └- /libs
            └- *.jar
        └- web.xml

'개발 > Spring Boot Framework' 카테고리의 다른 글

spring boot에서 euc-kr 요청 받기  (0) 2023.10.12
@Controller와 @RestController 차이점  (0) 2021.06.03
Spring, Spring Boot란?  (0) 2019.12.11