Spring Cloud Stream + RabbitMQ Binder
·
📘 Backend/Spring Cloud
📚 Spring Cloud Stream + RabbitMQ Binder(시계열 데이터 집계 파이프라인 구현)사내에서 새로운 플랫폼 개발이 시작되기 전, 기존의 데이터 처리 로직은 아래와 같았습니다.기존 로직AI Raw Data 생성MQTT 프로토콜로 RabbitMQ에 만들어둔 Topic(Routing Key)기반 Quorum Queue로 데이터 적재Spring에서 Queue의 데이터를 Consume(DeliverCallBack을 이용한 Basic Consume 방식) 하여 전처리(집계 및 캐싱, 통계처리)구현할 로직BasicConsume 방식으로 Queue에서 받던 데이터를 StreamBridge 클래스 로 전환해 RabbitMQ Binder를 구현한 AggregationProcessor에 바로 전달A..
High Performance Blocking I/O - Virtual Thread
·
📘 Backend/Concurrency
📚 Virtual Thread를 이용한 고성능 I/O가상 스레드(Virtual Thread)가 긴 시간이 걸리는 Blocking I/O 연산을 처리할 때, 캐리어 스레드(Carrier Thread, 플랫폼 스레드)와의 마운트(Mount) 및 마운트 해제(Unmount) 과정은 다음과 같이 동작합니다.캐리어 스레드란?캐리어 스레드는 OS 플랫폼 스레드를 의미하며, JVM이 관리하는 실제 물리적 스레드입니다.가상 스레드는 캐리어 스레드에 마운트되어 실행됩니다.한 번에 여러 가상 스레드가 캐리어 스레드에 스케줄링되어 실행됩니다.마운트와 마운트 해제 과정가상 스레드는 Blocking I/O 연산과 같은 작업이 발생할 때, 다음 단계를 거칩니다.Step 1: 마운트(Mount)가상 스레드가 시작되면 JVM은 해..
Apache Kafka 구현 (Spring Boot & Docker-Compose)
·
📘 Backend/Message Broker
📚 Kafka이번에 Kafka를 공식문서를 보며 따라 구현해보고 있습니다.사내에서 진행하는 프로젝트들중 대부분은 RabbitMQ를 이용한 초당 데이터가 몇 안되는 작은 데이터 파이프라인을 사용 중 이었습니다.하지만 이번에 새로 개발하는 플랫폼에서는 수백군데의 고객사 데이터를 중앙서버 한곳에서 모든 데이터 스트림을 Consume 해야하는 요구사항이 있었고 RabbitMQ로는 데이터 처리량이 부족할 거 같아,실무 적용까지는 한참 공부해야 겠지만, 무작정 구현해보고자 우선 구현 후 글을 작성합니다.Kafka를 사용하려는 이유1. 귀찮음기존에 각각 다른 서버에 RabbitMQ를 개별적으로 설치하고, Queue 생성, Binding 설정, Exchange 관리 등 반복적인 작업이 많았음.프로젝트마다 새로운 서버..
Java Reflection - Dynamic Object Creation(Constructor<?>)
·
📘 Backend/Java
📚 ConstructorJava의 Constructor는 Java 리플렉션 API에서 제공하는 클래스 중 하나로, 클래스의 생성자(constructor)를 나타내는 객체입니다. Constructor는 java.lang.reflect 패키지의 일부이며, 특정 클래스의 생성자에 접근하거나 실행할 수 있도록 도와줍니다.클래스 로드 및 생성자 조회Class 객체를 사용하여 특정 클래스의 모든 Constructor 객체를 가져올 수 있고, 해당 생성자 파라미터를 알고 있다면 파라미터에 parameterTypes를 넣으면 특정 생성자를 가져올 수 있습니다.만약 가져온 Class에 생성자가 없다면 자동으로 기본 생성자를 포함한 단일 요소 배열로 반환됩니다.Public, Private 모든 생성자 로드getDecla..
Distributed Log Tracing (Zipkin + Spring Cloud Sleuth)
·
📘 Backend/Spring Cloud
📚 Distributed Log Tracing (Zipkin + Spring Cloud Sleuth)Spring Cloud Sleuth 란?Spring Cloud Sleuth 공식 문서Spring Cloud Sleuth는 분산 로그 추적기로, Spring에서 Zipkin Client 모듈로 각 Request에 대한 ID를 자동으로 생성해 줍니다.이 ID 정보는 각 Protocal의 Header를 통해 전달되며, 정보를 수신한 서버는 다음 서버에게 동일한 정보를 제공하는 방식으로 History를 추적할 수 있습니다.Trace IdSpan Id전체 작업에 할당된 ID. 작업은 각각의 작은 단위들로 구성되어 있다고 한다면, 각각의 작은 단위들은 공통의 Trace ID 를 갖고 있습니다.각각의 작은 단위들이 ..