본문 바로가기
Web Development/Spring Legacy

[Spring / Legacy / Error] taglib의 http://www.springframework.org/tags 와 dispatcherservlet의 bean이 읽히지 않는 현상

by 감자맹고우 2022. 4. 5.
728x90
반응형

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 버전과 일치하는 버전을 찾아야했다.

 

다행히, 버전과 관련해서는 아래의 사이트와 같이 친절한 안내가 있어 쉽게 찾을 수 있었다.

 

 

egovframework:rtea3.9_overview [eGovFrame]

표준프레임워크 실행환경은 응용SW의 구성기반이 되며 응용SW실행 시 필요한 기본 기능을 제공하는 환경을 의미한다. 즉 전자정부 업무 구현을 목적으로 개발된 프로그램이 사용자가 의도하는

www.egovframe.go.kr

 

//pom.xml
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>4.3.22.RELEASE</version>
</dependency>

 

위와 같이 호환 버전인 4.3.22 릴리즈 버전으로 버전을 변경해주었고, 정상 동작하는 것을 확인할 수 있었다!

 

🤞 도움이 되셨기를 바랍니다. 한 번의 클릭과 댓글은 어딘가의 누군가에게 진실로 큰 힘이 됩니다. 🐱‍🏍

 

728x90
반응형

댓글