스프링 부트 개발 도구
스프링 부트 1.3은 스프링 부트 DevTools라는 또 다른 모듈을 제공합니다. DevTools는 Developer Tool의 약자입니다. 이 모듈의 목적은 스프링 부트 애플리케이션으로 작업하는 동안 개발 시간을 단축하는 것입니다. Spring Boot DevTools는 변경 사항을 선택하고 애플리케이션을 다시 시작합니다.
pom.xml 파일에 다음과 같은 종속성을 추가하여 프로젝트에 DevTools를 구현할 수 있습니다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime<scope >
</dependency>
스프링 부트 DevTools의 특징
스프링 부트 DevTools는 다음과 같은 기능을 제공합니다.
- 속성 기본값
- 자동 재시작
- 라이브 리로드
- 원격 디버그 터널링
- 원격 업데이트 및 다시 시작
속성 기본값
Spring Boot은 속성 스프링을 포함하는 템플릿 기술 Thymeleaf를 제공합니다. 캐싱을 사용하지 않고 애플리케이션을 다시 시작하지 않고도 페이지를 업데이트할 수 있습니다. 그러나 개발 중에 이러한 속성을 설정하면 항상 몇 가지 문제가 발생합니다.
spring-boot-devtools 모듈을 사용할 때 속성을 설정할 필요가 없습니다. Tymeleaf, Freemarker, Groovy Templates에 대한 개발 캐싱 중에는 자동으로 비활성화됩니다.
응용 프로그램에 속성 기본값을 적용하지 않으려면 application.properties 파일에서 configprop:spring.devtools.add-properties[]를 false로 설정할 수 있습니다.
자동 재시작
자동 재시작은 Java 클래스를 다시 로드하고 서버 측에서 구성하는 것을 의미합니다. 서버측 변경 후 동적으로 배포되고 서버가 재시작되며 수정된 코드가 로드됩니다. 주로 마이크로 서비스 기반 응용 프로그램에 사용됩니다. 스프링 부트는 두 가지 유형의 클래스 로더를 사용합니다.
변경되지 않는 클래스(3번째 Jar)가 기본 ClassLoader에 로드됩니다.
현재 개발 중인 클래스는 restart ClassLoader에 로드됩니다.
응용 프로그램이 다시 시작되면 다시 시작한 ClassLoader가 버려지고 새 ClassLoader가 채워집니다. 따라서 기본 ClassLoader는 항상 사용 가능하고 채워집니다.
spring.devtools.restart.enabled 속성을 false로 사용하여 서버의 자동 재시작을 비활성화할 수 있습니다.
DevTools는 항상 클래스 경로 리소스를 모니터링합니다.
재시작을 트리거하는 방법은 클래스 경로를 업데이트하는 것뿐입니다.
DevTools가 제대로 작동하려면 별도의 응용 프로그램 클래스 로더가 필요했습니다. 기본적으로 메이븐은 응용프로그램 프로세스를 포크합니다.
자동 재시작은 LiveReload에서 잘 작동합니다.
DevTools는 애플리케이션 컨텍스트의 종료 후크에 의존하여 다시 시작하는 동안 종료합니다.
실시간 재로드
Spring Boot DevTools 모듈에는 LiveReload라는 임베디드 서버가 포함되어 있습니다. 이를 통해 리소스를 변경할 때마다 응용프로그램이 자동으로 브라우저 새로 고침을 트리거할 수 있습니다. 자동 새로 고침이라고도 합니다.
spring.devtools.livereload.enabled 속성을 false로 설정하여 LiveReload를 비활성화할 수 있습니다.
Chrome, Firefox 및 Safari용 브라우저 확장 기능을 제공합니다. 기본적으로 LiveReload가 활성화되어 있습니다. LiveReload는 다음 경로에서 작동합니다.
- /META-INF/maven
- /META-INF/resources
- /resources
- /static
- /public
- /templates
또한 위의 경로를 제외하여 브라우저에서 자동 다시 로드를 비활성화할 수 있습니다. 예를 들어 다음과 같습니다.
spring.devtools.restart.exclude=public/**, static/**, templates/**
spring.devtools.restart.additional-paths 속성을 사용하면 다른 추가 경로를 볼 수 있습니다. 예를 들어 다음과 같습니다.
spring.devtools.restart.additional-paths=/path-to-folder
추가 경로를 제외하고 기본값을 유지하려면 spring.devtools.restart.additional-exclude 속성을 사용하십시오. 예를 들어 다음과 같습니다.
spring.devtools.restart.additional-exclude=styles/**
한 번에 하나의 LiveReload 서버를 실행할 수 있습니다.
응용 프로그램을 시작하기 전에 다른 LiveReload 서버가 실행되고 있지 않은지 확인하십시오.
IDE에서 여러 응용 프로그램을 시작하면 첫 번째 LiveReload만 지원합니다.
원격 디버그 터널링
스프링 부팅은 HTTP를 통해 JDWP(Java Debug Wire Protocol)를 애플리케이션에 직접 터널링할 수 있습니다. 포트 80과 443만 노출하는 인터넷 클라우드 공급자에 대한 애플리케이션 배포도 수행할 수 있습니다.
원격 업데이트 및 재시작
DevTools가 제공하는 또 다른 방법은 원격 응용 프로그램 업데이트 및 재시작을 지원하는 것입니다. 로컬 클래스 경로에서 파일 변경 사항을 모니터링하여 원격 서버로 푸시한 다음 다시 시작됩니다. 또한 이 기능을 LiveReload와 함께 사용할 수 있습니다.
트리거 파일을 사용
자동 재시작은 빈번한 재시작으로 인해 개발 시간이 느려질 수 있습니다. 이 문제를 제거하기 위해 트리거 파일을 사용할 수 있습니다. 스프링 부트는 트리거 파일을 모니터링하고 해당 파일에서 수정 사항을 감지합니다. 서버를 재시작하고 이전 변경사항을 다시 로드합니다.
응용 프로그램에 spring.devtools.restart.trigger-file 속성을 추가하여 트리거 파일을 구현할 수 있습니다. 파일은 내부 또는 외부일 수 있습니다.
예를 들어 다음과 같습니다.
spring.devtools.restart.trigger-file=c:/workspace-sts-3.9.9.RELEASE/restart-trigger.txt
스프링 부트 개발 도구 예제
1단계: Spring Initializr https://start.spring.io/을 사용하여 메이븐 프로젝트를 만듭니다.
2단계: 그룹 이름과 아티팩트 ID를 제공합니다. 그룹 이름 com.javatpoint 및 아티팩트 ID spring-boot-devtools-example을 제공했습니다.
3단계: spring-boot-starter-web 및 spring-boot-devtools 종속성을 추가합니다.
4단계: Generate 버튼을 클릭합니다. 프로젝트의 Jar 파일을 다운로드합니다.
5단계: Jar 파일의 압축을 풉니다.
6단계: 폴더를 STS로 가져옵니다. 수입하는 데 시간이 걸립니다.
파일 -> 가져오기 -> 기존 메이븐 프로젝트 -> 찾아보기 -> spring-boot-devtools-example -> finish 폴더를 선택합니다.
프로젝트를 성공적으로 가져오면 STS의 패키지 탐색기 섹션에서 다음 디렉터리를 볼 수 있습니다.
7단계: SpringBootDevtoolsApplication.java를 예제로 사용하고 Java Application으로 실행합니다.
그런 다음 응용프로그램에서 변경(일부 파일 또는 코드 편집 또는 제거)을 수행하고 변경 내용을 저장합니다. 변경사항을 저장하는 즉시 서버가 재시작되고 변경사항을 수신합니다.
'SW > Spring Boot' 카테고리의 다른 글
Spring Boot : Spring Boot Auto-configuration 설명, 예제, 개요, 방법 (0) | 2023.03.20 |
---|---|
Spring Boot : Spring Boot Packaging 개념, 개요, 설명 (0) | 2023.03.19 |
Spring Boot : Spring Boot Starter Test 개념, 예제, 설명 (0) | 2023.03.17 |
Spring Boot : Spring Boot Starter Actuator 개념, 예제, 설명 (0) | 2023.03.16 |
Spring Boot : Spring Data JPA 개념, 예제, 설명 (0) | 2023.03.15 |