정상 경로와 분리하기
파일을 읽으려 했는데 파일이 없거나 통신이 끊겼다면 원래 계산을 계속할 수 없을 수 있다. 예외는 이런 상황을 호출한 쪽의 적절한 처리기로 전달하는 방법이다. 예외를 사용하지 않고 반환값으로 실패를 표현하는 방식도 있다.
잡는 것과 해결하는 것은 다르다
예외를 포착했다고 필요한 작업이 성공한 것은 아니다. 복구할 수 있는지 판단하거나 실패 사실을 상위 호출자에게 전달하고 실행을 중단할 수 있다. 아무 기록 없이 무시하면 잘못된 상태로 처리가 이어질 수 있다.
자원을 정리하기
파일과 연결, 잠금 같은 자원은 성공과 실패 어느 경로에서도 적절히 정리해야 한다. 언어의 자원 관리 구문이나 정리 절차를 사용하면 누락을 줄일 수 있다. 정리 중에 또 오류가 생겼을 때 원래 원인을 가리지 않도록 설계하는 것도 중요하다.
재시도의 조건
일시적인 실패는 다시 시도해 해결될 수 있지만 이미 일부 작업이 반영됐는지도 살펴야 한다. 같은 요청이 중복되어도 안전한지, 되돌릴 수 있는지와 재시도 횟수를 정해야 한다. 오류를 만날 때마다 무조건 반복하는 방식은 부하와 중복 처리를 늘릴 수 있다.
관련 문서
프로그래밍 언어 / 데이터베이스 트랜잭션 / 소프트웨어 / 알고리즘