1. 웹 애플리케이션 컨테이너
웹 애플리케이션이 배포되는 공간
- 웹 서버 : 정적 파일 제공하는 서버
- 웹 애플리케이션 서버 : 동적 페이지를 생성 가능한 서버 (= 웹 애플리케이션 컨테이너, WAS)
1.1 클래스 로더
Write once, run anywhere, 한번 작성하면 플랫폼에 상관없이 쓸 수 있다.
- 자바 코드 작성 → 컴파일 → JVM에서 실행 가능한 상태
- JVM에서 클래스를 실행하기위해 클래스 로더가 필요
- ClassNotFoundException : 클래스 로더가 라이브러리나 클래스를 인식하지 못해서 발생하는 오류로 클래스패스에 추가하면 해결
1.1.1 특징
- 계층적 구조 (상위 → 하위)
- 최상위 : 부트스트랩 틀래스 로더
- 클래스 로딩 위임 가능
- 가시적인 규약(클래스 로딩 시 가능한 범위)가 있음
- 자식 클래스 로더는 클래스 로딩 요청 위임을 통해 부모 클래스 로더가 로딩한 클래스를 찾을 수 있음
- 부모 클래스 로더는 자식 클래스 로더가 로딩한 클래스 알 수 없음
- 클래스 언로딩 불가능 → 가비지 컬렉션 또는 WAS 재시작시 초기화
1.1.2 유형
순서대로 상 → 하 계층 구조
- 부트스트랩 클래스 로더
- JVM 런타임 실행을 위한 기반 파일 로드
- rt.jar 파일과 연관
- 확장 클래스 로더
- 부스스트랩 로더 로딩 끝난 후 자바 최상위 객체인 Object + 자바 API 로드
- ext 폴더 하위에 있는 JAR 파일과 연관
- 시스템 클래스 로더
- 이후, 클래스패스에 포함된 클래스 로드
- 사용자는 시스템 클래스 로더가 로드하는 클래스 패스 영역에만 접근 가능
- 사용자 정의 클래스 로더
- 독립적인 영역이 필요한 경우의 WAS → 시스템 클래스 로더 하위에 사용자 정의 클래스 로더 만들어 사용
- 톰캣 설치 위치 : CATALINA_HOME : WAS에서 생성한 클래스 로더를 기준으로 동작하기 위함
2. WAR 파일
WEB-INF 폴더에 자바 관련 규약을 포함시켜 패키징하여 웹으로 배포하기 위한 파일 Web Application Archive
- 로컬 실행 프로그램 → JAR로 패키징해서 배포
- 웹 → WAR로 패키징해서 배포
- 웹 애플리케이션 컨테이너는 WAR 파일의 WEB-INF 폴더를 기준으로 클래스 파일 로드
2.1 디렉토리 구조
—Web Archive
|— content directory (webapp/web)
- html, css, javascript 등 정적 자원 관리를 위한 폴더
- 브라우저 상에서 이 폴더에 직접 접근 가능
- WEB-INF 하위에 이 폴더를 두는 추세|— classes (java)
- WAR 로 패키징하면 클래스 파일들이 저장되는 폴더
- JAR 형식의 외부 라이브러리
- 사용자 정의 클래스 로더, 웹 애플리케이션 컨테이너의 로더를 통해 클래스패스에 추가됨
- 웹 애플리케이션 클래스 로더 = 사용자 정의 클래스 로더
- |— WEB-INF (web xml)
- 컨테이너 시작 → 컨텍스트 초기화 → WEB-INF/classes 파일 검색해서 로딩 → WEB-INF/libs 에 있는 JAR 파일 로딩
References
- 스프링 부트로 배우는 자바 웹 개발 (윤석진) 기술서를 참고하여 정리한 내용입니다.
'웹 개발 > Spring Boot' 카테고리의 다른 글
Spring Boot) 4. 스프링 부트 웹 개발 (2) | 2021.04.28 |
---|---|
Spring boot) 3. 스프링 프레임워크 (0) | 2021.04.28 |
Spring Boot) 2. 서블릿 Servlet (0) | 2021.04.28 |
Spring Boot) Spring Boot 프로젝트 예제로 기초 이해하기 / Building an Application with Spring Boot (0) | 2021.04.22 |
Spring Boot) Gradle이란 (0) | 2021.04.22 |