스프링 부트로 배우는 자바 웹 개발- 부트 장점, 클래스 로더

Workwork·2022년 8월 29일
0

SpringBootWeb

목록 보기
1/2

스프링부트의 장점

스프링 프레임워크는 처음에 경량이었으나 시간이 갈수록 다른 프레임워크에 비해 무겁고 설정할 것이 많아짐. 부트는 이를 해결.

  • 설정 자동화를 통해서 스프링 MVC 모듈의 DispatcherServlet 설정, JDBC DataSource 설정 등 웹 개발을 하는데 필요한 인프라성 코드들을 제공해 줌으로써 복잡한 XML 설정을 하지 않아도 개발을 시작할 수 있다.
  • 실행 시에도 임베디드 톰캣을 이용해 main 메서드로 실행 가능.
  • 클라우드 환경에서 별도 작업 없이 스프링 부트 이용하면 시간 단축 가능.

웹 애플리케이션 컨테이너

  • 웹 애플리케이션이 배포되는 공간
  • HTML과 같은 정적 파일들을 전달해주는 역할을 하는 서버를 웹 서버라고 하고, PHP, JSP, ASP와 같은 언어들을 사용해서 동적인 페이지를 생성하는 서버를 웹 애플리케이션 서버(혹은 자바 계열에서 웹 애플리케이션 컨테이너)라고 한다.

클래스 로더

  • Java --> 한번 작성하면 플랫폼에 상관없이 쓸 수 있다. : 클래스 로더가 이 특징 그 자체..
  • 자바 코드를 작성한 후 컴파일 하면 해당 코드는 JVM에서 실행 가능한 상태가 된다. 이때 JVM이 클래스를 실행하기 위해서 클래스를 로딩하는 과정이 필요한데 그걸 수행해주는게 클래스 로더.
  • ClassNotFoundException을 얘가 내는 것..^^ 얘가 추가된 라이브러리를 인식 못해서..

클래스 로더의 특징

  • 구조가 계층적. 상위 클래스 로더에서 하위 클래스 로더를 갖는 방식. 최상이 클래스 로더가 부트스트랩 클래스 로더.
  • 클래스 로딩을 위임할 수 있다.
  • 가시적인 규약이 있다. 즉, 클래스를 로딩할 때 가능한 범위가 있다. 자식 클래스 로더는 클래스 로딩 요청 위임을 통해 부모 클래스 로더가 로딩한 클래스를 찾을 수 있지만, 부모 클래스 로더는 자식 클래스 로더가 로딩한 클래스를 알 수 없다.
  • 클래스 언로딩 불가능. 클래스 로더로 로딩한 애들을 언로딩할 수 없으므로 가비지 컬렉터가 동작하거나 WAS가 재시작할 때 초기화된다.

클래스 로더의 유형

  • 부트스트랩 : JVM 런타임 실행을 위해 기반이 되는 파일들을 로드 / rt.jar와 연관
  • 부트스트랩 로더가 로딩이 끝나면 확장 클래스 로더가 자바의 최상위 객체인 Object를 포함한 자바 API를 로드한다. / 자바 홈 폴더 하위의 ext 폴더 하위에 있는 JAR 파일들과 연관이 있다.
  • 확장 로더의 로드가 끝나면 시스템 클래스 로더가 클래스패스에 포함된 클래스를 로드. / 사용자는 클래스 패스 영역에만 접근 가능.
  • CATALINA_HOME 으로 톰캣 설정 위치를 지정하는 것은 WAS에서 생성한 클래스 로더를 기준으로 동작하기 위함이다.

WAR

  • 배포할 때 로컬 실행은 JAR로, 웹은 WAR로 패키징 한다.
  • WAR은 압축 파일에 자바 관련 규약(WEB-INF 폴더)이 포함됨. 웹 애플리케이션 컨테이너가 WAR의 WEB-INF 폴더를 기준으로 클래스 파일을 로드함.

(둘 사이가 뭔지 이해 안감ㅠ)

웹 애플리케이션 클래스 로더는 클래스 로더의 유형 중에서 시스템 클래스 로더 하위에 사용자가 정의한(User-Defined) 클래스 로더에 해당한다.

웹 애플리케이션 컨테이너는 웹 애플리케이션 자체 API를 제공하기 위해 컨테이너를 로드하는 클래스 로더와, 사용자가 추가한 JSP나 WAR를 다루는 ServletContext Loader를 사용한다.

컨테이너가 시작되고 콘텍스트가 초기화되면 서블릿 스펙의 권장 사항에 따라 WEB-INF/classes 파일을 먼저 검색해서 로딩하고, 그 후가 WEB-INF/lib에 있는 JAR를 로드.

profile
나만 알아보면 된다는 마음으로 작더라도 조금씩

0개의 댓글