출처 : 윤석진, 『스프링 부트로 배우는 자바 웹 개발』, 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 |