ejyoo's 개발 노트

[Mac/IntelliJ/Gradle/Spring Boot 3.1.4] 자동빌드 설정 (SpringBoot - devTools) 본문

BackEnd/Spring Boot

[Mac/IntelliJ/Gradle/Spring Boot 3.1.4] 자동빌드 설정 (SpringBoot - devTools)

ejyoovV 2023. 10. 1. 20:11

.java 확장자를 가진 파일에 직접 코드를 작성하고 프로젝트 런을 돌리면 '빌드'라는 과정을 거치게 된다.

빌드는 여러 과정이 있지만 대표적으로 Java 컴파일러가 '컴파일' 하는 과정이다.

 

.java 파일을 Java 컴파일러(Javac) 는 .java 파일을 받아서 바이트 코드로 변환하고 ,

그 결과를 .class 파일로 저장하는데, 이 바이트 코드는 JVM (Java Virtual Machine) 에서 실행하게 된다.

 

그렇다면 코드를 수정하고 빌드를 일일히 돌리는게 아니라 자동화 할 수 없을까?

자동화하는 방법, 그것은 바로 Spring Boot에 devTools를 사용하면 된다.

그러면 코드를 수정할 때, 자동으로 빌드를 돌리게 되어 최신의 코드를 class파일로 만들 수 있다.

 

이를 위해서는 몇가지 설정이 필요하다.

Spring Boot 버전에 따라 설정 방법이 다르지만

현재 내가 만든 프로젝트의 버전은 Spring Boot 3.1.4 버전이므로 이것과 비슷한 메이저 버전의 프로젝트를 갖고 있다면,

아래의 방법으로 자동 빌드를 설정할 수 있겠다.

 

구글에서 이와같은 설정을 위해 검색을 하게되면, 정보가 방대하여 후퇴한 정보들이 많으므로

시간을 버리지 않았으면 좋겠다.

 

아래부터 자동 빌드 설정관련한 설정들이다. IntelliJ 한글버전이므로 참고하여 봤으면 좋겠다.

 

빌드 옵션 설정

command + , 를 입력하여 IntelliJ 프로젝트 설정을 연다.

 

build.gradle 의존성 추가

dependencies {
    implementation 'org.springframework.boot:spring-boot-devtools'
}

의존성을 설정한 뒤 Gradle 컴파일러에서 획득한 runtimeClasspath 에 추가한 devtools가 있는지 확인한다.

 

IntelliJ 재시작

 

첫 빌드 실행 

빌드를 실행하면 [restartedMain] 키워드를 가진 로그가 보인다.

 

최종확인

코드를 수정한 뒤 프로젝트의 build - 수정한 class 파일이 최신의 내용을 갖고있는지 확인한다.

자동으로 빌드가 돌려지는 시점에 아래와 같이 표시된다.

 

최종 정리

위의 자동 빌드를 수행하기 전에 IntelliJ Idea 의 기능을 이해해보아야 한다.

IntelliJ에서 코드를 수정한 파일은 따로 저장을 할 필요가 없다. 이는 class 파일에 적용되는 것이 아닌 그냥 '로컬파일' 만 저장된다.

자동으로 저장되는 것을 확인하려면 아무 java 파일을 수정하고 파일을 닫았을 때,

저장하라는 메시지가 표시되지 않을뿐더러, 다시 파일을 열었을 때 이전에 수정한 내용이 그대로 유지된다.

 

그러나 build 파일을 열어서 .class 파일을 보았을 때, 변경사항이 반영되지 않음을 확인할 수 있다.

이것에 대한 이유는 빌드가 발생하지 않아서이다.

그래서 변경 사항을 적용하여 이벤트를 발생시키려면 항상 서버를 다시 구축하거나 다시시작해야한다.

 

어떠한 시점에 트리거를 발생시켜 클래스 경로 변경을 모니터링하고 클래스 경로에 변경이 있는 경우에 다시 시작을 발생시킨다.

보통 Command + Shift + F9로 수동 빌드로 돌리지만, 

spring-boot-devtools 에서 devtool이 트리거를 실행시켜 자동으로 빌드를 시키고 .class 파일을 최신상태로 만들어준다.

 

그런데 이 시점이, 불분명하다. 이 시점에 대해서 언젠가는 알게될 것이라고 믿어본다.

일단 그 시점이 열려있는 창간 이동? 왔다갔다 하면 무조건 빌드가 되었다. 원리는 뭔지 잘 모르겠다.