반응형

spring 12

Spring Webflux with EventListener

개요 Spring framework에서 제공하는 eventListener 기능 설명 (4.2 이상 기준) Webflux 환경에서 EventListener에 대한 Sample Code 제시 동작원리 Spring @EventListener @Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Reflective public @interface EventListener { @AliasFor("classes") Class[] value() default {}; @AliasFor("value") Class[] classes() default {}; String conditio..

개발 일지 2024.03.20

API Gateway with Passport

개요 이전에 토스 및 네이버(라인?) 아티클에서 API Gateway를 통해서 MSA 구조에서 API로 접근하는 인증 / 인가를 수행하고 있음을 읽었었다. 이는 각 API 서버에서 필요한 기능을 한 곳에서 수행하여 생산성을 높여 효율화를 한 작업으로 감탄했었다. 현 개인서버의 요구사항으로는 최대한 중복 개발을 줄여 생산성을 극대화하며, 귀찮음을 덜고자하는 것이 부합한다. 위 방식을 응용하여 전체적인 아키텍쳐를 설계하고자 한다. 서버 아키텍쳐 설계 현 개인서버의 전체적인 아키텍쳐이다. - Nginx에서 SSL을 수행하고 reverse proxy를 통해 내부 통신을 연결한다. - Gateway Server는 Nginx로 부터 모든 요청을 받아서 L7 switching의 역할을 할 생각이다. 기본적으로 Gat..

Spring Properties from Lib Resources (PropertySourcesPlaceholderConfigurer, EnvironmentPostProcessor)

개요 Spring 프로젝트의 Properties를 구성하는 방법은 여러 가지가 있다. 그중 프로젝트 외부(external jar)의 resources에서 Load 하여 추가하는 방법에 대해 정리하고자 한다. 문제 상황 1. Github Project를 public으로 설정하면 일부 정보들은 노출되지 않도록 관리해야 한다. ex) db password.. etc 2. Multi Project 구조 같이 공통적으로 적용되어야 하는 Properties를 따로 관리해야 할 때 ex) Actuator 설정, 접속정보 등 Properties file을 Runtime에 외부에서 Load 하게 되면 위 문제상황을 해결할 수 있다. 일반적으로는 Server에 관리되는 Properties 파일을 두고 runtime 시점에..

Spring Webflux Threading (publishOn, subscribeOn) 분석

개요 Reactor에서 제공하는 Pub / Sub 모델은 실행될 Thread를 전략적으로 선택할 수 있게 interface를 제공한다. - publishOn(Scheduler scheduler): 어디에서 Publish 될 것인가 - subscribeOn(Scheduler scheduler): 어디에서 subscribe 할 것인가 Scheduler interface Scheduler extends Disposable { Disposable schedule(Runnable task); Disposable schedule(Runnable task, long initialDelay, TimeUnit delayUnit); Disposable schedulePeriodically(Runnable task, lon..

개발 일지 2023.10.30

Spring Cloud Gateway Code 분석

개요 Spring Cloud Gateway 동작 원리를 code를 통해 분석 Spring Cloud Gateway 동작 원리 Predicates and filters are specific to routes Spring Cloud Gateway의 핵심 아이디어인 “Routing 및 지역적 filter apply” 를 위해 HandlerMapping을 구현해서 추가했다. HandlerMapping은 Filter 이후 Exchange를 처리할 Handler를 찾는 클래스이다. RoutePredicateHandlerMapping으로 구현했으며, 구현된 핵심은 exchange를 기반으로 Route를 찾아서 attribute에 route를 넣는 작업 이후 FilteringWebHandler(webHandler 구..

개발 일지 2023.10.28

Spring Webflux, HttpHandler code 분석

개요 Spring Webflux가 http Request를 받아서 handler를 찾아 mapping, execute 및 response handle하는 과정에 대한 분석을 진행한다. Spring Webflux HttpHandler 분석 HttpHandler Http 요청에 대한 전반적인 처리를 담당하는 interface AutoConfiguration으로 Bean으로 만들어지며, Builder를 통해 생성된다. Builder는 생성된 Bean들을 기반으로 Handler를 생성한다. 따라서 HttpHandler Bean 생성 시점은 매우 늦다 (order = -2147483638) 생성 Flow 요약 1. AutoConfig를 통해 Builder를 생성 (with applicationContext) 2...

개발 일지 2023.10.27

Spring Cloud Sleuth란 - 분산 Tracing

Spring Cloud Sleuth란 Spring Cloud의 분산 트레이싱 솔루션으로 개발 오픈소스 Trace And Span name desc Trace 전체 작업을 하나로 묶는 것 작업 당 64-bit ID 하나를 가진다. Span 분산 시스템에서 세부 작업, 다른 서비스, 다른 머신 또는 다른 쓰레드 등으로 나누어 질 수 있다. 각각 64-bit ID를 가진다. 최초의 Span은 traceId와 동일하며, root span으로 불린다. 분산 시스템의 한 작업의 예이다. 전체 작업을 하나의 Trace로 묶고, 세부 작업을 Span으로 표현한다. 이를 통해 전체 프로세스를 한번에 tracing 할 수 있으며, 세부적인 작업에 대한 부분도 확인 가능하다. 전체 작업을 Span을 기준으로 tree 구조화..

개발 일지 2023.09.11

Webclient 동작 원리 및 Configuration

개요 Webclient는 Spring Webflux에 포함된 외부 요청 / 응답에 대한 Handling을 담당하는 모듈이다. 기존 RestTemplate의 요청 응답 사이의 동기성을 해결하고, 보다 효과적으로 서버 리소스를 사용하기 위해 등장했다. 내부적으로 비동기적으로 구성되어 있으며, 구현은 Spring Webflux를 활용했다. WebClient 사용 분석 WebClient는 총 4단계로 요청 -> 응답 처리를 추상화하였다. Http Config → Reqeust Config → Exchange → Response Handling 각각 - http 기본 설정 (socket 설정 포함) - 요청 정의 - 발송 - 응답 처리 1. Build with Config WebClient.builder() ....

개발 일지 2023.05.30

R2DBC history 및 issue

개요 Reactive Relational Database Connectivity SQL database에서 Reactive programming을 지원하기 위해 디자인된 새로운 Open Specification R2DBC를 쉽게 사용할 수 있도록 ORM의 사용법을 참고하여 설계하였으나, ORM Framework에서 제공하는 다양한 기능을 제공하지 않음. 특징 Based on the Reactive Streams specification. - provides a fully-reactive non-blocking API. Works with relational databases. - JDBC의 Blocking 특성과 달리, R2DBC를 사용하면 Reactive API를 사용하여 SQL database로 작업..

개발 일지 2023.04.21
반응형