프로젝트 이관관련해서 일이 하나 내려졌는데,
새로운 서버에 기존 프로젝트를 옮기는 일이었다. 하지만 이왕지사 jdk 버전과 tomcat 버전을 업그레이드해 달라고 요청이 왔다.
크게 오류 날 것은 없다고 생각하여, 로컬에서 테스트 해보고, 잘 되어 큰 걱정 없이 운영서버에 포팅하는 중에 오류가 났다.
며칠 이러쿵 저러쿵 방법을 강구하다가 결론은 소스 내에 혼재되어 있는 스프링버전을 통일시키기로 했다.
현재 3버전과 4 버전 일부가 합쳐져 있었는데
이왕이면 높은 버전으로 바꾸고 싶었으나, 내가 결정할 부분은 아니었다 보니.....
최대한 버전은 건드리지 말자 하셨기에 그렇게 하기로 했다.
그래서 수정방향은 아래와 같다.
jdk는 1.7 ->1.8
tomcat 7 -> 9
springFramework 3.0.5 -> 3.2.2 -> 3.2.9
처음에 3.2.2로 정했던 이유는
여기 프로젝트 내에 스프링 4.x의 일부가 들어있던 원인과 같았다.
뭐 여기는 pom.xml에서 관리하는 게 아닌 lib를 추가하여 관리하다보니 약간의 혼재도 가능했는듯 ?
이 프로젝트는 pom.xml에 maven으로 관리하는게 아니라 lib파일을 삭제 추가 하는 식으로 진행하였다
[진행순서]
1. lib 폴더 내에 있는 spring-*-4.x.jar파일들을 전부 삭제
2. 3.0.x jar만 있는 상태에서 오류가 나거나 하는 부분을 새로운 버전(3.2.x)으로 덮어쓰기 하면서 소스 수정
3. 오류가 다 잡히면, org.springframework-*-3.0.x.RELEASE.jar파일들도 삭제하는 식으로 진행하였다.
여기서 초반에 3.2.2 로 결정한 부분이 나온다.
3.2.2로 정한 이유는 3.0.5로 두었을 때 여기 logback이 설정되어 있는데, 아래 부분에서 오류가 나기 때문이었다.
심각: Context initialized 이벤트를 [ch.qos.logback.ext.spring.web.LogbackConfigListener] 클래스의 인스턴스인 리스너에 전송하는 동안 예외 발생
java.lang.NoClassDefFoundError: org/springframework/web/util/ServletContextPropertyUtils
at ch.qos.logback.ext.spring.web.WebLogbackConfigurer.initLogging(Unknown Source)
at ch.qos.logback.ext.spring.web.LogbackConfigListener.contextInitialized(Unknown Source)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4716)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5172)
해당 클래스가 정의되어있지 않다고 하는데 이, org/springframework/web/util/ServletContextPropertyUtils 이 클래스는
아래 사이트에 가 보면 since 3.2.2라고 되어있음.
아, 3.0.5에는 없어서 오류가 나는것 같다.
그렇다면 3.2.2 버전으로 결정 땅땅!
하지만
이렇게 결정하고 진행하는데 갑자기 또 복병이 생겼다.
여기서 3.2.9의 버전으로 결정한 이유가 나온다.
아래와 같은 오류가 계속 나온것.
org.springframework.core.NestedIOException: ASM ClassReader failed to parse class file - probably due to a new Java class file version that isn't supported yet
이 오류는 이래저래 검색해보니,
스프링 환경에서 자바 7이하에서 자바 8로 업그레이드 할 때 많이 보인다고 하는데
이 오류는 Spring 3.2.8 이하에서 생길수 있는 오류라고 한다.
1. java 7 로 컴파일
2. Spring 버전을 4이상으로 업그레이드
3. Spring Framework 버전 3.2.9 이상으로 업그레이드
위의 방법으로 해결할 수 있다고 한다.
휴 다행
Spring 3.2.9 에서도 위의 오류가 해결되었다고 하니 그렇다면 버전은 다시 3.2.9로 변경!
lib폴더 내에 jar 파일로 넣다보니 jar파일을 구해야 하는데 이건 아래 사이트에서 쉽게 구할 수 있다.
사이트 주소 : https://mvnrepository.com/
여기 사이트에서 원하는 라이브러리를 검색해서 원하는 버전으로 다운받으면 된다.
이렇게 하나하나 지우고 넣고 실행을 반복하고 있는데 갑자기 또 오류가 난다.
java.lang.IncompatibleClassChangeError: class org.springframework.core.type.classreading.ClassMetadataReadingVisitor has interface org.springframework.asm.ClassVisitor as super class
뭔 오류인가 이건 또 하고 찾아보니,
3.2버전 이후 부터는 spring-asm 라이브러리가 spring-core에 기본 포함되어 있어서 기존 라이브러리를 삭제 하라는 내용이라고 한다.
그렇군!
아직 3.0.5버전의 srping-asm을 삭제하지 않아 생긴 오류.
위 사이트에서 spring asm을 검색해보니 3.1.4버전이 마지막으로 더이상 스프링버전도 없더라
이렇게 해서 대강 스프링 3.0.5 에서 3.2.9로 버전 업그레이드는 완료했다.
다음주에 서버에 다시 포팅할 예정.
로컬에서는 잘 되니 서버에도 잘 되었으면 좋겠다.
'IT 웹개발 > 스프링(Spring)' 카테고리의 다른 글
[SpringBoot] 프로젝트 실행했는데 Whitelabel Error Page 오류 날때 (1) | 2023.11.24 |
---|---|
[Spring boot] 스프링 부트로 프로젝트 생성 java 버전을 지정해도 계속 17로 설정되는 경우 (0) | 2023.07.26 |
[Spring] 이클립스에서 Tomcat에 DataSource를 JNDI로 설정하기(JDBC -> JNDI) (0) | 2022.05.10 |
[Spring] MesageSource 설정하기 - 공통 메시지 처리 (with 다국어처리) (0) | 2022.05.06 |
[SpringBoot] 스프링부트 DB 설정 중 오류 (0) | 2022.03.29 |