본문 바로가기
Spring Boot/스프링 부트로 배우는 자바 웹 개발

개발 환경의 변화와 자바

by 코리늬 2018. 7. 9.

페이스북 이벤트로 스프링 부트로 배우는 자바 웹 개발이라는 이벤트에 당첨되어서 책을 받았는데, 마침 필요하던 책이라

알고리즘과 병행해서 같이 공부해보려한다.


 

스프링 부트

- 무거워진 스프링 프레임워크의 문제를 해결하기 위해 스프링 부트(Spring Boot)가 만들어졌다.

- 설정 자동화(auto configure)를 이용해 스프링 MVC모듈의 DispatcherServlet설정, JDBC DataSource 설정 등 웹 개발에 필요한 인프    라성 코드를 제공해 줌으로써 복잡한 XML 설정을 하지 않아도 개발을 할 수 있다.

- 또한 실행 시 임베디드 톰캣을 이용해 main 메소드로 실행 할 수 있다. (이건 무슨소리인지 잘 모르겠다.)


웹 어플리케이션 컨테이너 (Web Application Container) = WAS

- 웹 어플리케이션이 배포되는 공간을 뜻한다.

- 웹 서버 : 일반적으로 HTML과 같은 정적 파일들을 전달해 주는 역할을 하는 서버

- 웹 어플리케이션 서버(Web Application Server, WAS) :  PHP, JSP, ASP같은 언어를 사용해 동적인 페이지들을 생성 가능한 서버

여기서 WAS가 어떻게 웹 어플리케이션을 인식하고 동작시키는지 알기 위해서는 클래스로더를 알아야한다.


클래스 로더

- 자바 코드를 작성한 후 컴파일 하면 해당 코드는 JVM에서 실행 가능한 상태가 되고, 이 JVM이 클래스를 실행하기 위해 클래스를 로    딩하는 과정이 필요한데 이 과정을 수행하는 역할을 한다.

- ClassNotFoundException : 새로운 프로젝트를 로컬에서 실행할 때 ClassNotFoundException과 같은 에러를 만나게 되는데, 이는        클래스 로더가 추가된 라이브러리나 클래스를 인식하지 못해 발생하는 오류이다.

  따라서, 클래스패스(Class Path)에 해당 모듈이나 라이브러리를 추가하면 오류는 사라진다.


클래스 로더의 특징

1. 계층적 구조 : 상위 클래스 로더에서 하위 클래스 로더를 갖는 방식

2. 클래스 로딩 위임 가능 

3. 가시적인 규약 : 클래스 로딩시 자식 클래스는 부모 클래스 로더가 로딩한 클래스를 찾을 수 있지만, 부모 클래스는 자식 클래스가       로딩한 클래스를 알 수 없다.

4. 클래스 언로딩 : 클래스 로더가 로딩한 클래스들을 언로딩 할 수없다. 그러므로 가비지 컬렉터가 동작하거나 WAS가 재시작할 때       초기화된다.


클래스 로더의 유형

부트스트랩 클래스 로더 : JVM 런타임 실행을 위해 기반이 되는 파일들을 로드

확장 클래스 로더 : 자바의 최상위 객체인 Object를 포함한 자바 API로드

시스템 클래스 로더 : 클래스패스에 포함된 클래스들을 로드

사용자 정의 클래스 로더 : 독립적인 영역이 필요한 WAS의 경우 사용자 정의 로더를 만들어 사용


WAR 파일의 특성

- 배포할 때 로컬 실행 프로그램은 JAR로 패키징하고 웹은 WAR로 패키징한다.

- 압축 파일에 자바 관련 규약이 포함된 파일을 말하며, WEB_INF 폴더를 가리킨다.

- WAR = webapp = web

- HTML, CSS, JavaScript, JSP 등 정적 자원을 관리하기 위한 폴더.

- libs 폴더에는 JAR형식의 외부 라이브러리가 있는데 사용자 정의 클래스로더, 웹 어플리케이션 컨테이너의 로더를 통해 클래스 패스    에 추가된다.

'Spring Boot > 스프링 부트로 배우는 자바 웹 개발' 카테고리의 다른 글

스프링 XML 설정  (0) 2018.07.25
세션  (0) 2018.07.12
필터와 쿠키  (0) 2018.07.12
서블릿 활용  (0) 2018.07.11
서블릿 설정, 서블릿 내부 동작  (0) 2018.07.09

댓글