가상의 Java 가져오기 도구가 하위 계층의 실패를 잡아 new ImportFailure("Import failed")로 바꾼다고 가정하겠습니다. 진단 로그에는 이제 이 짧은 메시지만 남습니다. 호출자에게 로컬 파일의 세부 정보를 보내서는 안 되지만, 실패를 조사하는 쪽에는 원인을 따라갈 단서가 필요합니다.
도메인 예외는 유지하면서, 생성자가 원래 실패를 Throwable의 원인으로 전달하도록 하겠습니다. Java의 원인 연결 기능을 쓰면 공개 예외 분류를 하위 계층의 분류로 바꾸지 않고도 인과관계를 남길 수 있습니다.
공개 응답에는 도메인 분류와 의도적으로 선택한 메시지를 쓰면 됩니다. getCause().getMessage()에서 응답 문구를 가져와서는 안 됩니다. 그 원인에 응답에서 제외하려던 로컬 정보가 들어 있을 수 있기 때문입니다. 내부 진단 정보도 모든 예외 값을 출력하는 방식이 아니라 통제된 방식으로 다뤄야 합니다.
더 풍부한 진단 정보를 보존하려면 접근 권한과 정보 가림 규칙이 필요하다는 절충이 있습니다. 원인을 버리면 그 정보를 관리할 필요는 줄지만, 실패를 설명할 근거도 약해집니다.
실패한 가져오기를 조사할 수 있으면서 호출자에게는 다음 행동에 필요한 정보만 주려면, 진단 경로에 무엇을 남겨야 하겠습니까?