기본 콘텐츠로 건너뛰기

java.lang.ClassNotFoundException: ContextLoaderListener 에러 해결 방법 (Eclipse + Tomcat)

[Spring] java.lang.ClassNotFoundException: ContextLoaderListener 에러 해결 완벽 가이드

작성일: 2025. 12. 10 | 분류: Java/Spring Framework

Spring MVC 프로젝트를 Eclipse와 Tomcat 환경에서 배포하다 보면 종종 마주치는 악명 높은 에러가 있습니다. 로컬 테스트(Unit Test)에서는 잘 돌아가는데, 서버를 띄우면 갑자기 404 혹은 500 에러와 함께 콘솔에 다음 로그가 찍히는 경우입니다.

java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:xxx) ...

이 에러가 발생하면 스프링 컨텍스트가 로드되지 않아 아무런 페이지도 뜨지 않습니다. 이 글에서는 이 에러의 정확한 원인과, Eclipse Deployment Assembly 설정을 중심으로 한 가장 확실한 해결 방법을 정리합니다.

1. 에러의 원인: "배포된 곳에 파일이 없다"

이 예외(Exception)의 의미는 아주 단순합니다.

⚠️ 문제 상황
Tomcat이 구동되면서 web.xml을 읽고 리스너를 실행하려는데, org.springframework.web.context.ContextLoaderListener 클래스 파일을 찾을 수 없다는 뜻입니다.

분명히 프로젝트에는 Spring 라이브러리가 추가되어 있는데 왜 못 찾는 걸까요? 원인은 "이클립스 프로젝트의 빌드 경로(Build Path)"에는 라이브러리가 있지만, "실제 톰캣이 실행되는 배포 경로(Deployment Assembly)"에는 라이브러리가 복사되지 않았기 때문입니다.

2. web.xml 설정 확인 (기본 점검)

먼저 web.xml에 리스너 설정이 올바르게 되어 있는지 확인합니다. 오타가 없다면 설정 자체는 정상입니다.

<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>

설정은 정상이지만, 이 설정을 실행할 실제 JAR 파일(spring-web.jar)WEB-INF/lib 폴더에 없어서 에러가 나는 것입니다.

3. ✅ 해결 방법: Deployment Assembly 설정 (핵심)

Eclipse Dynamic Web Project 환경에서 가장 빈번하게 발생하는 원인입니다. 이 설정을 통해 "Maven으로 받은 라이브러리들을 배포 시에 lib 폴더로 같이 넘겨라"라고 지시해야 합니다.

3.1 설정 화면 진입

  1. 프로젝트 우클릭 ➔ Properties 선택
  2. 좌측 메뉴에서 Deployment Assembly 클릭

화면을 봤을 때 src/main/webapp, src/main/java 등은 있지만, Maven Dependencies 항목이 없다면 100% 이 문제입니다.

3.2 라이브러리 배포 경로 추가

  1. 우측의 Add... 버튼 클릭
  2. Java Build Path Entries 선택 후 Next
  3. 목록에서 Maven Dependencies (혹은 사용 중인 Spring Library) 선택 후 Finish
  4. Apply and Close 클릭
💡 팁:
설정을 마친 후에는 반드시 Project ➔ Clean을 수행하고 서버를 재시작(Restart)해야 변경된 설정이 반영되어 JAR 파일이 복사됩니다.

4. Maven 프로젝트: pom.xml 의존성 점검

만약 위 설정을 했는데도 해결되지 않는다면, 애초에 pom.xml에 필수 의존성이 누락되었는지 확인해야 합니다. ContextLoaderListenerspring-web 모듈에 포함되어 있습니다.

<dependencies> <!-- Spring Web MVC (spring-web을 포함함) --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.x.x.RELEASE</version> </dependency> </dependencies>

의존성을 수정한 뒤에는 프로젝트 우클릭 ➔ Maven ➔ Update Project를 꼭 실행해 주세요.

5. 요약 및 체크리스트

같은 에러를 다시 만났을 때 당황하지 말고 아래 순서대로 확인해 보세요.

  • 1순위 Eclipse Deployment Assembly에 'Maven Dependencies'가 추가되어 있는가?
  • 2순위 pom.xmlspring-webmvc 의존성이 존재하는가?
  • 3순위 (Maven 미사용 시) WEB-INF/lib 폴더에 spring-web-x.x.x.jar 파일이 물리적으로 존재하는가?

이 설정만 제대로 잡아주면, 지긋지긋한 ClassNotFoundException에서 탈출하여 정상적으로 스프링 로고가 뜨는 것을 확인할 수 있을 것입니다.

#SpringFramework #Eclipse #Tomcat #ContextLoaderListener #ClassNotFoundException #ErrorFix #개발자팁

