본문 바로가기

Spring Boot

Spring Boot에서 디버깅을 시작하는 방법: 에러 로그 읽기

반응형

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. 에러 로그에서 디버깅 시작하기

  1. 예외의 유형 확인

    • 에러 로그에서 NullPointerException, IllegalArgumentException 등 예외의 유형을 확인합니다.
    • 예외 메시지를 읽어 문제의 원인을 유추합니다.
  2. 스택 트레이스(Stack Trace) 분석

    • 스택 트레이스는 에러가 발생한 코드의 호출 흐름을 보여줍니다.
    • 에러가 발생한 클래스와 메서드, 줄 번호를 확인합니다.

    예제:

    at com.example.MyService.getData(MyService.java:25)
    • MyService 클래스의 getData 메서드에서 에러가 발생했고, 이는 25번째 줄에 위치합니다.
  3. 코드 검토

    • 스택 트레이스에서 확인된 위치의 코드를 분석하여 문제를 확인합니다.
  4. 관련 설정 확인

    • 데이터베이스 연결 오류, 환경 변수 누락 등 설정 문제일 수 있으므로 application.yml 또는 application.properties를 점검합니다.

4. 자주 발생하는 에러와 해결 방법

  1. NullPointerException

    • 원인: 객체가 초기화되지 않았거나 null인 경우 접근 시 발생
    • 해결 방법:
      if (obj != null) {
          System.out.println(obj.toString());
      }
      또는 의존성 주입 여부를 확인합니다.
  2. DataAccessException

    • 원인: 데이터베이스 연결 문제 또는 SQL 오류
    • 해결 방법:
      • 데이터베이스 URL, 사용자 이름, 비밀번호 설정 확인
      • SQL 문법 오류 점검
  3. 404 Not Found

    • 원인: 요청한 URL이 컨트롤러에서 매핑되지 않음
    • 해결 방법:
      • 컨트롤러에 @RequestMapping 또는 @GetMapping 어노테이션 확인
      • URL 경로가 올바른지 점검
  4. 500 Internal Server Error

    • 원인: 서버 내부 로직에서 예외 발생
    • 해결 방법:
      • 에러 로그를 통해 예외 원인을 파악하고 코드를 수정

5. 디버깅 도구 활용하기

  1. IDE 디버거

    • IDE(예: IntelliJ, Eclipse)의 디버거를 활용하여 브레이크포인트를 설정하고 코드 실행 흐름을 단계별로 확인합니다.
  2. 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"

반응형