BackEnd39 [Spring] openfeign 기여 시도했으나.... 이전 openfeign 테스트 관련 포트스에서 말한 것처럼 validation 관련해서 기여를 해보려고 했었습니다. 그래서 실제로 @FeignClients 가 선언되어 있는 인터페이스의 메소드를 호출할 때 어떠한 흐름으로 응답 -> object로 변환을 해주는지 디버깅해 봤습니다. 알아봤을 때,SpringDecoder라는 것을 이용하는 것으로 보입니다. 해당 프로젝트는 spring cloud 내의 프로젝트였습니다. 그래서 github로 가보니... 이런 내용이 있더라고요... 더 이상 업데이트 되지는 않고 버그 수정이나 소규모 PR 정도만 받는 것 같습니다.또한 Spring Interface Clients로 마이그레이션 하는 것을 추천하네요.심지어 좀 오래전에 발표한 내용이네요. 대신, HttpInt.. 2025. 7. 6. [백엔드] 헥사고날 아키텍처 사용 후기 현재 회사에서 레거시를 제외한 대부분이 헥사고날 아키텍처를 이용하고 있습니다.약 2년 정도 쓴 것 같은데, 이를 이용하면서 느낀점들입니다. 1. 장점1) adapter를 유연하게 갈아끼움으로써 특정 기술에 대한 의존도가 줄어듭니다. 만약 postgreSQL를 이용해 데이터 저장하던 것을 mongoDB로 바꾼다면 adapter 만 갈아끼우고 비즈니스 로직은 수정을 하지 않아도 됩니다. 2)이렇게 함으로써 비즈니스 로직에 대한 단위 테스트도 하기 쉬워집니다.port는 전부 mocking을 이용하여 외부 의존성을 최대한 줄임으로써 테스트하기 쉬워집니다. 2. 단점하지만 단점도 많다고 느꼈습니다. 1) 추상화가 생각보다 어렵습니다.기술이 바뀌더라도 비즈니스 로직에 영향 안 받도록 하는 것이 생각보다 어렵습니.. 2025. 7. 5. [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. [JAVA] logback gz 압축 방법 최근 회사에서 위치 정보를 보관하기 위한 모듈을 만들고 있습니다.사실 제 서비스에서만 돌아가도록 구현을 해도 상관 없지만, 팀 내에 다른 서비스에도 적용해야 하기 때문에 이왕이면 모듈화를 시켜서 팀의 생산성을 높이고 싶어서 모듈을 만들었습니다. 이 과정에서 logback 내부를 뜯어보면서 많은 점을 배웠습니다. 이 점을 공유하려고 해당 글을 작성하게 되었습니다. RollingPolicy위치 정보를 파일로 남기는 방식으로 진행이 되게 됩니다.그러기 위해서는 logback의 FileAppender를 이용하고 rolling policy를 이용하면 편합니다. spring 개발자라면 TimeBased나 SizeAndTimeBased를 자주 이용하실 것입니다. 하루가 지나면, 이 로그를 gz로 압축하는 등의 작업.. 2025. 4. 29. 이전 1 2 3 4 ··· 7 다음