본문 바로가기
728x90
반응형

전체 글179

[SpringBoot2] JPA Master/Slave 구조 분기 처리 서비스를 운영하다 보면 데이터베이스가 여러 개의 노드로 분산되어 Master/Slave 구조로 이루어져 있는 경우가 많습니다.보통 두가지 방법으로 분기처리가 가능한데요. 본 포스팅에서는 @Transactional 어노테이션을 사용하는 방식을 소개해드리겠습니다.  먼저 Transactional readOnly에 따라 분기하는 CustomRoutingDataSource를 생성합니다.import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;import org.springframework.transaction.support.TransactionSynchronizationManager;public class RoutingDataSour.. 2023. 8. 23.
[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.
[Intellij] VisualVM 연동 및 사용법 1. VisualVM 설치 https://visualvm.github.io/download.html VisualVM: Download Download VisualVM is distributed as a standalone tool at GitHub, and as an optional component of the GraalVM. Both are the same bits with the same features. Standalone tool runs on any compatible JDK, component is configured to run using the host GraalVM. visualvm.github.io 2. Intellij + VisualVM 연동 Settings > Plugin에서 Vi.. 2023. 7. 13.
[AWS SDK for JAVA] EC2 보안그룹(Security Group) 조회 AWS SDK for JAVA 2.X 으로 EC2 인스턴스에 설정된 보안그룹을 조회해보겠습니다. 1. pom.xml에 라이브러리 추가 software.amazon.awssdk ec2 2.20.87 ※ groupId가 software이면 version 2, com.amazonaws이면 version 1입니다. 2. Ec2Client 생성 2.1. iam role 사용 import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.ec2.Ec2Client; @Configuration public class AwsEC2Configuration { @Resource private Environment env; @Bean p.. 2023. 6. 21.
[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.
[Java 21] Virtual Thread 요약 Java 8 이후 세 번째 LTS버전인 Java 21이 2023년 9월에 릴리즈 예정인데, 이 버전에 Virtual Thread 기능이 추가될 예정입니다. (현재 Java 19에 Preview Features로 들어가 있음) 그래서 Virtual Thread 주제로 포스팅하려고 보니 이미 잘 정리되어 있는 포스팅이 많아서 요약정리만 하겠습니다. 높은 처리량을 보장하는 Reactive Programming인 Spring Webflux는 Mono나 FLux와 같은 Publisher 타입으로 값을 래핑 해야 하기 때문에 코드 가독성이 좋지 않고, 고성능을 보장하더라도 유지보수가 어렵고 러닝커브가 존재합니다. 최신 pinpoint 버전에서는 webflux도 지원하지만 이전 버전에서는 pinpoint로 안 잡힘 .. 2023. 5. 15.
[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.
[CloudFront] JA3 TLS Client Fingerprint Amazon CloudFront에서 CloudFront-Viewer-JA3-Fingerprint 헤더를 지원하고 있습니다. JA3 fingerprint는 request가 알려진 클라이언트로부터 온 것인지, malware나 악성 봇인지, 예상되는(허용 목록에 있는) 애플리케이션인지 판단하는 데 도움이 될 수 있습니다. 이 헤더는 뷰어의 SSL/TLS Client Hello 패킷에 의존하며 HTTPS 요청에만 존재합니다. JA3 메서드는 Client Hello 패킷의 TLSVersion, Ciphers, Extensions, EllipticCurves, EllipticCurvePointFormats 필드에 대한 바이트의 10진수 값을 수집하는 데 사용됩니다. 각 필드를 ,(comma)로 구분하고 -(Hyph.. 2023. 4. 19.
728x90
반응형