티스토리 뷰

반응형

내가 겪은 상황은 SpringBoot 는 1.4.1 버전을 사용중이었고, log4j 보안문제때문에 2.17.0 으로 변경했을때 나타난 문제이다.

 

일반적으로 NoSuchmethodError 의 경우는 버전이 변경되면서, 해당 메소드의 인자 갯수나 타입이 변경될때 나타나는 경우가 일반적이다. 그래서 이땐 해당 버전을 맞춰주면 보통 해결이 된다.

 

16:14:54.829 [main] ERROR org.springframework.boot.SpringApplication - Application startup failed
java.lang.NoSuchMethodError: org.apache.logging.log4j.core.config.ConfigurationFactory.getConfiguration(Lorg/apache/logging/log4j/core/config/ConfigurationSource;)Lorg/apache/logging/log4j/core/config/Configuration;
	at org.springframework.boot.logging.log4j2.Log4J2LoggingSystem.loadConfiguration(Log4J2LoggingSystem.java:176) ~[spring-boot-1.4.1.RELEASE.jar:1.4.1.RELEASE]
	at org.springframework.boot.logging.log4j2.Log4J2LoggingSystem.loadDefaults(Log4J2LoggingSystem.java:159) ~[spring-boot-1.4.1.RELEASE.jar:1.4.1.RELEASE]
	at org.springframework.boot.logging.AbstractLoggingSystem.initializeWithConventions(AbstractLoggingSystem.java:75) ~[spring-boot-1.4.1.RELEASE.jar:1.4.1.RELEASE]
	at org.springframework.boot.logging.AbstractLoggingSystem.initialize(AbstractLoggingSystem.java:50) ~[spring-boot-1.4.1.RELEASE.jar:1.4.1.RELEASE]
	at org.springframework.boot.logging.log4j2.Log4J2LoggingSystem.initialize(Log4J2LoggingSystem.java:148) ~[spring-boot-1.4.1.RELEASE.jar:1.4.1.RELEASE]
	at org.springframework.boot.logging.LoggingApplicationListener.initializeSystem(LoggingApplicationListener.java:299) ~[spring-boot-1.4.1.RELEASE.jar:1.4.1.RELEASE]
	at org.springframework.boot.logging.LoggingApplicationListener.initialize(LoggingApplicationListener.java:272) ~[spring-boot-1.4.1.RELEASE.jar:1.4.1.RELEASE]
	at org.springframework.boot.logging.LoggingApplicationListener.onApplicationEnvironmentPreparedEvent(LoggingApplicationListener.java:235) ~[spring-boot-1.4.1.RELEASE.jar:1.4.1.RELEASE]
	at org.springframework.boot.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:208) ~[spring-boot-1.4.1.RELEASE.jar:1.4.1.RELEASE]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:166) ~[spring-context-4.3.3.RELEASE.jar:4.3.3.RELEASE]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:138) ~[spring-context-4.3.3.RELEASE.jar:4.3.3.RELEASE]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:121) ~[spring-context-4.3.3.RELEASE.jar:4.3.3.RELEASE]
	at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:68) ~[spring-boot-1.4.1.RELEASE.jar:1.4.1.RELEASE]
	at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:54) ~[spring-boot-1.4.1.RELEASE.jar:1.4.1.RELEASE]
	at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:337) [spring-boot-1.4.1.RELEASE.jar:1.4.1.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) [spring-boot-1.4.1.RELEASE.jar:1.4.1.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1186) [spring-boot-1.4.1.RELEASE.jar:1.4.1.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1175) [spring-boot-1.4.1.RELEASE.jar:1.4.1.RELEASE]
	at mypackage.Application.main(Application.java:91) [classes/:?]

원인

원인은 log4j 관련 코드에서 메소드의 인자가 변경되면서 영향을 받은것이다. [관련링크]

다음과 같이 버전이 올라가면서, argument 갯수가 변경되면서 상위버전을 사용할때 NoSuchmethodError 가 발생된것이다.

해결방법

이 케이스에서는 가장 손쉽게 해결하는건, log4j 관련 의존성을 2.6.2 버전으로 낮추면 일단 오류는 없이 돌아가게 된다.

문제는 Log4j 보안취약점 사태가 있는데, 과거버전으로 돌아가는것은 좋은 선택이 아니다. 가장 적은 노력으로 해결하는 현실적인 대안은 SpringBoot 에서 사용하는 로거를 변경하는게 가장 쉽고 빠른 해결 방법이 아닌가 싶다. (log4j -> LogBack)

 

하지만, 이 코드가 장기적으로 계속 관리가 되어야할 코드라면 SpringBoot 를 2.x 버전대로 사용하는걸 올리는걸 추천한다.

왜냐하면? 스프링부트 1.x 버전대는 2019년 8월부로 수명을 다했고, 장기적으로 보면 2.x 업그레이드 해야 지원을 받을수 있기 때문이다.

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Migration-Guide

 

GitHub - spring-projects/spring-boot: Spring Boot

Spring Boot. Contribute to spring-projects/spring-boot development by creating an account on GitHub.

github.com

가능하다면 이번기회에 버전업 마이그레이션을 진행하도록 하자.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함