개발에 관심이 많으신 분들이라면 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를 수행할 수 있도록 하거나 에러를 뱉는 등의 행위를 하도록 해볼 예정입니다.
해당 내용 관련 이슈도 존재했습니다!
'BackEnd > spring' 카테고리의 다른 글
[Spring] openfeign 기여 시도했으나.... (0) | 2025.07.06 |
---|---|
[Spring] webflux에서 별도의 스케줄러를 이용하여 cpu bound 작업 처리 vs 그냥 처리 (0) | 2025.05.22 |
[Spring] bean이 없는 경우 허용하도록 처리 (0) | 2025.05.01 |
[Spring] redis stream (0) | 2024.12.17 |
[Spring] @Value @SpringBootTest 없이 테스트하는 법 (0) | 2024.02.28 |