프로젝트 구동 시, log4j:WARN No appenders could be found... 경고와 함께 서버 시작이 실패하는 문제가 발생했습니다. 이로 인해 실제 원인이 되는 오류가 로그에 남지 않아 문제 해결에 큰 어려움을 겪었습니다.
수많은 시도 끝에, 우리는 다음과 같은 과정을 거쳐 마침내 진짜 원인을 찾아냈습니다.
가장 먼저 코드 외부의 환경 문제를 의심하고, Tomcat 서버에 남아있는 모든 '잔해'를 제거하는 작업을 진행했습니다.
webapp 폴더 정리: Tomcat webapps 폴더 내의 기존 배포 파일(levelup_war 등)을 모두 삭제했습니다.ROOT 폴더 정리: Tomcat 기본 앱인 ROOT/WEB-INF/lib 폴더 내에 숨어있던 불필요한 jar 파일들을 모두 삭제했습니다.환경 초기화 후에도 문제는 계속되었습니다. 다음 단계로 Maven의 의존성 문제를 의심했습니다.
mvn dependency:tree 실행: Maven의 숨겨진 하위 의존성을 확인하기 위해 이 명령을 실행했지만, 끈질기게 문제를 일으키는 log4j 관련 라이브러리의 출처를 명확하게 찾아낼 수 없었습니다.dependency:tree로도 찾지 못했던 진짜 원인은 서로 다른 로깅 라이브러리 간의 '무한 호출 충돌' 이었습니다.
pom.xml에 추가했던 log4j-over-slf4j (가짜 log4j) 라이브러리가, 우리도 모르게 포함되어 있던 slf4j-reload4j.jar (또 다른 실제 로깅 구현체)와 충돌을 일으켰습니다.<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
<version>${slf4j.version}</version>
</dependency>log4j-over-slf4j 의존성을 pom.xml에서 제거하자, 마침내 서버가 정상적으로 구동되었습니다.log4j-over-slf4j와 숨겨진 slf4j-reload4j 간의 충돌이 서버 구동 실패의 최종 원인이었습니다.merge하거나 외부에서 프로젝트를 새로 받았을 때, 이전에 빌드된 결과물('찌꺼기')이 남아 문제를 일으킬 수 있습니다.mvn clean 명령어를 먼저 실행하여 target 폴더를 깨끗하게 비운 후, 프로젝트를 빌드하고 서버를 실행해야 합니다. 이것이 오늘 겪은 것과 같은 복잡한 문제를 예방하는 가장 확실한 방법입니다.