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. 변수값 확인, 흐름 확인, 조건 분기 추적 가능