스프링 부트 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
패키지를 찾아보자.
위에 기술한 원인은 나의 의심일 뿐이다. 사실 정확한 원인이 맞는지, 아니면 내가 모르는 깊은 세계에 원인이 있는지는 모르겠다.
이제는 단순히 프레임워크를 사용하는 것에서 그치는 것이 아니라, 프레임워크 자체를 파악해야 함을 경험했다. 문제의 원인을 찾고, 해결하는데 큰 도움이 될 것 같다.
모 부트캠프에서는 간이 버전 스프링을 직접 구현해본다는데..
같은 문제 겪고 있었는데 도움 많이 되었습니다.. 감사합니다