STUDY/JAVA

[JAVA] decodebase64 runtime exception

Kay.D.o0 2023. 4. 3. 23:13

최근 작업하다가 어처구니 없는 실수? 삽질을 하게되었다.

Base64.decodeBase64(data); // String data

바로 위 코드를 넣는 순간 지옥이 시작되었다.

로컬에서는 정상으로 작동하였으나,

서버에 올렸을때는 해당부분에 rumtime exception이 발생하였던 것이다.

runtime exception에 대해 정리 된 글이 많다.

간단하게 말하자면

실행단계에서 문제가 발생하였다.

근데!

추가적인 어떠한 오류 메세지도 없이 딸랑.

java.lang.runtimeexception: org.apache.commons.codec.binary.base64.decodebase64

위와 같은 메세지만 뜨는것이었다.

뭐 예를들어 NoSuchMethodError 라던가 있었으면 얼마나 좋았을가.

라이브러리는 commons-codec-1.11 이다.

근데 너무 이상하지 아니한가로컬에서는 아무리해도 정상작동을 하는데

서버에만 올리면 안되는것이그렇다고 서버에 jar파일이 없는것도 아니고..

그러다 로컬에 jar 파일 저장되어있는 라이브러리 싹 정리하고로컬에서 재시도 해보았더니

서버와 같은 오류가 뜬것이었다.

확인해보니 commons-codec을 품고있는 라이브러리가 있었으니

SAML-D-commons-codec-1.3 이라는 라이브러리 파일이었다.

해당 파일에 필요한 메소드가 있다는걸 인식하고,

commons-codec-1.11를 제거한 후

Base64.decodeBase64(data.getBytes()); // String data

SAML-D-commons-codec-1.3에 맞게 위와 같이 수정하였다.

로컬에서도 서버에서도 정상작동

 

같은 패키지 이름을 쓰고있는 두개의 라이브러리가 충돌이 일으켰는데

commons-codec보다 SAML-D-commons-codec-1.3를 인식하여

decodeBase64() 가 string 매개체를 쓰는 메소드를 찾지 못해 발생한 오류인거 같다.

결론 서버내에서는 lib 전부 지웠다가 다시 올리기때문에 다시 올리면서

SAML만 인식이 된게 아닐까 한다.

 

로컬에서 됐던건 새로운 lib를 그냥 추가하면서 인식되었기때문