

Future Engineering
기술의 최전선을 기록합니다.
성능과 안정성을 위한 Java 로깅 전략
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
를 사용하여 예외 처리를 다음 호출 메서드로 미루는 것은, 해당 책임을 다른 개발자에게 전가하는 행위입니다. 이는 코드의 복잡성을 높이고 유지보수를 어렵게 만듭니다. 불가피한 경우를 제외하고는 가급적 사용을 금함