본문 바로가기

BackEnd/spring12

[Spring] openfeign 기여 시도했으나.... 이전 openfeign 테스트 관련 포트스에서 말한 것처럼 validation 관련해서 기여를 해보려고 했었습니다. 그래서 실제로 @FeignClients 가 선언되어 있는 인터페이스의 메소드를 호출할 때 어떠한 흐름으로 응답 -> object로 변환을 해주는지 디버깅해 봤습니다. 알아봤을 때,SpringDecoder라는 것을 이용하는 것으로 보입니다. 해당 프로젝트는 spring cloud 내의 프로젝트였습니다. 그래서 github로 가보니... 이런 내용이 있더라고요... 더 이상 업데이트 되지는 않고 버그 수정이나 소규모 PR 정도만 받는 것 같습니다.또한 Spring Interface Clients로 마이그레이션 하는 것을 추천하네요.심지어 좀 오래전에 발표한 내용이네요. 대신, HttpInt.. 2025. 7. 6.
[Spring] open feign 테스트 코드 개발에 관심이 많으신 분들이라면 openfieng 들어보셨을 것이라고 생각합니다. 저도 최근에 관심이 생겨서 사내 프로젝트에 적용을 해보고 있습니다.configuration을 이용해 retry,5xx 에러가 발생하면 retry 하는 등 로직을 적용을 해보았습니다. 이를 테스트 하기 위해서는 통합 테스트 환경에서는 어렵습니다. 그래서 이를 테스트하는 방법을 공유 드립니다. 우선 테스트 패키지 내에 해당 코드를 작성합니다. 그리고 아래와 같은 테스트 코드를 입력합니다. @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class}.. 2025. 6. 26.
[Spring] webflux에서 별도의 스케줄러를 이용하여 cpu bound 작업 처리 vs 그냥 처리 webflux로 구현되어 있다면, blocking call이 있을 경우 성능이 크게 저하됩니다. blocking이 있는지 검출하기 위해 blockhound를 사용하여 감지할 수 있습니다. 만약 blokcing call이 있다면, 와 같은 에러 메시지가 발생합니다. 이는 snappy로 압축하는 부분에서 발생한 에러입니다. 이 blocking call을 피하기 위해서는 별도의 스케줄러를 이용해서 처리하라고 합니다.(출처 : https://www.baeldung.com/java-handle-blocking-method-in-non-blocking-context-warning) 그래서 이렇게 수정을 하면, block hound에서는 더 이상 에러가 발생하지 않습니다. 그러면 이 경우에는 성능이 개선이 되었을.. 2025. 5. 22.
[Spring] bean이 없는 경우 허용하도록 처리 글로벌 프로젝트를 진행하고 있고, 나라마다 법률이 다릅니다. 나라마다 개인 정보를 저장하기 위해서 필요한 정보가 다르고 보관 기간이 다릅니다.국내 서비스 개인 정보를 저장하기 위한 모듈을 만들면서 마주친 문제입니다. 문제현재 프로젝트 구조는 헥사고날 구조로 이루어져 있습니다. 비즈니스 로직은 나라가 서로 동일하지만, 데이터를 가져오는 방식이 다릅니다. 즉, 나라마다 apdater를 구현하도록 할 수 있습니다.서비스 제공 사양은 동일하여 controller는 하나로 구현되어 있습니다. 그렇다보니 국내 서비스를 위해서 개인 정보 로깅 로직이 들어가면, 다른 나라 서비스에 영향을 줄 수도 있습니다.이를 해결하기 위해 해당 bean이 있을 경우에만 동작하도록 할 필요가 있었습니다. 하지만 spring을 이.. 2025. 5. 1.
[Spring] redis stream 최근 회사에서 로깅 로직 때문에 성능 저하가 있었습니다.요청 -> 로그 DB 적재 형태로 되어 있다 보니 트래픽이 많이 발생하게 되면 connection pool , insert 성능 등 문제가 있었습니다. 그래서 로그를 DB에 바로 적재하는 방식이 아니라 중간에 로그를 모아서, bulk로 insert 하도록 로직을 수정하려고 했습니다.이를 위해 redis stream을 이용했습니다.  1. redis stream이란?redis에는 다양한 자료 구조가 있습니다.이중에서 이벤트 소싱처럼 쓰기 적절한 자료구조로 list, pub/sub, stream 이 있습니다. pub/sub의 경우에는 중복 없이 데이터를 동시에 처리할 수가 없습니다. 예를 들면, test_topic이라는 topic이 있고, 이를 여러 c.. 2024. 12. 17.
[Spring] @Value @SpringBootTest 없이 테스트하는 법 이번 주제는 테스트 관련입니다. 스프링에서는 @Value annotation을 통해서 application.properties에서 값을 가져와서 변수에 줄 수 있습니다. 이런 식으로 자주 이용합니다. 그렇다면 이를 테스트 하려면 어떻게 해야 할까요? 이렇게 테스트를 할 수 있습니다. 만약 @SpringBootTest가 없으면 name에 null이 들어갑니다. 하지만 서비스가 커지면, @SpringBootTest를 할 시에 테스트 실행 속도가 느려집니다. 그리고 다른 곳에서 bean을 주입할 때 에러가 생기는 등 이러한 현상이 발생하게 되면 이 테스트는 실패하게 됩니다. 단위 테스트를 하려면 어떻게 해야 할까요? 이런 식으로 할 수 있습니다. 만약 MyService에서 스프링 빈 주입 없이 단위 테스트를 .. 2024. 2. 28.