본문 바로가기

Previous (20-22)/IT

logback에서 log4j를 제거하는 방법

안녕하세요.

이번에 log4j 취약점 때문에 난리도 아니네요.

특히 어제(12/15)는 추가 취약점 발견으로 인해서 log4j 1,2 버전 모두 업데이트가 필요하다고 하였습니다.

 

https://m.etnews.com/20211215000294

 

로그4j, 신규 취약점 발견...KISA "업데이트 필요"

인터넷 서버용 소프트웨어인 아파치 로그4j(Log4j)에서 추가 취약점이 발견됐다. 앞서 지난 12일 과학기술정보통신부는 로그4j 2에서 취약점이 발견됐다며 즉각 보안 업데이트를 권고했다. 한국인

www.etnews.com

 

그래서 기존에 log4j 1버전, 그리고 2.15 이하 버전을 쓰시는 분들은 2.16버전으로 업데이트를 해야 합니다.

업데이트 방법은 Apache 공식 홈페이지 내용 참고하시면 됩니다.

 

https://logging.apache.org/log4j/2.x/faq.html

 

Log4j – Frequently Asked Questions

Copyright © 1999-2021 The Apache Software Foundation. All Rights Reserved. Apache Logging, Apache Log4j, Log4j, Apache, the Apache feather logo, and the Apache Logging project logo are trademarks of The Apache Software Foundation.

logging.apache.org

 

그런데 logback을 사용하는 프로그램에서는 log4j를 어떻게 조치할까요?

 

 

여기서 잠깐. logback은 log4j를 완벽하게 대체할 수 있는 좋은 수단이라는 것은 알고 계실 것인데,

logback을 쓰는 프로그램에서 log4j 관련 조치는 또 무슨 뜻일까요.

 

logback은 log4j를 대체하는 수단도 맞고, slf4j 와 호환되어 사용되는 것도 맞습니다.

하지만 logback을 설치하게 되면 Maven Dependencies에 자동으로 log4j-to-slf4j, log4j 라이브러리도 설치됩니다.

 

이런 식으로 말이죠.

심지어 자동 설치되는 버전은 2.13버전입니다. 무조건 조치가 필요합니다.

 

logback을 이미 사용하는 프로그램에서는 log4j를 삭제해도 문제가 없는 것을 테스트를 통해 확인했습니다.

그러므로 log4j를 프로젝트에서 제외시켜보겠습니다.

제외 방법은 우클릭 – Maven Exclude Maven Artifact 를 실행한 후 팝업창에서 OK를 누르면 됩니다.

보시다시피 log4j 관련 2개를 모두 제거해야 하므로 Exclude를 모두 수행하면,

Spring Boot 기반 애플리케이션의 경우 pom.xml 파일에 다음 사항이 반영되어 있을 것입니다.

 

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-jdbc</artifactId>
	<exclusions>
		<exclusion>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-api</artifactId>
		</exclusion>
		<exclusion>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-to-slf4j</artifactId>
		</exclusion>
	</exclusions>
</dependency>

이렇게 한 후, 프로젝트를 다시 실행했을 때

저희 회사에서 개발된 웹 애플리케이션의 경우에는 log4j 라이브러리를 exclude 시 정상 동작하는 것을 확인했습니다.

다만 웹 애플리케이션마다 다를 수도 있으므로 혹시나 log4j가 필요할 경우에는 위에 링크된 공식 홈페이지 부분을 참고해서 log4j 2.16 버전을 추가하는 코드가 들어가면 될 것입니다.

 

위 예제는 Maven 예제이고, Gradle은 해보지는 않았습니다만 공식 홈페이지에 다음과 같이 언급되어 있으므로 참고하시면 될 것 같습니다.

configurations {
  all*.exclude group: 'log4j', module: 'log4j'
}

 

 

'Previous (20-22) > IT' 카테고리의 다른 글

체질  (0) 2022.02.11
메타버스와 게임  (0) 2021.11.09
개발자를 뽑는 기준에 대하여  (0) 2021.02.02
새 출발을 위한 체크리스트(?)  (0) 2021.01.05
IT 개발자가 이직하기 위한 장기 플랜 #2  (0) 2020.12.23