Backend/Spring+Boot

spring-boot-maven-plugin 디버깅 하기

findmypiece 2022. 5. 31. 11:04
728x90

spring boot 가 많이 활성화 된 상황에서 프로젝트를 로컬에서 실행하는 방법은 매우 간단하다. 그냥 부트스트랩 클래스를 run 하면 된다.

 

그런데 간혹 갑자기 맡게된 프로젝트에서 이게 안되고 spring-boot-maven-plugin 을 통해서만 구동이 가능하게 구성된 프로젝트들이 있다. 즉, 로컬에서는 아래와 같이 mvn 플러그인 실행만으로 프로젝트를 구동할 수 있는 것이다.

mvn spring-boot:run

 

그런데 문제는 이렇게 프로젝트를 띄우면 debug 모드가 지원되지 않아 breakpoint 에서 실행이 중단되지 않는다. 디버깅이 불가능하다는 말이다.

 

이때는 프로젝트를 띄울 때 원격 디버그 포트를 지원하도록 하고 해당 포트로 붙어서 서비스를 호출하면 우리가 원하는 데로 breakpoint 를 활용해서 디버깅을 해볼 수 있다.

 

intellij 기준 방법은 아래와 같다.

 

1. spring-boot-maven-plugin 에 JVM 인수를 추가한다.

<project>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <jvmArguments>
                        -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
                    </jvmArguments>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

 

공식 메뉴얼에 보면 아래와 같이 cli 인자로 지정할 수도 있다고 나오는데 도무지 지정이 되질 않아서 이 방법은 그냥 포기했다..

mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"

 

2. 우상단에서 아래와 같이 디버그 서버를 구성한다.

디버그 서버 구성은 1번에서 adress 를 5005로 지정했다면 이름 재정의 말고는 딱히 건들것은 없을 것이다.

 

3. 구성한 디버그 서버를 디버그 모드로 실행한다.

 

이제 1번에서 띄운 서버 기준으로 서비스를 호출하면 로컬에 띄운 디버그 서버로 인해 로컬 프로젝트에 디버깅이 적용되어 breakpoint 를 활용할 수 있다.

 

 

https://github.com/spring-projects/spring-boot/issues/875
https://docs.spring.io/spring-boot/docs/2.0.1.RELEASE/maven-plugin/examples/run-debug.html
728x90