예외를 잡지 못해 프로그램이 실패하면 자바 시스템은 아래와 같이 해당 예외의 stack trace 정보를 자동으로 출력합니다.
예상하지 못한 장애가 발생했을 때 위와 같은 정보가 실패 원인을 분석해야 하는 개발자 혹은 SRE가 얻을 수 있는 유일한 정보인 경우가 많습니다.
특히 재현하기 어려운 장애일 경우 더 자세한 정보를 얻기가 어렵거나 불가능하기 때문에 예외의 toString() 메서드에 실패 원인에 관한 정보를 가능한 많이 담아 반환해야 합니다.
예외 메시지 관련 원칙
- 실패 순간을 포착하려면 발생한 예외와 관련된 모든 매개변수와 필드의 값을 실패 메시지에 담아야 함
- stack trace에는 예외가 발생한 파일명과 예외가 발생한 line이 출력되는 것이 일반적이므로 문서와 소스코드를 통해 얻을 수 있는 정보는 굳이 넣어줄 필요 없음
- 예외의 상세 메시지와 클라이언트에게 노출할 오류 메시지를 혼동해서는 안됨
- 클라이언트에게는 사용자 친화적인 안내 메시지를 표시해야 하지만,
- 예외 메시지는 주로 로그를 분석하는 운영팀이나 개발자가 사용하기 때문에 가독성보다는 원인을 빠르게 파악할 수 있는 메시지가 중요
- 실패를 적절히 포착하려면 필요한 정보를 예외 생성자에서 모두 받아서 상세 메시지까지 미리 생성해 놓는 방법도 괜찮음
- 고품질의 상세 메시지를 만들어내는 코드를 예외 클래스 안으로 모아주는 효과가 있어, 클래스 사용자가 메시지를 별도로 생성해야 하는 중복 작업을 수행하지 않아도 됨
- ex) 배열의 범위를 넘어서는 인덱스에 접근하려고 시도하는 경우 IndexOutOfBoundsExceptoin의 상세 메시지는 배열 범위의 최솟값, 최댓값, 그리고 범위를 벗어났다는 인덱스의 값 정보를 포함
* 주의: 단, 유저의 비밀번호와 같은 보안에 문제되는 정보는 절대 담으면 안 됩니다.
참고
이펙티브 자바
반응형
'JAVA > Effective Java' 카테고리의 다른 글
[아이템 77] 예외를 무시하지 말라 (2) | 2024.03.29 |
---|---|
[아이템 76] 가능한 한 실패 원자적으로 만들라 (0) | 2024.03.29 |
[아이템 74] 메서드가 던지는 모든 예외를 문서화하라 (0) | 2024.03.28 |
[아이템 73] 추상화 수준에 맞는 예외를 던지라 (0) | 2024.03.27 |
[아이템 72] 표준 예외를 사용하라 (0) | 2024.03.25 |