반응형
Spring Boot에서 디버깅을 시작하는 방법: 에러 로그 읽기
Spring Boot 애플리케이션 개발 중에 발생하는 에러를 해결하려면 에러 로그를 읽고 이해하는 것이 필수적입니다. 이 글에서는 에러 로그를 분석하고 디버깅을 시작하는 방법을 설명합니다.
1. 에러 로그의 구조 이해하기
Spring Boot 애플리케이션에서 발생하는 에러 로그는 일반적으로 다음과 같은 구조로 나타납니다:
2023-01-08 12:34:56.789 ERROR 12345 --- [main] com.example.MyController : Exception in thread "main" java.lang.NullPointerException: Cannot invoke "Object.toString()" because "obj" is null
at com.example.MyService.getData(MyService.java:25)
at com.example.MyController.getData(MyController.java:18)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1234)
로그 분석:
- 타임스탬프: 로그가 기록된 시간 (
2023-01-08 12:34:56.789
) - 로그 레벨: 로그의 심각도 (
ERROR
) - 스레드 정보: 로그를 생성한 스레드 (
main
) - 클래스 및 메서드: 에러가 발생한 위치 (
com.example.MyService.getData
)와 줄 번호 (25
) - 예외 메시지: 에러의 원인 (
NullPointerException
)
2. 에러 로그 레벨
Spring Boot에서 로그는 다양한 레벨로 기록됩니다:
- TRACE: 매우 상세한 디버깅 정보
- DEBUG: 개발 중 유용한 디버깅 정보
- INFO: 일반 정보 메시지
- WARN: 경고 메시지
- ERROR: 애플리케이션에서 처리하지 못한 심각한 에러
로그 레벨 설정:application.properties
또는 application.yml
파일에서 로그 레벨을 설정할 수 있습니다.
예제 (application.yml):
logging:
level:
root: info
com.example: debug
설명:
root
: 애플리케이션의 기본 로그 레벨com.example
: 특정 패키지에 대해 더 상세한 로그를 활성화
3. 에러 로그에서 디버깅 시작하기
예외의 유형 확인
- 에러 로그에서
NullPointerException
,IllegalArgumentException
등 예외의 유형을 확인합니다. - 예외 메시지를 읽어 문제의 원인을 유추합니다.
- 에러 로그에서
스택 트레이스(Stack Trace) 분석
- 스택 트레이스는 에러가 발생한 코드의 호출 흐름을 보여줍니다.
- 에러가 발생한 클래스와 메서드, 줄 번호를 확인합니다.
예제:
at com.example.MyService.getData(MyService.java:25)
MyService
클래스의getData
메서드에서 에러가 발생했고, 이는 25번째 줄에 위치합니다.
코드 검토
- 스택 트레이스에서 확인된 위치의 코드를 분석하여 문제를 확인합니다.
관련 설정 확인
- 데이터베이스 연결 오류, 환경 변수 누락 등 설정 문제일 수 있으므로
application.yml
또는application.properties
를 점검합니다.
- 데이터베이스 연결 오류, 환경 변수 누락 등 설정 문제일 수 있으므로
4. 자주 발생하는 에러와 해결 방법
NullPointerException
- 원인: 객체가 초기화되지 않았거나 null인 경우 접근 시 발생
- 해결 방법:
또는 의존성 주입 여부를 확인합니다.if (obj != null) { System.out.println(obj.toString()); }
DataAccessException
- 원인: 데이터베이스 연결 문제 또는 SQL 오류
- 해결 방법:
- 데이터베이스 URL, 사용자 이름, 비밀번호 설정 확인
- SQL 문법 오류 점검
404 Not Found
- 원인: 요청한 URL이 컨트롤러에서 매핑되지 않음
- 해결 방법:
- 컨트롤러에
@RequestMapping
또는@GetMapping
어노테이션 확인 - URL 경로가 올바른지 점검
- 컨트롤러에
500 Internal Server Error
- 원인: 서버 내부 로직에서 예외 발생
- 해결 방법:
- 에러 로그를 통해 예외 원인을 파악하고 코드를 수정
5. 디버깅 도구 활용하기
IDE 디버거
- IDE(예: IntelliJ, Eclipse)의 디버거를 활용하여 브레이크포인트를 설정하고 코드 실행 흐름을 단계별로 확인합니다.
Spring Boot Actuator
- 애플리케이션의 상태를 모니터링하고 디버깅 정보를 확인할 수 있습니다.
spring-boot-starter-actuator
를 추가하여 활성화합니다:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
6. 에러 로그 포맷 개선
Spring Boot에서는 로그 포맷을 설정하여 가독성을 높일 수 있습니다.
예제 (application.yml):
logging:
pattern:
console: "%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n"
반응형
'Spring Boot' 카테고리의 다른 글
Spring Boot에서 Refresh Token을 사용해 JWT 재발급하기 (0) | 2025.01.08 |
---|---|
Spring Security와 JWT 통합하기: 단계별 가이드 (1) | 2025.01.08 |
Spring Boot에서 의존성 주입(Dependency Injection)을 사용하는 방법 (0) | 2025.01.08 |
Spring Boot 프로젝트를 빌드하고 실행하는 방법 (Maven 활용) (0) | 2025.01.08 |
Spring Boot와 MySQL을 연동하는 방법 (0) | 2025.01.08 |