댓글

이 블로그의 인기 게시물

Java Servlet Request Parameter 완전 정복 — GET/POST 모든 파라미터 확인 & 디버깅 예제 (Request Parameter 전체보기)

Java Servlet Request Parameter 완전 정복 — GET/POST 모든 파라미터 확인 & 디버깅 예제 Java Servlet Request Parameter 완전 정복 웹 애플리케이션에서 클라이언트로부터 전달되는 Request Parameter 를 확인하는 것은 필수입니다. 이 글에서는 Java Servlet 과 JSP 에서 GET/POST 요청 파라미터를 전체 출력하고 디버깅하는 방법을 다양한 예제와 함께 소개합니다. 1. 기본 예제: getParameterNames() 사용 Enumeration<String> params = request.getParameterNames(); System.out.println("----------------------------"); while (params.hasMoreElements()){ String name = params.nextElement(); System.out.println(name + " : " + request.getParameter(name)); } System.out.println("----------------------------"); 위 코드는 요청에 포함된 모든 파라미터 이름과 값을 출력하는 기본 방법입니다. 2. HTML Form과 연동 예제 <form action="CheckParamsServlet" method="post"> 이름: <input type="text" name="username"><br> 이메일: <input type="email" name="email"><b...

PostgreSQL 달력(일별,월별)

SQL 팁: GENERATE_SERIES로 일별, 월별 날짜 목록 만들기 SQL 팁: GENERATE_SERIES 로 일별, 월별 날짜 목록 만들기 데이터베이스에서 통계 리포트를 작성하거나 비어있는 날짜 데이터를 채워야 할 때, 특정 기간의 날짜 목록이 필요할 수 있습니다. PostgreSQL과 같은 데이터베이스에서는 GENERATE_SERIES 함수를 사용하여 이 작업을 매우 간단하게 처리할 수 있습니다. 1. 🗓️ 일별 날짜 목록 생성하기 2020년 1월 1일부터 12월 31일까지의 모든 날짜를 '1 day' 간격으로 생성하는 쿼리입니다. WITH date_series AS ( SELECT DATE(GENERATE_SERIES( TO_DATE('2020-01-01', 'YYYY-MM-DD'), TO_DATE('2020-12-31', 'YYYY-MM-DD'), '1 day' )) AS DATE ) SELECT DATE FROM date_series 이 쿼리는 WITH 절(CTE)을 사용하여 date_series 라는 임시 테이블을 만들고, GENERATE_SERIES 함수로 날짜를 채웁니다. 결과 (일별 출력) 2. 📅 월별 날짜 목록 생성하기 동일한 원리로, 간격을 '1 MONTH' 로 변경하면 월별 목록을 생성할 수 있습니다. TO...

CSS로 레이어 팝업 화면 가운데 정렬하는 방법 (top·left·transform 완전 정리)

레이어 팝업 센터 정렬, 이 코드만 알면 끝 (CSS 예제 포함) 이벤트 배너나 공지사항을 띄울 때 레이어 팝업(center 정렬) 을 깔끔하게 잡는 게 생각보다 어렵습니다. 화면 크기가 변해도 가운데에 고정되고, 모바일에서도 자연스럽게 보이게 하려면 position , top , left , transform 을 정확하게 이해해야 합니다. 이 글에서는 아래 내용을 예제로 정리합니다. 레이어 팝업(center 정렬)의 기본 개념 자주 사용하는 position: absolute / fixed 정렬 방식 질문에서 주신 스타일 top: 3.25%; left: 50%; transform: translateX(-50%) 의 의미 실무에서 바로 쓰는 반응형 레이어 팝업 HTML/CSS 예제 1. 레이어 팝업(center 정렬)이란? 레이어 팝업(레이어 팝업창) 은 새 창을 띄우는 것이 아니라, 현재 페이지 위에 div 레이어를 띄워서 공지사항, 광고, 이벤트 등을 보여주는 방식을 말합니다. 검색엔진(SEO) 입장에서도 같은 페이지 안에 HTML이 존재 하기 때문에 팝업 안의 텍스트도 정상적으로 인덱싱될 수 있습니다. 즉, “레이어 팝업 센터 정렬”, “레이어 팝업 만드는 방법”과 같이 관련 키워드를 적절히 넣어주면 검색 노출에 도움이 됩니다. 2. 질문에서 주신 레이어 팝업 스타일 분석 질문에서 주신 스타일은 다음과 같습니다. <div class="layer-popup" style="width:1210px; z-index:9001; position:absolute; top:3.25%; left:50%; transform:translateX(-50%);"> 레이어 팝업 내용 <...