본문 바로가기

WAS - WebLogic/각종 설정, 에러 조치

[weblogic] "Tomcat 에서는 잘 되는데 WebLogic 에서만 안돼요" 대응하기

WebLogic 프로젝트를 수행하다 보면 클리셰마냥 나오는 레퍼토리

"Tomcat 에서는 잘 되는데 WebLogic 에서만 안돼요. 저희는 WebLogic 잘 모르니 알아서 조치해주세요."

 

Tomcat과 WebLogic은 서로 다른 WAS 제품이므로

한 쪽에서 정상 동작하던 것이, 다른 제품에서는 에러가 발생할 수 있는 것이 당연하다.

 

WebLogic 에서 정상 동작하던 것이

WebSphere, JEUS, JBoss, WildFly, Tomcat 등에서 제대로 동작하지 않을 수 있는 것과 동일한 원리.

사실상 WAS서버 마이그레이션 하는 작업과 마찬가지.

 


 

#. 개발자 측과 서로 공유해야 할 내용 체크리스트

개발자 측과 최대한 상세히 내용을 서로 공유해야 한다.

SI/개발 업체와 엔지니어가 맡은 영역이 다르기 때문에 서로 모르는 부분이 있을 수 있다.

SI/개발 업체와 엔지니어가 서로 협업해야 원활히 문제 해결이 가능하므로

최대한 협업하는 자세를 가지며 문제를 해결 해 나가도록 하자.

 

01.

"실제로 Tomcat 서버 설치하셔서 테스트 하신건가요?"
"아님 이클립스에 임베디드 된 Tomcat 으로 테스트 하신건가요?"

 

02.

"어떤 Exception이 발생했는지 로그 확인하셨나요?"
"정확히 어떤 동작을 수행할 때, 어떤 Exception이 발생하는 상황인건가요?"

 

03.

실제로 이런 적 있었음. 에러는 발생하는데 로그 상에 관련 내용이 아무것도 없는 상황.

SI/개발 업체가 자기는 아무것도 모른다 하여 직접 logback 설정 변경하여 Exception 내용 기록하도록 조치하였음.

(로그 상에 Exception 기록된게 없어서 아무것도 모르겠다고 하는 상황)

"업무가 정상적으로 동작하지 않는데 로그 상에 아무런 Exception 내용이 없을 리 없습니다."
"log4j 혹은 logback 설정에서 특정 Exception 내용 기록을 기록하지 않도록 설정하신 것은 아닌지요?"

 


 

<엑셀 파일 다운로드 에러>

 

#. 참고 글

https://forum.katalon.com/t/usage-of-apache-poi-4-1-0-with-xmlbeans-3-1-0/48566

https://lookingfor.tistory.com/entry/javalangNoSuchFieldError-javalangNoClassDefFoundError

https://poi.apache.org/apidocs/dev/org/apache/poi/ss/usermodel/CellStyle.html

Query To Excel Shows No Data OR Excel Cannot Open the File Because the File Format or File Extension is not Valid (Doc ID 2522750.1) 

 


 

#. 서버 환경

Windows Server 2022

Oracle JAVA 1.8.0_351

WebLogic 12.2.1.4 (PSU 2022년 12월)

 


 

#. 에러 발생 시 로그 상에 Exception 기록하도록 조치

logback을 사용하고 있는 어플리케이션 이었다.

logback 설정 파일에 "false" "disable" 과 같은 키워드가 많이 있었다.

로그 파일에 내용이 과도하게 기록되지 않도록 에러가 발생하여도 Exception 내용을 기록하지 않도록 한 것.

 

에러가 발생하면 Exception 내용 확인이 가장 우선시 되어야 하는데,

에러 내용은 기록하지 않게끔 설정해놓고서,

WebLogic 탓만 하고 아무런 도움을 주지 않아 속 터지는 줄 알았음.

"에러 발생했는데 로그 상에 아무런 내용이 없어요."
"Tomcat 에서는 정상 동작하는데 WebLogic 에서만 에러 발생해요."
"이거 WebLogic 탓 아닌가요? 저희는 WebLogic 잘 몰라요. 알아서 조치해주세요."

 

logback 설정을 어떻게 수정해야 Exception을 기록하도록 조치할 수 있는지 잘 모르므로,

고객사 내 타 시스템에서 Exception을 정상적으로 기록하도록 설정된 log4j를 대신 가져와 설정해보았음.

조치 후 로그 상에서 NoSuchMethodError 발생을 확인하였음.

 


 

#. NoSuchMethodError 확인

아래 에러가 발생하였음

(첫번째 NoSuchMethodError)
DEBUG [org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver] 
Resolved [org.springframework.web.util.NestedServletException: Handler dispatch failed; 
nested exception is java.lang.NoSuchMethodError: org.apache.xmlbeans.XmlOptions.setUseDefaultNamespace(Z)Lorg/apache/xmlbeans/XmlOptions;]

