반응형

전체 글 83

VoltDB란

개요VoltDB 조사 및 사용성 검토어떤 목적 및 사상을 가지고 있는지, 해결한 문제, 한계점 등을 파악 VoltDB란?VoltDB는 기존 Database 대비 throughtput을 향상 시키기 위해 개발된 ACID를 준수하는 transactional database이다.기존 DB는 범용성을 위해서 최적화 범위를 제한하였는데, voltDB는 이를 개선하고자 했다.디자인 아이디어 - ACID 및 SQL 스펙을 만족하여 러닝커브를 줄임 - in-memory 방식을 통한 Disk-IO를 줄임 - data access를 serializing하여 locking, latching, transaction log 관리에 대한 오버헤드를 최소화  - clustering, replication을 통한 고가용성 및 안정성..

개발 일지 2024.06.03

ksqlDB 란

ksqlDB란?2017년 Confluent에서 오픈소스로 공개한 이벤트 스트리밍 데이터베이스이다.Kafka Streams + Kafka Connect로 구성되며, SQL을 인터페이스로 채용했다.이는 스트림처리 및 데이터 통합을 단순화시키는 효과를 가진다.특징대화형 작업환경을 제공SQL로 토폴로지를 표현하여 유지보수성 향상SQL 인터페이스로 인한 “상대적”으로 낮은 진입 장벽connect와 streams를 한번에 관리하여 아키텍처를 단순화Streams를 활용한 기능적 확장성을 제공간편한 설치 및 클라우드 지원데이터 탐색에 최적화LicenseksqlDB is licensed under the Confluent Community License.Confluent Community License: https://..

개발 일지 2024.05.27

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..

ProjectReactor Case Study

개요 Reactive coding에서는 적절한 operation 사용이 필수 불가결이다. 이는 가독성을 높이고, Sequence를 효과적으로 구성할 수 있다. 하지만, operator는 종류가 많고, 복잡한 것들이 많기 때문에, 선택에 어려움이 있다. 이번 글은 상황 별 operator 가이드와, 예시를 제공하고자 한다. Case 별 Operator 정리 Sequence 생성 Operator 상황 just, justOrEmpty 특정 Element 또는 Element들로 시작하는 Sequence 생성 fromArray, fromIterable, range, fromStream iteration 할 수 있는 Element들로 Sequence(Flux) 생성 empty empty한 Sequence 생성 de..

개발 일지 2024.02.22

Global Hooks And Context Propagation (Projectreactor Advanced Features)

Global Hooks란 리액터는 연산자의 콜백을 전역으로 설정할 수 잇다. 이는 Operator에 element가 흐르는 로직에 관여하는 것과 비슷하다. Hooks 클래스로 제공되는 기능으로 3가지 종류가 있다. 1. Dropping Hooks 2. Internal Error Hook 3. Assembly Hooks DroppingHooks 일반적으로 onError가 모든 에러를 잡을 수 있을 것으로 기대하지만, 그렇지 못한 상황이 발생한다. 가령 onComplete()를 호출 한 후 onNext()등 다른 signal를 연결했을 때 또는 handle되지 못한 에러가 있다. Dropped By Previous Complete // onNextDropped Example Hooks.onNextDroppe..

개발 일지 2024.02.20

Hot vs Cold Publisher (Projectreactor Advanced Features)

개요 Project Reactor 기능 중 심화 개념에 해당되는 파트들을 정리 Hot Publisher And Cold Publisher 일반적으로 Webflux 등에서 사용되는 Publisher들은 subscribe()가 되어야 Element를 생성한다. 이는 모두 Cold Publisher를 사용하기 때문이며, Hot Publisher는 구독과 상관없이 Element를 생성한다. cold와 hot의 차이점은 데이터 발행의 주도권이 누구에게 있는가 이다. Cold Publisher Flux source = Flux.fromIterable(Arrays.asList("blue", "green", "orange", "purple")) .map(String::toUpperCase); source.subscri..

개발 일지 2024.02.19
반응형