구버전의 기능들조차 다 이용하지 못하지만 그저 최신 버전을 사용하고 싶다는 이유로 많은 오류를 겪게 되는 것 같습니다.

이번 오류도 그 일환입니다.

이번에

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>6.0.0</version>
</dependency>

최신 버전의 spring-webmvc를 사용해보고자 겪은 일을 공유해드리고자 합니다.

해당 버전을 이용하려 했더니 오류가 발생하더군요. 그래서 찾아보니 최신 탐캣 버전을 사용해야 한다고 했습니다. 그래서 바로 현재기준 최신 탐캣버전인 10.0.27 버전을 설치해서 실행해 보았으나... 한번에 되리란 기대는 안했지만 역시 오류를 뱉어내더군요.

그 이유인즉, 탐캣 10 버전은 이제 Javax가 아니라 Jakarta라는 네이밍의 패키지들을 사용하기 때문이라고 합니다. 둘은 기능은 동일하다고 해도 무방한 수준이지만 네이밍이 달라졌다는 설명을 찾았습니다. 그 말은 즉, javax 네이밍의 jstl 1.2버전을 이용할 수 없다는 말이였습니다.

그래서 제 해결방법을 공유드리겠습니다.

<dependency>
    <groupId>jakarta.servlet.jsp.jstl</groupId>
    <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
    <version>3.0.0</version>
</dependency>

<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>jakarta.servlet.jsp.jstl</artifactId>
    <version>3.0.1</version>
</dependency>

https://mvnrepository.com/artifact/jakarta.servlet.jsp.jstl/jakarta.servlet.jsp.jstl-api 에서 최신버전을 참조했고,

https://mvnrepository.com/artifact/org.glassfish.web/jakarta.servlet.jsp.jstl 에서 최신버전을 참조했습니다.

스택오버플로우의 내용으로는, 두가지 패키지가 반드시 있어야 한다곤 했지만 왜 두 개가 있어야 하는지 교차검증을 해보진 않았습니다. 다만 확인한 사실은

<%@ taglib prefix="c" uri="<http://java.sun.com/jsp/jstl/core>" %>

위 코드를 jsp파일에 적용했을 때 jakarta.servlet.jsp.jstl-api 아티팩트만 적용했을 때는 여전히 빨간 글씨로 오류를 뿜어냈으나 jakarta.servlet.jsp.jstl 아티팩트를 같이 적용했더니 빨간색 글씨를 뿜어내지 않았습니다.

하지만, 이 실행 후에도 여전히 탐캣에서 오류를 뿜어내더군요. 심지어 단지 새로고침을 했을 뿐인데 404에러와 500에러를 번갈아가면서 뿜어냈습니다.

이 이유는 기존 탐캣 파일이 이미 잘못된 파일을 가지고 있는데 초기화가 안됐기 때문일 수 있다는 정보를 찾았습니다.

저는 ~\AppData\Local\JetBrains\[사용하시는 Intellij 버전 폴더]\tomcat 경로에 있는 폴더를 전부 삭제했습니다. 이것저것 실험 하느라 폴더가 9개 가량 만들어져 있었습니다.

그 뒤 실행을 한 결과 기존 탐캣9 버전을 사용하던 것과 같은 결과를 얻을 수 있었습니다. 이에 다른 분들께 조금이라도 도움이 될까 싶어 작성합니다.