Spring Framework
-
Spring Cloud Gateway란?Spring Framework/Spring Cloud Gateway 2023. 12. 30. 00:01
개요 기존에는 AWS의 API Gateway를 주로 사용했었는데 Spring Cloud Gateway에 대해 알게 되어 정리해보고자 합니다. API GATEWAY란? 클라이언트와 백엔드 서비스 사이에 위치하는 proxy 역할을 수행합니다. 모든 클라이언트 요청에 대한 end point를 통합하는 역할을 수행하고, 인증 및 권한, 모니터링, logging 등 추가적인 기능도 수행합니다. Spring Cloud Gateway란? Spring Boot 2.x, Spring WebFlux, Project Reacter 기반으로 이루어져 있으며 Netty기반으로 구성되어 있습니다. Spring Cloud Gateway의 주 목적은 간단하면서 확실한 방법으로 요청을 다른 API로 라우팅 하고, 보안, 메트릭/모니터..
-
@ConditionalOnMissingBean 알아보기Spring Framework 2023. 12. 29. 00:01
개요 Spring Bean 충돌을 해소하기 위해 @ConditionalOnMissingBean을 사용해 보다가 조금 더 자세하게 알아보고 싶어 정리해보고자 합니다. @ConditionalOnMissingBean이란? 이름으로도 유추해 볼 수 있듯이 BeanFactory에 Class의 Type 혹은 동일한 이름의 Bean이 존재하지 않는 조건인 경우에만 Bean을 등록합니다. Spring 환경에서 동일한 이름의 Bean이 존재하는 경우에는 해당 Bean을 등록하지 않으며 이미 등록된 Bean을 사용하게끔 할 수 있습니다. Spring Boot와 같이 자동구성을 지원하기 위한 클래스에 사용이 추천됩니다. JacksonAutoConfiguration 예제 @Configuration(proxyBeanMethod..
-
R2DBC란 무엇인가?Spring Framework/WebFlux 2023. 12. 27. 00:01
개요 webflux를 활용하다가 r2dbc라는 개념이 등장하게 되었고 어떤 것인지 알아보고자 합니다. R2DBC란 무엇인가? R2DBC는 Reactive Relation DataBase Connectivity의 약어입니다. Reactive Relation으로 R이 2번 등장하여 R2DBC라고 불립니다. 해석해 보면 "반응형 관계형 데이터베이스 연결" 입니다. 간단하게 설명하자면 non-blokcing 기반의 db connection을 위해 사용되는 API입니다. Spring MVC + JDBC는 blokcing 기반이라면 WebFlux + R2DBC은 non-blocking 기반입니다. R2DBC의 등장 배경 reactive programming의 특징인 적은 스레드로 동시성을 처리하는 non-blokc..
-
WebFlux + Coroutine + R2DBC로 CRUD 구현해보기Spring Framework/WebFlux 2023. 12. 25. 00:01
개요 정확한 동작까지는 모르더라도 WebFlux + Coroutine + R2DBC를 활용하여 CRUD를 구현해보고자 합니다. MVC만 다루던 개발자로써 모르는 개념이 다수 등장할 수 있습니다. 저는 개인적으로 아래의 개념에 대해서 잘 모른다고 느꼈고 이번 포스팅 이후에 하나씩 알아가보려고 합니다. r2dbc Mono와 Flux, Flow CoroutineCrudRepository coRouter와 @RestController의 차이 의존성 추가 dependencies { implementation("org.springframework.boot:spring-boot-starter-webflux") implementation("org.springframework.boot:spring-boot-starter..
-
ObjectMppaer ParameterNamesModule 알아보기Spring Framework 2023. 12. 24. 00:01
개요 ObjectMapper에 기본적으로 등록되는 모듈로는 ParameterNamesModule이 있습니다. 해당 모듈은 어떤 역할을 수행하는지 궁금하여 알아보고자 합니다. Spring Boot Jacson Auto-Configuration @Configuration(proxyBeanMethods = false) @ConditionalOnClass(ParameterNamesModule.class) static class ParameterNamesModuleConfiguration { @Bean @ConditionalOnMissingBean ParameterNamesModule parameterNamesModule() { return new ParameterNamesModule(JsonCreator.Mod..
-
FeignClient dismiss404 동작원리Spring Framework 2023. 12. 22. 00:01
개요 Feign client ErrorDecoder 분석에 이어 dismiss404 옵션에 대해서 정리해보고자 합니다. Feign Client의 ErrorDecoder 400~ 500번대의 상태코드를 받는 경우 FeignException을 반환합니다. 따라서 404가 발생한 경우에도 FeignClientException을 반환합니다. 404의 경우에 예외를 던지지 않도록 수정 @FeignClient( name = "localTestFeign", url = "http://localhost:8080", dismiss404 = true, ) dismiss404에 대한 docs를 읽어보면 404 상태코드를 받으면 FeignException을 던지는 대신 decode 할지를 true/false로 결정할 수 있습니..
-
SpringBoot ObjectMapper customize 하는 방법Spring Framework 2023. 12. 21. 00:01
개요 우리는 객체를 직렬화, 역직렬화를 수행할 때 ObjectMapper를 활용하곤 합니다. 하지만 저는 ObjectMapper를 활용하면서 다음과 같이 예상하지 못했던 에러들을 만난 적이 있습니다. Spring Bean으로 신규 ObjectMapper를 등록했고, 기존의 ObjectMapper가 오버라이드되어 수정하지 않은 api에서 역직렬화 시 예외 발생 Java를 사용할 때는 @AllArgumentConsturtor 어노테이션을 추가함에 따라 기본생성자가 사라져 역직렬화 시 예외 발생 첫 번째의 경우에는 내가 수정한 범위가 아닌 곳에서 에러가 발생하여 파악하기가 힘들었습니다. 두 번째의 경우에는 역직렬화의 경우 보통 외부 api 호출을 통해 일어나기 때문에 인지하기가 어려웠습니다. 이번기회에 Jac..
-
Webflux란?Spring Framework/WebFlux 2023. 12. 2. 00:01
Webflux란? Spring 5에서 추가된 웹 프레임워크이며 클라이언트/서버에서 reactive programming 기반의 애플리케이션을 만들 수 있도록 지원합니다. Reactive Programming이란? reactive라는 용어는 변화에 반응하는 것을 중심을 두고 만든 프로그래밍 모델을 의미합니다. 데이터가 변경될 때마다 이벤트를 발생시켜서 데이터를 전달합니다. 데이터를 비동기적으로 처리하며 이벤트 기반 아키텍처를 통해 실시간으로 데이터의 변화에 반응할 수 있게 프로그래밍을 수행합니다. 주요하게 나오는 개념으로 옵저버 패턴이 있으며 Subscriber와 Publisher가 존재합니다. Reactive Programming이 non-blokcing인 이유도 작업이 완료될 때까지 기다리기보다 데이터..