Header Banner
GG Logo

Future Engineering

기술의 최전선을 기록합니다.

기술 자료/BackEnd/성능과 안정성을 위한 Java 로깅 전략

성능과 안정성을 위한 Java 로깅 전략

BackEnd약 2개월 전

System.out.println 사용 금지

  • 문제점: System.out을 사용한 출력은 동기식(Synchronous)으로 작동하여, 트래픽이 집중될 경우 시스템 전반의 병목 현상을 유발하고 성능 저하의 직접적인 원인이 됩니다.

  • 권장사항: 모든 서버 로그는 반드시 로깅 프레임워크(log4j, logback 등)를 통해 기록

 

log4j 로그 레벨의 명확한 사용 기준

로그는 목적에 따라 DEBUG, INFO, WARN, ERROR 레벨을 명확히 구분하여 사용해야 합니다.

  • DEBUG

    • 사용 목적: 개발 단계에서 특정 변수 값을 확인하거나, 복잡한 로직의 실행 흐름을 상세히 추적할 때 사용

    • 주의사항: 배포 환경(운영 서버)에서는 사용하지 않습니다. DEBUG 레벨은 성능에 영향을 줄 수 있기에, 개발 및 테스트 단계에서만 활성화

  • INFO

    • 사용 목적: 주요 비즈니스 로직의 시작과 끝, 혹은 중요한 상태 변화(예: "사용자 로그인 성공", "주문 처리 시작") 등 핵심적인 처리 과정을 파악하기 위해 사용

    • 주의사항: 배포 환경에서는 가능한 한 사용을 최소화. 과도한 INFO 로그는 로그 파일의 크기를 불필요하게 증가시키고, 정작 중요한 WARN이나 ERROR 로그를 확인하기 어렵게 만듬

  • WARN

    • 사용 목적: 현재 시스템 실행에는 문제가 없지만, 잠재적인 위험 요소나 향후 오류의 원인이 될 수 있는 상황을 알리기 위해 사용

    • 적용 예시: try-catch 구문에서 예외 상황을 처리했지만, 비즈니스 로직상 심각한 오류는 아닐 경우 WARN으로 기록하여 추후 검토할 수 있도록 함

  • ERROR

    • 사용 목적: 시스템의 정상적인 작동을 불가능하게 하는 심각한 오류나 예외 상황이 발생했을 때 사용 (예: "데이터베이스 연결 실패", "필수 파라미터 누락으로 인한 기능 중단")

    • 적용 예시: try-catch 구문에서 복구가 불가능한 예외를 잡았을 때, 반드시 ERROR로 기록하여 개발자가 즉시 인지하고 조치할 수 있도록 함

 

올바른 예외(Exception) 처리 원칙

  • 무분별한 Exception 사용 금지: 예외는 예측 불가능한 상황이나 시스템의 정상 흐름을 깨뜨리는 곳에 한해 명확한 목적을 가지고 사용해야 함. 단순 조건 분기를 위해 예외를 남용해서는 안됨

  • throw 사용 최소화: 예외가 발생한 시점에서 처리하는 것을 원칙으로 합니다. throw를 사용하여 예외 처리를 다음 호출 메서드로 미루는 것은, 해당 책임을 다른 개발자에게 전가하는 행위입니다. 이는 코드의 복잡성을 높이고 유지보수를 어렵게 만듭니다. 불가피한 경우를 제외하고는 가급적 사용을 금함

키워드

Java로깅log4j예외처리
성능과 안정성을 위한 Java 로깅 전략 | TECH.KAKAO.GG