웹애플리케이션 컨테이너
- 웹 애플리케이션 컨테이너란 웹 애플리케이션이 배포되는 공간을 뜻한다. 일반적으로 HTML과 같은 정적 파일을 전달해주는 서버를 웹서버라고 하며 PHP,JSP,ASP와 같은 언어를 통해 동적인 페이지를 생성하는 서버를 웹 어플리케이션 서버라고 한다. 일반적으로 줄여서 WAS라고 부르기도 한다.
클래스로더
자바코드를 작성한 후 컴파일하면 해당 코드는 JVM에서 실행가능한 형태가 된다. 이때, JVM이 클래스를 실행하기 위해서는 클래스를 로딩하는 과정이 필요하다. 그 역할을 클래스로더가 담당한다.
클래스로더의 특징
- 계층적 구조 : 상위클래스로더 -> 하위클래스로더 (최상위 클래스 로더는 부트스트랩클래스 로더)
- 클래스 로딩의 위임
- 가시적 규약 : 클래스를 로딩할 때 가능한 범위를 뜻함.
- 클래스 언로딩 불가능 : 클래스로더로 로딩한 클래스를 언로딩할 수 없다. 클래스는 가비지컬렉터가 동작하거나 WAS가 재시작할때 초기화된다.
- 클래스로더의 유형
- 부트스트랩 클래스 로더 (bootstrap class loader - 최 상위 클래스 로더) rt.jar
- 확장 클래스 로더(extension class loader) 자바 api 로딩
- 시스템 클래스 로더(system class loader) 클래스패스에 포함된 클래스 로딩
- 사용자 정의 클래스 로더(user-defined)
WAR파일
- 배포 시, 로컬실행프로그램은 JAR로 패키징. 웹은 WAR로 패키징. 웹어플리케이션 컨테이너는 WAR파일의 WEB-INF폴더를 기준으로 클래스 파일을 로드한다.
- 웹어플리케이션 클래스로더는 사용자 정의 클래스로더에 해당한다. 웹어플리케이션 컨테이너는 웹 APP 자체 API를 제공하기 위해 ServletContextLoader를 사용한다.(JSP, WAR파일을 다루기 위해)
- 컨테이너가 시작되고 콘텍스트가 초기화 되면 WEB-INF/classes파일을 먼저 검색해 로딩하며, 후에 WEB-INF/libs에 있는 JAR파일을 로딩한다.
'SpringBoot' 카테고리의 다른 글
IoC, DI, 컨테이너 (0) | 2021.02.17 |
---|---|
스프링 : 객체지향 프로그래밍 설계원칙 [SOLID] (0) | 2021.02.16 |
스프링프레임워크 ] 빈+컨테이너, IoC패턴 (0) | 2021.02.04 |
서블릿 생명주기 (0) | 2021.02.04 |
1] SpringBoot (0) | 2021.02.01 |