Spring Legacy 프로젝트(특히, 전자정부프레임워크)를 진행하면 뜻하지 않는 많은 오류를 맞이하게 된다.
오늘은 서버 이전으로 인해 기존 프로젝트를 svn으로 내려받는 도중 bean과 uri들이 읽히지 않는 현상이 발생하여 그 해결 방법을 공유하고자 한다.
에러 발생 환경은 다음과 같다.
- 사용 환경 -
◆ eGovFramework : 3.9
◆ JDK/JRE : 1.8
◆ 형상 관리 도구 : svn
◆ IDE : Eclipse
일단, 필자가 작업한 환경은 eGovFramework의 3.10 버전이었다.
즉, 3.10 버전에서 작업한 프로젝트를 3.9 버전으로 옮겨야하는 상황이었는데, 기존 서버에서는 버전 차이에도 불구하고 문제없이 잘 돌아갔기에 원인을 짐작하면서도 쉽게 찾지 못했다.
서버 이전 후, 아니나 다를까 문제가 발생했다.
다른 것은 잘 되었는데, /src/main/webapp/common/error.jsp 와 /src/main/webapp/WEB-INF/config/egovframework/springmvc/dispatcher-servlet.xml에 X표시가 출력되었고 파일 내부의 taglib uri와 bean들에 빨간 밑줄이 가있었다.
당연히, Maven update를 하면 해결될 줄 알았지만, 전혀 해결되지 않았다.
그래서 알 수 없는 문제가 발생했을 때 다음과 같은 프로세스를 각각 진행해보았다.
1. Project > clean
2. 프로젝트 우클릭 > Run as > Maven clean & Maven install
3. 이클립스 재시작
4. Windows > Preferences > Java > Installed JREs 확인
& 프로젝트 우클릭 > Build Path > Configure ... > Java Build Path > Libraries > JRE System Library > Execution environment 확인
5. 프로젝트 삭제 > svn repository 재설정 > 다시 Check Out
6. pom.xml > dependency/spring 관련 내용 삭제/버전 변경 후 Maven Update & 원상복구 후 다시 Maven Update
7. 본인 개발 컴퓨터(eGov 3.10) / 타 개발 컴퓨터(Spring 2021-06) 에서 svn check out 진행 => 정상
[ 해결 방법 ]
과정에서, invalid LOC header 에러 등도 만났지만 주 문제는 빨간 밑줄로 받아오지 못하는 내용이었다. 그렇기 때문에 그 원인만 찾으면 된다고 생각했고, 관련 내용을 구글링하면서 문제 부분이 spring-mvc 관련 내용이라는 것을 유추할 수 있었다.
혹시나 하는 마음에 pom.xml에 spring-mvc 의존성을 검색해보았고, 없기에 spring-webmvc를 추가했다.
//pom.xml
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.19.RELEASE</version>
</dependency>
드디어, 서버가 멈추지 않고 켜졌다!
아마, EgovFramework 3.10 버전에서는 webmvc가 기본적으로 제공이 돼서 의존성을 추가할 필요가 없었나보다.
비교적 최신인 Spring 2021-06 버전은 더욱 말할 것도 없고,,, 아무튼 허무하지만 그래도 Legacy 프로젝트를 하면서 겪는 문제를 해결하다보면 화도 나지만, 그 과정에서 오히려 더 많은 것을 배우게 되는 것 같다.
그러나 아직 내 프로젝트에서는 404에러가 발생하였기에 당연히 이대로 멈출 수는 없었다.
콘솔을 살펴보니 다음의 에러가 발생하고 있었다.
java.lang.NoClassDefFoundError: Lorg/springframework/beans/factory/access/BeanFactoryReference
이 에러는 발생빈도가 높았는지 원인이 명확했다.
eGovFramework의 버전과 맞지 않는 의존성이 있기 때문에 발생한 것이고, 당연히 가장 최근에 추가한 spring-webmvc의 버전이 문제일 것이기에 eGovFramework 3.9 버전과 일치하는 버전을 찾아야했다.
다행히, 버전과 관련해서는 아래의 사이트와 같이 친절한 안내가 있어 쉽게 찾을 수 있었다.
//pom.xml
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.22.RELEASE</version>
</dependency>
위와 같이 호환 버전인 4.3.22 릴리즈 버전으로 버전을 변경해주었고, 정상 동작하는 것을 확인할 수 있었다!
🤞 도움이 되셨기를 바랍니다. 한 번의 클릭과 댓글은 어딘가의 누군가에게 진실로 큰 힘이 됩니다. 🐱🏍
댓글