본문 바로가기

웹 개발/Spring Boot

Spring Boot) 1. 개발 환경의 변화와 자바

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 로 패키징하면 클래스 파일들이 저장되는 폴더
    |— libs (jar)
    • JAR 형식의 외부 라이브러리
    • 사용자 정의 클래스 로더, 웹 애플리케이션 컨테이너의 로더를 통해 클래스패스에 추가됨
    • 웹 애플리케이션 클래스 로더 = 사용자 정의 클래스 로더
  • |— WEB-INF (web xml)
  • 컨테이너 시작 → 컨텍스트 초기화 → WEB-INF/classes 파일 검색해서 로딩 → WEB-INF/libs 에 있는 JAR 파일 로딩

References

  • 스프링 부트로 배우는 자바 웹 개발 (윤석진) 기술서를 참고하여 정리한 내용입니다.