(두번째 NoSuchMethodError)
DEBUG [org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver] 
Resolved [org.springframework.web.util.NestedServletException: Handler dispatch failed; 
nested exception is java.lang.NoSuchMethodError: org.apache.poi.ss.usermodel.CellStyle.setBorderBottom(Lorg/apache/poi/ss/usermodel/BorderStyle;)V]

 


 

#. 교체 및 추가한 라이브러리

poi-3.17.jar (기존 라이브러리 보다 낮은 버전으로 교체하였음)

poi-ooxml-3.17.jar (기존 라이브러리 보다 낮은 버전으로 교체하였음)

poi-ooxml-schemas-3.17.jar (신규 추가)

xmlbeans-2.6.0.jar (기존 라이브러리 보다 낮은 버전으로 교체하였음)

 

어떤 라이브러리를 교체해야 하는지는 관련 블로그 글을 통해 어느정도 확인이 가능하였으나,

그 다음으로 버전 선정이 문제되었다.

위 라이브러리 버전은 Oracle 문서에 소개된 사례를 바탕으로 선정하였다. (Doc ID 2522750.1) 

 

JDK1.8 환경의 WebLogic12.2.1.4 에서

반드시 해당 라이브러리 버전을 사용해야만 엑셀 다운로드가 정상 동작하는 것이 아니다.

SI/개발 업체가 협조해주지 않아 버전을 여러차례 바꿔보며 테스트 해 보았는데,

해당 버전으로 교체했을 시 서비스가 정상 동작하였을 뿐이다.

 

나는 개발자가 아니기 때문에

타 라이브러리들과의 의존성 문제까지 상세히 검토가 불가능하다고 의사 전달하였으며,

버전 선정은 내부적으로 검토해달라 요청하였다.

SI/개발 업체가 그마저도 하기 싫다고 하여 문제 해결이 계속 보류되었는데,

결국 내가 안내한 버전 사용하기로 결정났다.

 


 

<DevOn Framework 에러 조치>

 

#. 참고한 글

LGCNS 내부적으로 사용하는 상용 프레임워크여서 참고할 수 있는 글과 문서가 없었음.

직접 라이브러리 추가 및 교체 작업 노가다 통해 조치하였음.

언제나 그렇듯이 SI 업체와 DevOn Framework 팀에서도 WebLogic 탓만 했던 상황.

"Tomcat 에서는 정상 동작하는데 WebLogic 에서만 에러가 발생하네요."
"이건 저희 탓 아닌 것 같습니다. WebLogic에 설정 문제 있는게 아닌지요?"

 


 

#. 서버 환경

RHEL8

Oracle JAVA 1.8.0_202

WebLogic 12.2.1.4 (PSU 2023년 03월)

 

#. DevOn Framework 정보

버전 : DevOn Framework 4.5.5 20130611

JDK Build : 1.6.0_29-b11

 


 

#. ClassNotFoundError

어플리케이션 라이브러리에 devon-framework.jar 파일이 추가되면

아래 클래스에서 ClassNotFoundError가 발생하였음

org.apache.cxf.jaxrs.provider.AbstractConfigurableProvider

 


 

#. 추가한 라이브러리

cxf-2.4.0.jar

spring-context-5.3.29.jar

spring-beans-5.1.6.RELEASE.jar

neethi-3.2.0.jar

jetty-util-9.3.12.v20160915.jar

xmlschema-core-2.3.0.jar

jetty-server-9.3.12.v20160915.jar

abdera-1.1.3.jar

 

org.apache.cxf.jaxrs.provider.AbstractConfigurableProvider 클래스를 포함하는 라이브러리를 추가하고 나면

또 다른 클래스에서 ClassNotFoundError가 발생하였다.

이러한 패턴이 수차례 반복되면서, 최종적으로 위의 8개 라이브러리가 추가되었다.

 

서비스 정상 동작하도록 조치는 하였으나,

추가된 8개 라이브러리로 인해 타 라이브러리들과의 의존성 문제가 발생할 수 있다.

각 라이브러리 버전 선정은 내부적으로 검토해달라 요청하였지만,

Tomcat 에서는 문제 없는데 왜 WebLogic 에서만 8개 라이브러리가 추가되어야 하는지 모르겠다는 식으로 일관하여

속 터지는 줄 알았음.

 

결국 버전 검토 없이 내가 안내한 버전 사용하기로 결정났다.

 

한 술 더 떠서 SI/개발 업체 측에서 8개 라이브러리 추가로 인해 보안취약점이 발생할 수 있을지도 알아봐달라 하였음.

WAS 서버 내 라이브러리가 교체된 것이라면 확인 해 주어야 하겠으나,

해당 상황은 SI업체, 개발업체, DevOn Framework 팀에서 확인해야 하는 일을 나에게 떠넘기려 하는 것이므로

당연히 거부했다.

 

정말 여러모로 힘들고 지치고 답답한 프로젝트였음.