예외처리는 프로그램 실행 중에 발생할 수 있는 오류를 처리하여 프로그램이 중단되지 않고 계속 실행되도록 하는 기법입니다. 예외는 일반적으로 예상치 못한 상황에서 발생하는데, 이러한 예외를 적절히 처리하지 않으면 프로그램이 비정상적으로 종료될 수 있습니다.
Exception
클래스의 인스턴스로 표현됩니다.try
, catch
, finally
블록을 사용합니다.throw
키워드를 사용합니다.catch
블록을 사용합니다.try {
// 예외가 발생할 수 있는 코드
} catch (ExceptionType1 e1) {
// 예외 처리 코드 (ExceptionType1 처리)
} catch (ExceptionType2 e2) {
// 예외 처리 코드 (ExceptionType2 처리)
} finally {
// 예외 발생 여부와 상관없이 항상 실행되는 코드 (옵션)
}
fallbackGetProductDetails
메서드public Product fallbackGetProductDetails(String productId, Throwable t)
이 메서드는 주로 서킷 브레이커 패턴이나 폴백(fallback) 메커니즘에서 사용됩니다. 특정 메서드 호출이 실패했을 때 실행되는 대체 메서드입니다.
String productId
: 요청된 제품 ID입니다.Throwable t
: 원래 메서드 호출에서 발생한 예외입니다. 예외의 원인을 알 수 있습니다.이 메서드는 원래 메서드 호출이 실패했을 때 실행되어, 오류를 처리하거나 대체 로직을 수행하는 데 사용됩니다.
RuntimeException
예외 던지기if ("111".equals(productId)) {
log.warn("###Received empty body for productId: {}", productId);
throw new RuntimeException("Empty response body"); // productId가 111이면 에러 발생시킴
}
이 코드는 productId
가 "111"인 경우에 강제로 예외를 발생시키는 부분입니다.
"111".equals(productId)
: productId
가 "111"인지 비교합니다.log.warn("###Received empty body for productId: {}", productId)
: 로그에 경고 메시지를 출력합니다. {}
는 productId
로 대체됩니다.throw new RuntimeException("Empty response body")
: RuntimeException
을 발생시킵니다. 이 예외는 productId
가 "111"인 경우, 비어 있는 응답 본문(예: HTTP 응답 본문이 없는 경우)을 나타내기 위해 강제로 던집니다.public String getProductDetails(String productId) {
try {
if ("111".equals(productId)) {
log.warn("###Received empty body for productId: {}", productId);
throw new RuntimeException("Empty response body"); // productId가 111이면 에러 발생시킴
}
// 정상적인 제품 상세 정보 가져오기 로직
return "Product details for " + productId;
} catch (RuntimeException e) {
log.error("Exception occurred while getting product details", e);
return fallbackGetProductDetails(productId, e); // 예외 발생 시 폴백 메서드 호출
}
}
public String fallbackGetProductDetails(String productId, Throwable t) {
log.warn("Fallback method called for productId: {} due to {}", productId, t.getMessage());
return "Fallback product details for " + productId;
}
getProductDetails
메서드에서 productId
가 "111"인 경우 RuntimeException
을 던집니다.catch
블록에서 잡히고, 로그에 오류를 기록합니다.fallbackGetProductDetails
메서드를 호출하여 폴백 로직을 실행합니다.