IntelliJ CE에서 스프링 부트 디버깅 하기

내가 프로그래밍을 할때 주로 사용하는 IDE는 IntelliJ이다. 회사에서는 라이센스를 구매해 주기 때문에 Ultimate 버전을 사용하고, 집에서 간단한 예제 코드등을 실행할때는 무료버전인 Community Edition을 사용한다.

지금 공부하고 있는 책의 예제 코드가 메이븐 + 스프링부트 프로젝트여서 코드를 돌려보기 위해 IntelliJ Community Edition 에 import하고 디버깅을 하기 위해 braekpoint를 걸었으나 걸리지 않는 문제가 발생했다.

breakpoint가 걸리지 않는다..

이상하다 싶어 Ultimate 버전에 import 하고 똑같이 braekpoint를 걸어 디버깅을 시도 해봤는데 아무 이상 없이 디버깅이 잘 되었다. 뭐가 다른걸까 하고 봤는데 스프링 부트를 실행시키는 방법에 차이점이 있었다.

Ultimate 버전은 공식적으로 Spring boot 통합 환경을 지원해준다. 그래서 IntelliJ가 지원하는 Spring boot Run Configuration 기능을 이용해 애플리케이션을 실행시켰고, CE버전은 Spring boot 환경을 지원하지 않기 때문에 maven 명령어인 spring-boot:run으로 실행하였다. Ultimate 버전에서도 maven 명령어로 스프링 부트를 실행하면 디버깅을 할 수 없는 문제가 똑같이 발생했다.

IntelliJ Ultimate가 지원하는 Spring boot run configuration maven run configuration

원인은 아직 잘 모르겠으나 Spring boot가 내장 톰켓을 사용하기 때문인것 같았다. 디버깅 할 수 있는 방법이 없을까 하다가 원격 디버깅 기능을 이용해 문제를 해결하였다.

먼저 원격 디버깅 세션을 활성화 하기 위해 아래와 같이 VM Option을 추가해준다.
-Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"
VM Option 설정 화면

그런 다음, Edit configuration -> + 버튼 클릭 -> Remote Debug Configuration을 만들어 준다.

remote debug configuration. 기본값을 그대로 사용했다.

마지막으로 디버깅을 하기 위해선 먼저 만든 maven run configuration 으로 애플리케이션을 실행한 다음, 두번째로 만든 remote debug configuration을 실행하면 된다. (물론 debug 모드로 실행해야 한다.)

번거롭긴 하지만 위 방법을 이용하면 IntelliJ CE에서도 Spring boot 지원 없이 디버깅을 할 수 있다.

Share