-
item 75 예외의 상세 메시지에 실패 관련 정보를 담으라책/이펙티브 자바 2022. 4. 22. 17:44
ITEM 75 예외의 상세 메시지에 실패 관련 정보를 담으라
예외를 잡지 못해 프로그램이 실패하면 자바 시스템은 그 예외의 스택 추적(stack trace) 정보를 자동으로 출력한다
- 스택 추적은 예외 객체의 toString 메서드를 호출해 얻는 문자열이다
- 보통 예외의 클래스 이름 뒤에 상세 메세지가 붙는 구조다
- 이런 정보가 실패 원인을 분석해야 하는 개발자나 SRE가 얻을 수 있는 유일한 정보인 경우가 많다
- 더구나 실패를 재현하기 어렵다면 더 자세한 정보를 얻기가 어렵거나 불가능하다
- 따라서 예외의 toString 메서드에 실패 원인에 관한 정보를 가능한 많이 담아서 반환 하는게 중요하다
- 사후분석을 위해 실패 순간의 상황을 정확히 포착해 예외의 상세 메세지에 담아야 한다
실패 순간을 포착하려면 발생한 예외에 관여된 모든 매개변수와 필드의 값을 실패 메시지에 담아야 한다
- 관련 데이터를 모두 담아야 하지만 장황할 필요는 없다
- 문제를 분석하는 사람은 스택 추적뿐 아니라 필요하면 소스도 함께 본다
- 스택 추적에는 예외가 발생한 파일 이름과 줄번호, 스택에서 호출한 다른 메서드들의 파일 이름과 줄번호까지 나와있는게 보통이다
- 따라서 문서와 소스코드에서 얻을 수 있는 정보는 길게 보여줄 필요가 없다
- 예외의 상세 메시지와 최종 사용자에게 보여줄 오류 메시지를 헷갈리지말자
- 최종 사용자에게는 친절한 안내 메시지를 보여줘야 한다
- 예외 메시지는 개발자나 SRE가 보기 때문에 가독성보다는 담긴 내용이 훨씬 더 중요하다(또한 번역이 되는 일도 별로 없다)
- 실패를 적절히 포착하려면 필요한 정보를 예외 생성자에서 모두 받아서 상세 메시지까지 미리 생성하는것도 좋다
보안과 관련한 정보는 주의해서 다뤄야 한다 문제를 진단하고 해결하는 과정에서 스택 추적 정보를 많은 사람들이 볼 수 있기 때문에 상세 메세지에 비밀번호나 암호 키 같은 정보는 담지말자
'책 > 이펙티브 자바' 카테고리의 다른 글
item 77 예외를 무시하지 말라 (0) 2022.04.23 item 76 가능한 한 실패 원자적으로 만들라 (0) 2022.04.23 item 74 메서드가 던지는 모든 예외를 문서화하라 (0) 2022.04.22 item 73 추상화 수준에 맞는 예외를 던져라 (0) 2022.04.22 item 72 표준 예외를 사용하라 (0) 2022.04.22