반응형

2024/03 5

Java Reactive Streams Publisher / Subscriber 분석 (projectreactor)

개요 ReactibeStreams의 사상 및 목적 조사 및 Publisher / Subscriber의 실제 동작 확인 Java의 Reactive Programing의 구현 사항 및 동작 원리 분석 Reactive Programing 이란 정의 데이터 스트림의 구성 및 변화의 전파에 대한 선언적 프로그래밍 패러다임 이 패러다임을 도입하면 배열 또는 이벤트 스트림을 쉽게 표현할 수 있다. 목적 1. (비동기적인) 이벤트 처리를 표현 및 구현하기 위해 2. 데이터 스트림을 표현 및 구현하기 위해 3. 반응형 시스템을 구현하기 위해 즉 실시간 데이터의 변화를 효율적으로 반영하여 제공하기 위해 탄생했다. 원칙 1. Responsive: 시스템은 요청/호출에 대해 즉각 응답할 수 있어야 한다. 2. Resilien..

개발 일지 2024.03.26

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

[Kafka] Parallel Consumer

Parallel Consumer란? Confulent.inc에서 개발한 Open Source로 consumer의 consume이 parallel 하게 동작하도록 구현했다. 주요 목적은 분산 Consume을 위해 partition이 과도하게 늘아나는 비합리성을 해결하기 위함이다. Before 기존 Consumer의 구조는 Consume의 주체는 Single Thread로 동작한다. 1. Consumer는 설정된 size 만큼 message를 읽는다(consume). 2. 설정된 offset 전략에 따라서 모든 message 처리가 완료될 때 까지 blocking 한다. 위 그림은 consume 프로세스 중 delay 될 수 있는 상황을 도식화했다. 4번 message가 web request 이슈로 dela..

개발 일지 2024.03.19

TURN Protocol (+ STUN Message)

TURN 이란? 정의 Traversal Using Relays around NAT의 약자이다. TURN protocol은 STUN 프로토콜의 확장으로 Direct Communication이 불가 한 상황에서, relay를 통해 두 연결을 제공해주는 역할을 가진다. 배경 NAT 뒤의 HOST로 hole punching을 통해 통신이 가능하다. 하지만, 두 host 모두 NAT 뒤에 있으며, 적절한 설정이 없으면 이 또한 불가 하다. 또는 엔터프라이즈 환경에서 UDP 통신 자체가 불가 할 수 도 있다. 이를 해결하기 위해, TURN 서버에서 두 client의 통신을 relay 해주며, 통신이 가능하게 한다. Overview Peer A Server-Reflexive +---------+ Transport A..

개발 일지 2024.03.18

API Gateway with Passport

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

반응형