[Java] printStackTrace() 경고 해결 및 로깅 적용하기

2025. 6. 28. 17:28·개발 (Development)/Java

Java 코드를 작성하던 중, printStackTrace()에 노란색 경고 줄이 생기는 것을 발견했습니다. 단순히 예외 정보를 콘솔에 출력하는 방식은 실제 서비스 코드에 적절하지 않다는 것을 의미하는 경고였습니다. 이에 따라 로깅 프레임워크를 적용하여 문제를 개선한 과정을 정리해 보았습니다.

문제 상황

다음은 기존 코드입니다:

HashMap<String, Object> thresholds = new HashMap<>();

try {
    thresholds = getThresholds();
} catch (Exception e) {
    e.printStackTrace();  // 여기서 경고 발생
}

이 코드는 getThresholds() 메서드에서 예외가 발생할 경우 콘솔에 에러 스택을 그대로 출력합니다. 이는 개발 단계에서는 유용할 수 있지만, 실제 운영 환경에서는 로그 파일 관리, 보안, 성능 측면에서 좋지 않은 방식입니다.

경고 원인

printStackTrace()는 예외 정보를 표준 출력으로 직접 내보냅니다. 이는 다음과 같은 문제를 유발할 수 있습니다:

  • 로그 레벨 구분 불가 (info, warn, error 등)
  • 파일 저장 및 외부 연동이 불가능
  • 운영환경에서는 출력이 누락되거나 로그 관리가 어려움

해결 방법: 로깅 프레임워크 사용

Java에서는 SLF4J, Logback, Log4j2 등의 로깅 프레임워크를 사용하는 것이 일반적인 관례입니다. 이 중에서 가장 보편적인 SLF4J를 적용하는 방식으로 코드를 리팩토링했습니다.

1. SLF4J 의존성 추가 (Maven 기준)

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.36</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.11</version>
</dependency>

2. 로거 선언 및 사용

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class ThresholdProcessor {
    private static final Logger logger = LoggerFactory.getLogger(ThresholdProcessor.class);

    public void process() {
        HashMap<String, Object> thresholds = new HashMap<>();

        try {
            thresholds = getThresholds();
        } catch (Exception e) {
            logger.error("Failed to get thresholds", e);  // 예외 로그 출력
        }

        if (thresholds.containsKey("health_index_threshold")) {
            double health_index_threshold = (double) thresholds.get("health_index_threshold");
            // 이후 처리...
        }
    }
}

이제 로그는 콘솔뿐 아니라 파일, 외부 로깅 시스템 등으로도 출력이 가능하며, 로그 레벨에 따라 관리가 수월해졌습니다.

마무리

예외 처리를 할 때 단순히 printStackTrace()를 사용하는 것보다는, 로깅 프레임워크를 통해 체계적으로 로그를 남기는 것이 훨씬 바람직합니다. SLF4J를 사용하면 유지보수성과 가독성, 확장성을 모두 확보할 수 있습니다.

핵심 요약

  • printStackTrace()는 개발용 콘솔 출력일 뿐, 운영용 코드에는 부적합
  • SLF4J 같은 로깅 프레임워크로 대체 필요
  • logger.error("메시지", 예외); 형식을 활용하여 로그 출력
반응형

'개발 (Development) > Java' 카테고리의 다른 글

[Java/SpringBoot] Spring OAuth2 시스템에서 발생한 Access Token 만료 및 인증 오류 대응 기록  (2) 2025.06.28
[Java/SpringBoot] Spring에서 예외를 던지지 않고 API 응답은 유지하며 로그는 ERROR로 남기지 않도록 처리하는 방법  (0) 2025.06.28
[Java/Spring Boot] AWS 환경에서 DB 직접 접근이 어려운 경우: Java 애플리케이션에서 SQL 파일을 실행하여 데이터 삽입하기  (2) 2025.05.18
[Java] Java jar 파일에서 리소스 파일 경로 사용하는 법  (0) 2025.05.18
[Java/Spring Boot] Spring Boot + MyBatis 환경에서 쿼리 조회용 API를 만들기 전에 꼭 고려해야 할 5가지  (2) 2025.05.18
'개발 (Development)/Java' 카테고리의 다른 글
  • [Java/SpringBoot] Spring OAuth2 시스템에서 발생한 Access Token 만료 및 인증 오류 대응 기록
  • [Java/SpringBoot] Spring에서 예외를 던지지 않고 API 응답은 유지하며 로그는 ERROR로 남기지 않도록 처리하는 방법
  • [Java/Spring Boot] AWS 환경에서 DB 직접 접근이 어려운 경우: Java 애플리케이션에서 SQL 파일을 실행하여 데이터 삽입하기
  • [Java] Java jar 파일에서 리소스 파일 경로 사용하는 법
LoopThinker
LoopThinker
모르는 것을 알아가고, 아는 것을 더 깊게 파고드는 공간
  • LoopThinker
    CodeMemoir
    LoopThinker
  • 전체
    오늘
    어제
    • 분류 전체보기 (220) N
      • 개발 (Development) (154) N
        • Algorithm (1)
        • Angular (1)
        • AWS (5) N
        • DeepSeek (2)
        • Docker (7)
        • Git (3)
        • Java (30)
        • JavaScript (4)
        • Kafka (5)
        • Kubernetes (4)
        • Linux (7) N
        • PostgreSQL (37)
        • Python (27) N
        • React (3)
        • TypeScript (3)
        • Vue.js (5)
        • General (10)
      • 데이터 분석 (Data Analysis) (1)
      • 알고리즘 문제 풀이 (Problem Solving.. (27)
      • 자격증 (Certifications) (24)
        • ADsP (14)
        • 정보처리기사 (4)
        • Linux Master (5)
        • SQLD (1)
      • 기술 동향 (Tech Trends) (11) N
      • 기타 (Others) (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Kafka
    리눅스 마스터 2급
    python
    백준알고리즘
    백준자바
    javascript
    timescaledb
    오답노트
    PostgreSQL
    MyBatis
    DevOps
    Linux
    Kubernetes
    springboot
    typescript
    AWS
    docker
    데이터분석
    pandas
    JPA
    리눅스 마스터 2급 2차
    Linux master
    deepseek
    Vue.js
    java
    백준
    JSON
    백준온라인저지
    자바
    ADsP
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
LoopThinker
[Java] printStackTrace() 경고 해결 및 로깅 적용하기
상단으로

티스토리툴바