목차

반응형

이클립스에서 빌드 후, 프로젝트를 서버에 배포 할 때 자주 발생하는 오류로 평소 주변 사람한테는 메이저 마이너 오류라고 일컫어서 말한다.


이미 인터넷 상에 많이 나와있는 오류로 원인은 현재 서버에서 사용하고 있는 JDK 버전과 빌드하여 배포하고자 하는 프로젝트의 Class 파일의 컴파일 JDK 버전이 호환이 안되기 때문에 발생하는 문제라고 한다.

그중에서도 51.0은 JDK 1.7을 지칭한다고 한다.


근데 필자의 경우 매우 헤맸던것이 분명 자바 버전은 1.7을 가리키고 있는데 위의 에러가 발생 한 것 이다.


해결하는 방법은 크게 두 가지다.

1. 서버의 JDK 버전을 업그레이드 -> 현재 서버에 다른 프로젝트가 많이 들어가 있어서 불가능


2. 프로젝트의 빌드 컴파일 JDK를 다운그레이드 -> 가능하지만 상황에 따라(maven 라이브러리들의 버전 호환x) 불가능한 경우도 있음.


결국 2번 방식을 택하기로 하였다.


현재 프로젝트의 jdk 버전은 java -version 명령어를 통하여 확인한다.(사실 이렇게 확인하면 틀릴수도 있다.)


버전을 확인해보니 1.7이었다. 아니 분명 빌드를 1.7기준으로 했는데 이클립스 로컬에서는 잘 작동하였지만 서버에 배포를 하고 가동을 해보니 오류가 나서 매우 당황했다.


일단은 JDK를 1.6으로 낮춰서 컴파일 한 뒤에, 프로젝트를 배포해보았다.

그랬더니 이번에는 또 java.lang.NoSuchMethodError 에러가 난다.

하 빡쳐 ... 분명 JDK 문제같은데 log 관련된 클래스가 제대로 작동을 안해서 그런 것 같아보인다.


그러던 도중 로그상에 찍힌 jar파일의 경로를 확인해보니까 라이브러리 밑에 있단는 것을 깨닫고 pom.xml의 maven 설정을 확인해보았더니 아니나 다를까 문제가 발생한 jar파일이 그곳에 적혀있었다.


그리고 해당 라이브러를 추적해보니 결국 해당 라이브러리를 포함하고 있는 최상위 라이브러리의 이름은 spring-context 4.0.9였다.

여기서 jdk를 낮추면 spring-context 버전도 낮추어야한다는 것을 깨달았다.

그래서 jdk를 낮춰서 빌드한 뒤에 spring context 버전도 낮춰서 빌드를 해보았으나 프로젝트에서 필수적으로 같이 구동해야하는 라이브러리들의 버전들도 맞지가 않아서 오류가 많이 발생하였다.

상사한테 물어보니 걔네들도 jdk 버전에 맞춰서 버전을 낮춰주면 된다고는 했는데 복잡해질수도 있으니까 그냥 jdk 버전을 맞춰서 프로젝트 배포하는 것이 편하다고 하였다.

그래서 jdk 버전을 낮춰서 작업하는 것은 포기하기로 하였다.


그리고 여기서 알게된 충격적인 사실


사실 내가 배포하려고 했던 서버의 jdk 버전이 1.7이 아니었던 것 이다.

jdk가 1.6 1.7 둘다 깔려있었고 기본적으로 linux 서비스에 등록된 java는 1.7이지만 톰캣에서 구동할때 사용하는 jdk는 1.6을 가리키고 있던 것 이었다.

그러니까 안되지 ㅡㅡ


톰캣을 구동하기 위한 스크립트 catalina.sh를 열어보면


위와 같이 JAVA_HOME으로 JDK의 경로에 대한 환경변수를 설정하는 부분이 있다.


echo $JAVA_HOME을 통하여 현재 톰캣에서 사용중인 java 경로를 확인한다.


bin에 java가 있어서 해당 자바 파일로 버전을 확인해보았다.


jdk 버전이 1.6이다.


결국 톰캣으로 JDK 1.7을 사용하는 서버에 새로 옮겨서 배포해보았더니 귀신같이 잘 된다.


반응형