[E-commerce App] FeignClient - 로그 관리 및 예외 처리
FeignClient를 사용하면서 유용한 기능(로그, 예외처리)들에 대해 살펴보자.
Logging
user-service
application.yml
logging:
level:
com.example.userservice.client: DEBUG
UserServiceApplication.java
import feign.Logger;
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class UserServiceApplication {
...
@Bean
public Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
}
테스트
OrderServiceClient
에서 @GetMapping()
의 주소를 잘못된 주소인 /order-service/{userId}/orders_ng
으로 변경해보자.
(원래는 맨 마지막 _ng
를 뺀, /order-service/{userId}/orders
이었다!)
user-service
재기동 후, 회원가입 -> 상품 주문 -> 회원 단건 조회 순으로 실행하자.
위와 같은 에러가 발생한다.
이때, 500 Unternal Server Error가 발생하는데, 이것은 사용자의 요청이 잘못된 것이기 때문에 4xx 에러로 응답하는게 맞을 것이다.
이는 아래 Exception
파트에서 해결해보도록 할 것이다.
이제 user-service
의 인텔리제이 콘솔에서 로그를 확인해보자.
위와 같이 로그를 통해 요청한 주소, 헤더값, 반환 받은 페이로드 값들을 확인할 수 있다.
Exception
현재, [회원 단건 조회]에서 회원의 [주문 내역]까지 보여줄 수 있도록 되어있다.
그런데 user-service
에서 [주문 내역]을 호출하는 order-service
의 url 이 잘못 설정되어있을 때,
위에서 테스트 해 본 것과 같이 [회원 단건 조회] 자체가 실패해버린다.
그런데 이렇게 하지 말고,
Exception Handling을 통해, [회원 단건 조회] 시 order-service
설정이 잘못되어있다면,
[주문 내역]은 제외하고, 회원의 기본 정보인 email
, name
, userId
에 대해서는 응답할 수 있도록 코드를 변경하자.
user-service
UserServiceImpl.java
@Service
@Slf4j
public class UserServiceImpl implements UserService {
@Override
public UserDto getUserByUserId(String userId) {
UserEntity userEntity = userRepository.findByUserId(userId);
UserDto userDto = new ModelMapper().map(userEntity, UserDto.class);
// 주문 생성
/* Using FeignClient */
/* 🌟 Feign exception handling */
List<ResponseOrder> orderList = null;
try{
orderList = orderServiceClient.getOrders(userId);
} catch (FeignException ex) {
log.error(ex.getMessage());
}
userDto.setOrders(orderList);
return userDto;
}
...
}
테스트
user-service
재기동 후, 회원가입 -> 상품 주문 -> 회원 단건 조회 순으로 실행하자.
(아직 OrderServiceClient
의 @GetMapping()
에는 잘못된 주소인 /order-service/{userId}/orders_ng
가 들어있다.)
이번에는 200 OK
이다.
그리고 회원 정보에 대해서는 정상적으로 응답하고, [주문 내역]에 대해서만 응답하지 않은 것을 확인할 수 있다.
💛 개인 공부 기록용 블로그입니다. 👻