스프링 부트 3.0에서 h2 console 404 에러

SeungTaek·2023년 1월 3일
1
post-thumbnail

스프링 부트 3.0의 중요 변경 부분은 아래와 같다.
1. Java 17 이상을 사용해야 한다.
2. javax 패키지 이름을 jakarta로 변경해야 한다.(오라클과 자바 라이센스 문제)


문제 상황

보통 h2 db를 사용할 때는 테이블 생성 문제 때문에 1.4.200 또는 1.3.xxx 버전을 사용했었다. 이번에도 언제나 그랬던 것처럼 낮은 버전의 h2를 사용했다. 다만, 처음으로 스프링 부트 3.0을 사용했다.

문제는 h2-console이 404 에러가 뜨는 것이다.

application.yml에 spring.h2.console.enabled=true를 설정해도 계속 에러만 뜬다. 수 시간을 매달려서 해결 방법을 찾았다.
결론적으로는 h2 버전을 올려서 사용하면 해결된다.


원인

그 원인을 찾아보자.

h2-console이 정상적으로 실행되려면, 애플리케이션 실행 시 위와 같은 로그가 떠야한다. 근데 1.4.200을 사용하면 저 로그가 뜨지 않는다.

로그에 있는 클래스로 이동을 해보자.

org.springframework.boot.autoconfigure.h2;

...
@AutoConfiguration(after = DataSourceAutoConfiguration.class)
@ConditionalOnWebApplication(type = Type.SERVLET)
@ConditionalOnClass(JakartaWebServlet.class)
@ConditionalOnProperty(prefix = "spring.h2.console", name = "enabled", havingValue = "true")
@EnableConfigurationProperties(H2ConsoleProperties.class)
public class H2ConsoleAutoConfiguration {
...

대강 위와 같은 코드가 적혀있다. 여기서 @ConditionalOnClass(JakartaWebServlet.class)을 기억하자. 해당 클래스의 import는 org.h2.server.web.JakartaWebServlet 이다.

org.h2.server.web 패키지를 찾아보자.


2.1.214 버전에는 JakartaWebServlet가 있다.


1.4.200에는... 없다?

결론

위에 기술한 원인은 나의 의심일 뿐이다. 사실 정확한 원인이 맞는지, 아니면 내가 모르는 깊은 세계에 원인이 있는지는 모르겠다.

이제는 단순히 프레임워크를 사용하는 것에서 그치는 것이 아니라, 프레임워크 자체를 파악해야 함을 경험했다. 문제의 원인을 찾고, 해결하는데 큰 도움이 될 것 같다.
모 부트캠프에서는 간이 버전 스프링을 직접 구현해본다는데..

profile
I Think So!

2개의 댓글

comment-user-thumbnail
2023년 1월 10일

같은 문제 겪고 있었는데 도움 많이 되었습니다.. 감사합니다

1개의 답글