본문 바로가기
728x90
반응형

spring64

[WebFlux] Mono에 담긴 List를 하나로 합치기 Spring WebClient를 통해 동일한 객체타입을 리턴하는 여러 외부 API를 호출하면서 Mono를 List로 담았는데, 각 API 호출 응답으로 받은 객체가 List여서 Flux.merge(monoList).collectList() 타입이 Mono이 돼버렸습니다. Mono가 아닌 Mono로 리턴할 수 있는 방법을 알아보겠습니다. 우선 아래 코드를 비교해 확인해 주세요. // AS-IS public Mono getList(...) { List monoList = new ArrayList(); Mono listMono1 = Mono.just(List.of(...)); monoList.add(listMono1); Mono listMono2 = Mono.just(List.of(...)); monoList.. 2023. 7. 13.
[Spring] WebMVC에서 WebFlux 사용 (with WebClient) Spring에는 두 가지 웹 프레임워크가 있습니다. WebMVC : 전통적인 멀티 스레드 기반의 웹 프레임워크 WebFlux : 리액티브 스택 기반의 웹 프레임워크 Spring WebMVC와 WebFlux는 공존할 수 없다고 생각했는데, Spring framework에서 제공하는 Http Client API로 RestTemplate 대신 WebClient를 사용하라고 권고하고 있어서 의문이 생겼습니다. 두 모듈의 공존이 가능한 것인가? Spring 문서를 확인해보면 "애플리케이션은 하나 또는 다른 모듈을 사용하거나 경우에 따라 두 모듈을 모두 사용할 수 있습니다(예: 반응형 WebClient가 포함된 Spring MVC 컨트롤러)."라고 써져 있습니다. 실제로 spring-boot-starter-web,.. 2023. 7. 13.
[Spring] RestTemplate Deprecated의 진실 Spring framework에서 제공하는 Http Client API로 RestTemplate이 있습니다. 그런데 인터넷에서 RestTemplate이 Deprecated 된다는 얘기를 종종 볼 수 있습니다. 하지만 최근 문서에서는 WebClient 사용을 권고하는 말 뿐, RestTemplate을 Deprecated 한다는 말은 없습니다. 그럼 왜 RestTemplate이 Deprecated된다는 소문이 퍼진 걸까요? 확인해 보니 spring 5.2.1.RELEASE 버전 문서에 RestTemplate가 Deprecated 될 예정이라고 써져 있었습니다. 이 문서가 소문의 근원지가 아닐까 싶습니다. 그런데 spring github issue에도 다음과 같은 글이 올라와있습니다. "향후 사용 중단 가능성.. 2023. 7. 13.
[Spring Boot] RedisCommandExecutionException: ERR unknown command 'CONFIG', with args beginning with: 'GET' 'notify-keyspace-events' io.lettuce.core.RedisCommandExecutionException: ERR unknown command 'CONFIG', with args beginning with: 'GET' 'notify-keyspace-events' ... org.springframework.data.redis.RedisSystemException: Error in execution; nested exception is io.lettuce.core.RedisCommandExecutionException: ERR unknown command 'CONFIG', with args beginning with: 'GET' 'notify-keyspace-events' ... org.springframework.beans.f.. 2023. 5. 19.
[Spring Security] DaoAuthenticationProvider org.springframework.security.authentication.dao.DaoAuthenticationProvider DaoAuthenticationProvider는 UserDetailsService 및 PasswordEncoder를 사용하여 사용자 아이디와 암호를 인증하는 AuthenticationProvider 구현입니다. The authentication Filter는 ProviderManager에 의해 구현되는 AuthenticationManager에 UsernamePasswordAuthenticationToken을 전달합니다. ProviderManager는 DaoAuthenticationProvider 타입의 AuthenticationProvider를 사용하도록 구성됩니다. Dao.. 2023. 5. 9.
[Spring] webSocket 보호되어 있는 글 입니다. 2023. 4. 5.
[Spring] @Transactional 과 UnexpectedRollbackException org.springframework.transaction.UnexpectedRollbackException: Transaction silently rolled back because it has been marked as rollback-only 아래 코드와 같이 예외가 발생했더라도 트랜잭션이 시작된 메서드에서 예외를 잡았으니 롤백 없이 커밋되고 정상적으로 값을 리턴할 것이라고 생각하였습니다. @Service public class AccountService { @Resource private HistoryService historyService; @Transactional public UserDetails signUp(UserVO param) { // ... try { historyService.add.. 2023. 2. 1.
[webFlux] SwitchIfEmpty가 항상 호출되는 이슈 해결 (Lazy Evaluation) webflux에서 if else문으로 switchIfEmpty를 주로 사용하는데, empty가 아닌 경우에도 switchIfEmpty를 항상 호출합니다. 왜 그러는 것인지, 어떻게 하면 호출을 안 하게 할 수 있는지 알아보겠습니다. 1: String str = "str"; 2: Mono.just(str) 3: .map(s -> { 4: System.out.println(s); 5: return s; 6: }) 7: .switchIfEmpty({ 8: System.out.println("defaultStr"); 9: return Mono.just("default"); 10: }) 11: .subscribe(); 위 코드를 보면 str이 비어 있지 않으니 문자열 "str"만 출력할 것이라고 생각하겠지만, 실.. 2022. 12. 20.
[SpringBoot] InfluxDB 연동 및 예제 시계열 데이터베이스 InfluxDB에 대한 설명과 설치는 아래 포스팅을 참고해주세요. [TSDB/InfluxDB] 시계열 데이터베이스 InfluxDB 설치하기 시계열 데이터베이스(TSDB, Time Series Database) Time-Stamped Data라고도 불리는 Time Seriese Data(시계열 데이터)는 시간에 따라 저장된 데이터를 의미합니다. 시계열 데이터들은 동일한 소스로부터 시간이 moonsiri.tistory.com 우선 influxDB의 UI에 접근합니다. (http://localhost:8086/) 메인 화면에 Java가 없다면 [MORE →] 버튼을 클릭합니다. java를 검색한 후 클릭합니다. 그러면 JAVA를 사용할 경우 추가해야 할 Dependency라던가 Client.. 2022. 11. 14.
[Spring] 쿠키와 파라미터로 Locale 처리(CustomCookieLocaleResolver, LocaleChangeInterceptor) Cookie를 이용하여 Locale을 정의하는 CookieLocaleResolver과 언어 파라미터에 따라 Locale을 변경해주는 LocaleChangeInterceptor에 대해 포스팅하겠습니다. CookieLocaleResolver CookieLocaleResolver는 말 그대로 Cookie를 이용해서 Locale 정보를 담는 것입니다. setLocale()을 통해 Locale 정보를 담은 Cookie를 생성하고 resolverLocale()에서 Cookie로 부터 Locale 정보를 가지고 옵니다. import org.springframework.web.servlet.i18n.CookieLocaleResolver; @Bean public LocaleResolver localeResolver() .. 2022. 9. 8.
728x90
반응형