문서
에러 핸들링을 다른 클래스에게 위임하기 (Kotlin 100% 활용)
한규주 · 토스 · 토스 기술 블로그
소개
Kotlin의 Result로 MSA에서 에러가 전파되지 않는 안전한 환경을 만드는 방법을 알아봅니다.
AI 핵심 요약
MSA에서 외부 API 호출 중 발생한 예외를 API 클라이언트가 직접 처리하면, 호출하는 서비스마다 다른 에러 대응을 적용하기 어렵다. 글은 Kotlin의 `runCatching`으로 호출 결과를 `Result<T>`로 감싸 반환하고, 에러 처리를 클라이언트에 위임하는 방식을 제안한다. 호출부는 `getOrNull()`로 실패를 무시하거나 `onFailure`·`onSuccess`로 로깅과 후속 작업을 나누고, 필요하면 `getOrThrow()`로 예외를 다시 던질 수 있다. 이를 통해 외부 서비스 의존 컴포넌트가 실패 가능성을 반환 타입으로 드러내고, 각 호출자가 상황에 맞게 처리하도록 구성할 수 있다.
- `runCatching`은 블록의 예외를 `Result.success` 또는 `Result.failure`로 감싸 반환한다.
- `getOrNull`, `getOrDefault`, `getOrElse`, `fold` 등으로 실패를 무시하거나 대체값을 주고, 성공·실패별 동작을 분리할 수 있다.
- API 클라이언트가 `Result<T>`를 반환하면 호출부가 각 사용 사례에 맞는 에러 처리 방식을 선택할 수 있다.
- `onFailure`와 `onSuccess`는 처리 후에도 `Result`를 반환하므로, 필요하면 마지막에 `getOrThrow()`로 실패를 다시 예외로 전파할 수 있다.