분류 전체보기(126)
-
애그리거트
애그리거트 - 도메인 객체 모델이 복잡해지면 전반적인 구조나 큰 수준에서 도메인 간 관계를 파악하기 어려워짐. -> 코드 변경/확장 난이도 상승 - 애그리거트를 통해 복잡한 도메인을 이해하고 관리하기 쉬운 단위로 만들 수 있음. - 애그리거트를 통해 관련 객체를 하나의 군으로 묶을 수 있고, 상위 수준에서 도메인 모델 간 관계 파악 가능 - 애그리거트는 모델을 이해하는 데 도움을 줄 뿐 아니라 일관성 관리 기준도 됨. - 한 애그리거트에 속한 객체는 유사하거나 동일한 라이프 사이클 가짐 - 애그리거트는 경계를 가짐 -> 한 애그리거트에 속한 객체는 다른 애그리거트에 속하지 않음 - 애그리거트 경계를 설정할 때 기본이 되는 것은 도메인 규칙과 요구사항 - 도메인 규칙에 따라 함께 생성되는 구성 요소는 한 ..
2023.07.19 -
spring 환경에서 redis pub-sub을 이용한 멀티 캐스팅
도입 계기 기존에 대기자를 매칭하는 서비스를 제작하고 있었다. 해당 서비스는 SSE(Server Sent Event)로 구현하며, 각 서비스가 Sink 상태를 직접 관리하였다. 문제는 서비스가 Sink를 관리하다보니 스케일 아웃 진행시에 각 확장 서버가 대기자를 동기화가 되지 않는 문제가 있었다. 대기자를 동기화하기 위해서 새로운 대기자가 생기면 각 서버에 multicasting 하는 방법을 구상했다. 멀티 캐스팅이란? 네트워크에서 그룹으로 지정된 여러 대상에게 대이터를 전송하는 방식. 송신자는 그룹에 데이터를 전송하고, 해당 그룹에 가입된 수신자만 데이터를 수신하는 구조. redis pub-sub란? 인메모리 DB인 redis는 publish-subscribe 메시징 패턴을 지원하여 메시지를 발행하고 ..
2023.07.15 -
Spring Webflux 및 MVC Security환경 비교
개인적으로 느끼기에는 구조 자체는 MVC 환경 Security와 비슷하다. 허나 반환 형식이랑 체인 설정법만 조금씩 다른 느낌이다. SecurityConfig MVC 환경 @Configuration @EnableWebSecurity @RequiredArgsConstructor @FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true) public class SecurityConfig { JwtAuthenticationFilter jwtAuthenticationFilter; @Bean public SecurityFilterChain configure(HttpSecurity http) throws Exception { return http.authorize..
2023.07.15 -
Spring webflux를 활용한 SSE(Server Sent Event) 구현
SSE(Server Sent Event) 란? 서버의 데이터를 실시간으로 스트리밍 하는 기술 HTTP프로토콜 기반 text/event-stream 미디어 타입 사용 클라이언트와 서버가 최초 한 번 HTTP 연결 후 서버가 클라에게 지속적으로 데이터 전송 단방향 통신, 실시간 업데이트, 자동 재연결 기능 제공 spring에서 SSE 구현 방법 SseEmmiter Spring MVC에서 SSE를 구현하는 스택. 간단하게 사용 가능하고 스레드 기반으로 동작하나, 높은 리소스 사용하고 확장성에 제한이 있음 https://github.com/phjppo0918/SseEmitter-sample GitHub - phjppo0918/SseEmitter-sample Contribute to phjppo0918/SseEm..
2023.07.15 -
Spring Webflux - Scheduler
Scheduler란 Reactor Sequence에서 사용되는 스레드를 관리해주는 관리자 주요 역할 스레드 관리 비동기 작업을 실행할 스레드 풀을 관리 별도의 스레드에서 실행되며, 블로킹되지 않고 비동기적으로 처리 작업 스케줄링 비동기 작업 실행을 스케줄링. 즉시/지연/주기적 실행 등 다양한 옵션 제공 백프레셔 관리 백프레셔 : Publisher와 Subscriber 간 데이터 흐름 제어, 작업 속도를 조절하여 효율적 데이터 처리를 가능하게 함 Scheduler 전용 Operator subscribeOn(), publishOn() 이 Scheduler 전용 Operator임 적절한 Scheduler를 전달하면 해당 특성에 맞는 스레드가 Reactor Sequence에 할당 subscribeOn() 구독이..
2023.07.15 -
Spring Webflux Sink
Sinks란? Reactor에서 Processor(Publisher + Subscriber) 을 개선한 구현체 Signal을 프로그래밍 방식으로 푸시 Flux 및 Mono의 의미 쳬계를 가짐 멀티 스레드 방식으로 Signal을 전송해도 스레드 안정성 보장 Sinks 사용 방법 Sinks.One 한 건의 데이터를 전송 Mono 방식으로 Subscriber가 데이터를 소비할 수 있도록 함 @Test @DisplayName("mono test") void sinkTest() { Sinks.One sinkOne = Sinks.one(); Mono mono = sinkOne.asMono(); sinkOne.emitValue("Hello", Sinks.EmitFailureHandler.FAIL_FAST); mono..
2023.07.15