애플리케이션 빌드하고 실행하기

스프링 부트 애플리케이션을 실행하면 톰캣 서버를 자동으로 시작시키는 것을 볼 수 있다.

이게 어떻게 가능한 거지? 분명 톰캣은 물론이고 톰캣에 애플리케이션을 설치 하지도 않았는데 말이다.

스프링 부트 애플리케이션에는 실행에 필요한 모든 것이 포함되기 때문이다. 톰캣은 스프링 부트 애플리케이션의 일부다.

Spring Boot DevTools

개발 중에 편리한 도구를 제공한다.

  • 코드가 변경될 때 자동으로 애플리케이션 재시작

  • 브라우저로 전송되는 리소스가 변경될 때 자동으로 브라우저 새로고침

  • 템플릿 캐시(템플릿의 파싱 결과를 캐시에 저장해서 매번 파싱되지 않도록 하기 위함) 자동으로 비활성화

어떻게 이게 가능할까?

  1. 애플리케이션은 JVM에서 두 개의 클래스 로더에 의해 로드된다. 하나는 자바 코드, 속성 파일, src/mian/경로에 있는 모든 것과 함께 로드 → 자주 변경될 수 있는 것 나머지 클래스 로더는 의존성 라이브러리와 함께 로드 → 자주 변경되지 않음

  2. 변경했을 때 DevTools는 프로젝트 코드를 포함하는 클래스 로더만 다시 로드하여 스프링 애플리케이션 컨텍스트를 다시 시작시킨다. ( 다른 클래스 로더와 JVM은 그대로 두기에 재시작하는데 시간을 단축해준다. ) 하지만, 의존성 변경이 적용될 수 없기에 의존성 추가, 변경 그리고 삭제할 때는 직접 새로 시작해야 한다.

  3. LiveReload 서버를 활성화 이 서버와 부합되는 LiveReload 브라우저 플러그인과 연결될 때, 변경을 감지하여 자동으로 새로고침된다. (크롬, 사파리, 파이어폭스 브라우저 플러그인이 있음)

  4. localhost:8080/h2-console 에 접속하여 H2 콘솔을 볼 수 있다. JDBC URL : jdbc:h2:mem:testdb, 사용자명: sa 로 접속한다.

Intellij DevTools 활성화 하기

  • maven dependency 추가 pom.xml

  • command(ctrl) + shift + a 를 눌러 아래 Registry...를 클릭한다.

  • 아래 표시된 체크박스를 선택한다.

  • Command + , 로 Setting 창을 띄우고 "Build project automatically" 체크박스 선택

  • 웹 브라우저에 LiveReload 확장 프로그램 설치 후 enable (LiveReload 아이콘을 클릭하면 enable)

Spring Auto-Configuration(자동-구성)

빌드 명세서 pom.xml 파일에서 Web, Thymeleaf 의존성을 선언했는데 이 두 의존성은 다음 내용을 포함하고 있다.

  • 스프링 MVC 프레임워크

  • 내장된 톰캣

  • Thymeleaf와 Thymeleaf 레이아웃 dialect

p29.. 아직 이해 안됨

리뷰

이 단계를 진행하면서 작성한 코드는 단 몇 줄밖에 안된다. 그런데도 타코 클라우드 홈페이지가 실행된다니..

프레임워크를 사용하는 데 필요한 코드 작성은 거의 요구되지 않는다. 즉 애플리케이션의 요구를 충족하는 코드에 집중할 수 있다. 이 얼마나 편리한가.

Last updated