본문 바로가기
BackEnd/spring

[Spring] open feign 테스트 코드

by 하용권 2025. 6. 26.

개발에 관심이 많으신 분들이라면 openfieng 들어보셨을 것이라고 생각합니다.

 

저도 최근에 관심이 생겨서 사내 프로젝트에 적용을 해보고 있습니다.

configuration을 이용해 retry,5xx 에러가 발생하면 retry 하는 등 로직을 적용을 해보았습니다.

 

 

 

 

이를 테스트 하기 위해서는 통합 테스트 환경에서는 어렵습니다. 

 

그래서 이를 테스트하는 방법을 공유 드립니다.

 

 

 

 

우선 테스트 패키지 내에 해당 코드를 작성합니다.

 

그리고 아래와 같은 테스트 코드를 입력합니다.

 

 

 

 

 

 

@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class})

 

의 경우에는 jpa 관련된 의존성이 있을 때 추가하면, data source가 없다는 에러가 발생하지 않게 됩니다.

 

 

하지만 이 코드의 문제점도 있습니다.

만약 아래와 같은 feign client 가 있다고 가정해봅시다.

 

 

 

url에 

url = "${feign.api-url}"

 

처럼 property 설정이 필요합니다.

 

특히 회사에서는 url 을 직접 넣기보다는 이런 식으로 해서 개발/운영 환경을 분리할 수 있도록 자주 합니다.

 

 

이 경우 해당 property가 없다면, 테스트 코드에서 에러가 발생하게 됩니다.

@EnableAutoConfiguration(exclude....)

이 부분에 인자로 해당 feign client를 넣어도 에러가 발생합니다.

 

 

이를 해결하기 위해서

"feign.api-url=tmp"

SpringBootTest의 prepoerties 인자에 이런 프로퍼티를 추가해주었습니다...

 

단위 테스트를 하고 싶어서 코드를 구현을 했는데, feign client 가 추가 될수록 이런 property를 수동으로 넣어줘야 했습니다.

 

더 좋은 방법이 있으면 찾아보고 싶네요.

 

* 2025/07/03 추가 내용

 - 위의 tmp로 임의의 값을 줬었는데, 제거하고 실행해도 되네요. 인텔리제이 gradle 설정에 따라 다른 것 같은데 좀 더 알아봐야 할 것 같습니다.

 

 

 

이건 여담이지만, openfeign의 response로 클래스를 사용하고 필드에 @NotNull, @Min 등 validation 체크를 위한 어노테이션을 붙여도 동작을 하지 않는 것 같더라고요. 이 부분은 별도의 커스텀 encoder/decoder 없이 적용할 수 있도록 오픈소스에 기여해보려고 합니다.

만약 valid 하지 않으면, retry를 수행할 수 있도록 하거나 에러를 뱉는 등의 행위를 하도록 해볼 예정입니다.

 

해당 내용 관련 이슈도 존재했습니다!

https://github.com/OpenFeign/feign/issues/1371

반응형