일간에러) java: incompatible types: java.lang.String cannot be converted to org.slf4j.Marker

작성: 2022.04.20

수정: 2022.04.20

읽는시간: 00 분

Development/Daily Error

반응형

Intro

오래전부터 이어진 Spring Boot 버전 마이그레이션 작업의 일환으로, 메인급 프로젝트들의 작업은 마무리가 되었지만 여러가지 요구사항에 의해 fork 이후 여러 갈래로 갈라진 branch 격의 프로젝트들도 손을 봐야 하는 상황.

워낙 스프링부트 마이그레이션 작업 후 고생을 많이 했던 덕에 이제는 왠만한 오류는 떠도 한번쯤 봤던 내용들이기 때문에 크게 당황하는 일도 없고, 속도도 꽤나 붙은 상황이다. 그러던 중 간만에 새로운 에러메시지가 보여 반가운 마음에 미래를 대비해 정리 해 두려고 한다.

오류

java: incompatible types: java.lang.String cannot be converted to org.slf4j.Marker

image-20220420111740586

단순하게 log를 찍는 상황인데, 기존에 작성 해 두었던 코드가 빌드중 에러가 발생한다. 아마도 Slf4j 버전이 바뀌면서 API에 변경이 있었던게 아닌가 싶다.

원인

일단 git 버전관리를 이용해 오류가 나기 전으로 돌려본다.

image-20220420113209474

그때의 파라미터들을 확인 해 보니 String format, Object... arguments 로 가변 인자를 이용해서 메서드를 사용 하고 있었다.

image-20220420113345739

Slf4j는 HikariCP 의존성에서 온 slf4j 1.7.30 버전이 다른 버전들을 omit 시키는 중.

확인이 끝났으니 이제 다시 마이그레이션 중인 버전으로 돌아온다.

image-20220420113557766

다시 에러가 나는 부분을 확인 해 보니 Slf4j가 1.6.1 버전이 떡하니 차리하고 있다.

image-20220420113737738

Dependencies Tree를 확인 해 보니, Querydsl에 포함된 Slf4j-api 1.6.1 버전이 최신 버전들을 밀어 내고 있는 상황이다. 드디어 범인을 잡았다.

해결

IntelliJ IDEA에서는 우클릭 후 Exclude 를 하면 간단하게 Exclude 시킬 수 있다.

image-20220420114747066

이후 pom.xml 파일을 확인 해 보면 exclusions가 추가 된 상황.

image-20220420114903155

<exclusions>
    <exclusion>
        <artifactId>slf4j-api</artifactId>
        <groupId>org.slf4j</groupId>
    </exclusion>
</exclusions>

이후 확인 해 보면

image-20220420115110858

이제 Slf4j 버전이 1.7.30 으로 변경 된 상태

이제 빌드하면 문제 없이 빌드에 성공한다. 스프링 부트에서 의존성 관리를 어느 정도 알아서 해 주기 때문에 골치아플 일이 없었는데, 스프링부트 마이그레이션 과정을 통해 의존성이 어떤식으로 꼬일 수 있으며 어떻게 해결해야 하는지 부딪힐 수 있어 좋은 경험이 되었다.

반응형