플래시 세일 프로젝트의 MSA 환경에서 각 서비스 간 통신 시 FeignClient를 사용했지만, 각 서비스에서 발생한 커스텀 예외가 정상적으로 반환되지 않는 문제가 발생했습니다.
FeignClient는 기본적으로 HTTP 상태 코드와 오류 메시지를 받아들이지만, 개별 서비스에서 정의한 예외를 직접적으로 반환할 수 없었습니다. 이로 인해 클라이언트 측에서 커스텀 예외 메시지가 전달되지 않고 기본적인 FeignClient 오류 처리만 이루어졌습니다.
이 문제를 해결하기 위해 FeignClient의 에러 디코더(ErrorDecoder)를 활용하여, 각 서비스에서 반환하는 커스텀 예외를 클라이언트에서 받을 수 있도록 처리했습니다. 에러 디코더는 서버로부터 받은 응답을 분석하고 적절한 예외를 클라이언트 측에서 던지도록 도와줍니다.
public class CustomErrorDecoder implements ErrorDecoder {
@Override
public Exception decode(String methodKey, Response response) {
return switch (response.status()) {
case 400 -> new CustomException(ClientErrorCode.BAD_REQUEST);
case 403 -> new CustomException(ClientErrorCode.FORBIDDEN);
case 404 -> new CustomException(ClientErrorCode.RESOURCE_NOT_FOUND);
case 500 -> new CustomException(ClientErrorCode.INTERNAL_SERVER_ERROR);
case 503 -> new CustomException(ClientErrorCode.SERVICE_UNAVAILABLE);
case 507 -> new CustomException(ClientErrorCode.INSUFFICIENT_STOCK);
default -> new CustomException(ClientErrorCode.UNEXPECTED_ERROR);
};
}
}
서버 측 커스텀 예외를 클라이언트에서 받아 적절히 처리할 수 있게 됐습니다. 이를 통해 서비스 간 오류 처리에 일관성을 유지하고, 클라이언트에서 커스텀 예외 메시지를 보다 정확하게 전달받을 수 있게 되었습니다.