배포되는 공간을 뜻한다.
일반적으로 HTML
과 같은 정적 파일들을 전달해 주는 역할을 한는 서버를 웹 서버
라고 하고
PHP, JSP, ASP
와 같은 언어들을 사용해서 동적인 페이지들을 생성 가능한 서버를 웹 애플리케이션 서버
또는 자바 계열에서는 웹 애플리케이션 컨테이너
라고 한다.
일반적으로는 줄여서 WAS라고 부른다.
자바 코드를 작성한 후 컴파일하면 해당 코드는 JVM
에서 실행 가능한 상태가 된다.
이 때 JVM
이 클래스를 실행하기 위해 클래스를 로딩하는 과정
이 필요하다.
그 과정을 수행해주는 역할을 하는 것이 클래스 로더
이다.
우리는 종종 새로운 프레임워크를 테스트해 볼 때나 다른 사람이 만든 프로젝트를 로컬에서 실행할 때 ClassNotFoundException
과 같은 에러를 만나게 되는데 , 해당 에러는 클래스 로더가 추가된 라이브러리 또는 클래스를 인식하지 못해서 발생하는 오류이다.
1. 구조가 계층적이다.
상위 클래스 로더에서 하위 클래스 로더를 갖는 방식이며, 최상위 클래스 로더는 부트스트랩 클래스 로더다.
2. 클래스 로딩을 위임할 수 있다.
3. 클래스 로더는 가시적인 규약이 있다.
가시적인 규약이란?
- 클래스를 로딩할 때 가능한 범위를 말한다.
자식 클래스 로더는 클래스 로딩 요청 위임을 통해 부모 클래스 로더가 로딩한 클래스를 찾을 수 있지만, 부모 클래스 로더는 자식 클래스 로더가 로딩할 클래스를 알 수 없다.
- 즉 클래스 로더로 로딩한 클래스들을 언로딩할 수 없다.
- 클래스 로더가 로딩한 클래스를 언로딩할 수 없으므로 가비지 컬렉터가 동작하거나 WAS가 재식할 떄 초기화한다.
클래스 로더에는 네 가지 유형이 있다.
부트스트랩
클래스 로더확장
클래스 로더시스템
클래스 로더사용자정의
클래스 로더WAR
파일의 특성배포 할 때 로컬 실행 프로그램은 JAR
로 패키징하고 웹은 WAR
로 패키징한다.
WAR
는 압축 파일에 자바 관련 규약이 포함된 것이며 바로 WEB-INF
폴더다
웹 애플리케이션 컨테이너는 WAR
파일의 WEB-INF
폴더를 기준으로 클래스 파일들을 로드한다.
WAR
는 webapp
또는 web
과 같은 이름으로 HTML, JavaScript, CSS, JSP
파일처럼 브라우저에서 보여줘야 하는 정적 자원을 관리하기 위한 폴더
이다.