카테고리 없음

톰캣, Spring 디버깅 & 에러 해결 전략

윤돌_99 2025. 4. 15. 21:20

1. Tomcat 로그 읽는 법

주요 Tomcat 로그 파일 요약

로그 파일 용도
catalina.out 모든 표준 출력/에러 로그 (가장 많이 씀)
catalina.YYYY-MM-DD.log 날짜별 로그 (stdout 리디렉션 가능)
localhost.log 웹 애플리케이션 로딩 및 요청 로그
manager.log /manager 웹 앱 로그
host-manager.log /host-manager 웹 앱 로그

경로: $TOMCAT_HOME/logs/

 

2. Java 애플리케이션 로깅 프레임워크 과 톰캣의 상관 관계

항목 설명
Tomcat의 기본 로깅 java.util.logging (JUL) 기반
Java 앱 (Spring 등)의 로깅

주로 SLF4J + Logback or Log4j
둘의 관계 동시에 존재할 수 있고, 출력 대상만 겹치기도 함
톰캣에 배포한 WAR 앱 톰캣의 ClassLoader에 영향받음 → 충돌 주의

 

3. 애플리케이션 - 톰캣 연결 포인트 이해

Servlet / Filter / Listener 동작 순서

[Tomcat (Servlet Container)]
   ↓
[Listener (서버 시작/종료 이벤트)]
   ↓
[Filter (전처리, 후처리)]
   ↓
[Servlet (doGet, doPost)]
   ↓
[Response 반환]

 

요소 역할
Listener 앱 시작/종료 시점의 이벤트 처리 (ex. DB 커넥션 풀 초기화 등)
Filter 요청/응답 전후 처리 (ex. 로그인 인증, 로깅)
Servlet 실제 비즈니스 로직 처리 (Controller 역할)

 

 

Spring Boot에서는 Tomcat을 내장하고, Servlet 구조를 Spring이 wrapping해서 동작함.

[TomcatEmbeddedServletContainer (내장 톰캣)]
   ↓
[Servlet Filter (SpringSecurityFilterChain 등)]
   ↓
[DispatcherServlet (Spring의 프론트컨트롤러)]
   ↓
[HandlerMapping → @Controller 매핑]
   ↓
[HandlerAdapter → 실제 메서드 실행]
   ↓
[응답 반환 (ViewResolver or JSON Converter)]

 

 

디버깅 & 에러 해결 전략

1. 문제 상황을 재현

어떤 요청(URI)에서

어떤 조건/데이터에서

어떤 시점(트래픽, 로그인 등)에서 발생하는지 파악

API 파라미터, 사용자 케이스, 시나리오를 구체화하는 게 핵심

 

예시:

로그인 상태에서 특정 게시글을 삭제하면 500 오류 발생

오래된 세션 유지 상태에서 GET /orders 호출 시 NPE 발생

 

2. 로그를 기준으로 시간 순서대로 원인을 좁히기

tail -f logs/catalina.out로 실시간 확인

grep ERROR, grep Exception, grep 2025-04-15 등으로 필터링

로그의 타임스탬프를 기준으로 흐름 추적

 

3. 실제로 디버그 모드에서 톰캣에 연결 (코드 직접 디버깅)

 

방법 1: IntelliJ + 내장 톰캣 디버깅

1. Spring Boot 실행 설정에서 Debug 클릭

2. 브라우저에서 요청 보내고,

3. Controller / Service / Mapper 등 원하는 지점에 breakpoint 설정

4. 변수값 확인, 흐름 확인, 조건 분기 추적 가능