반응형

Reactive-Programming 17

[Redis] ReactiveRedisTemplate

ReactiveRedisTemplateReactiveRedisTemplate은 Spring data redis reactive의 추상화 클래스로, ReactiveRedisConnectionFactory를 통해서 RedisConnection을 주입해서 사용한다. ReactiveRedisConnectionFactoryReactiveRedisConnectionFactory는 RedisConnection을 제공하며, LettuceConnectionFactory가 구현하고 있다.RedisTemplate baen은 다음과 같은 구조로 되어있다.import org.springframework.boot.autoconfigure.data.redis.RedisReactiveAutoConfiguration;@AutoCon..

[Redis] Reactive Redis, Lettuce

RedisRedis는 메모리 기반의 데이터 저장소다. key-value 구조이며 다양한 형태의 자료구조를 제공한다.메세지큐로(PUB/SUB)도 사용이 가능하고, 메모리에 데이터를 저장하기 때문에 빠른 처리속도가 장점이며 레디스 내부에서 명령어를 처리하는 부분은 싱글 스레드로 동작한다. Redis Instance레디스 인스턴스를 하나만 띄워서 처리하는 경우 여러 클라이언트가 하나의 redis 서버로 요청을 전달한다. 단일 redis 서버에 문제가 발생하면 장애로 인해 모든 클라이언트에서 접속이 불가능해진다.이러한 문제를 막기 위해 여러가지 기술이 제공된다.Redis replicationmaster와 replica로 구성되어 있으며, 모든 클라이언트는 master를 대상으로 값을 변경하거나 업데이트한다. 그..

[mongoDB] ReactiveMongoRepository

ReactiveMongoRepositoryReactiveSortingRepository와 ReactiveQueryByExampleExecutor를 상속한 interface로 SimpleReactiveMongoRepository에서 구현한다. Query method, Query By Example, Entity callback을 제공한다. ReactiveMongoRepository 등록mongoRepository의 등록은 MongoReactiveRepositoriesAutoConfiguration이 활성화 되어 있다면 SpringBoot 기준으로 자동으로 스캔해서 사용할 수 있지만, r2dbc와 같이 사용하는 경우라면 스프링 입장에선 CRUDRepository, ReactiveSortingReposito..

[mongoDB] operation

operationReactiveMongoOperations는 ReactiveFluentOperations를 상속하고, ReactiveFluentMongoOperations는 여러 Operations를 상속하고 있다.ReactiveFindOperation : find query 관련 메서드 제공 ReactiveInsertOperation : insert query 관련 메서드 제공ReactiveUpdateOperation : update query 관련 메서드 제공ReactiveRemoveOperation : delete query 관련된 메서드 제공ReactiveAggregationOperation : aggregation query와 관련된 메서드 제공ReactiveChangeStreamOperatio..

[mongoDB] spring data reactive

spring data mongo reactiveEntity데이터베이스에서 하나의 Document와 매칭되는 클래스로, ReactiveMongoEntityTemplate, ReactiveMongoRepository등은 데이터베이스에 요청을 보내고 그 결과를 Entity 형태로 반환한다. Collection, Document에 필요한 데이터베이스 metadata를 어노테이션 등으로 제공한다.import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import org.springframework.data.mongodb.core.mapping.Document;@Document(collation = "person")@No..

[mongoDB] document

MongoDB DocumentMongoCollection에 query를 실행해서 bson의 Document를 반환하고, bson의 Document는 Map 를 구현하고 내부에 LinkedHashMap을 저장하여 Map 메서드를 overrie한다.Document 예제collection에서 findAll query를 실행하여 결과를 subscribe 후 onNext로 출력한다. 모든 결과를 찾은 후 onComplete 이벤트로 종료한다.public class getDocumentExample { var connection = new ConnectionString("mongodb://localhost:27017/capo"); var settings = MongoClientSettings.builde..

[mongoDB] collection

MongoDB CollectiondriverMongoDB사에서 공식적인 2가지 Sync Driver, reactive streams driver 를 제공한다Sync Driver동기적으로 동작하는 어플리케이션을 위한 MongoDB 드라이버클라이언트가 요청을 보내면 응답이 돌아오기전까지 스레드가 blocking메서드가 응답 객체를 바로 반환하기 때문에 직관적이며 쉽게 작성할 수 있다스레드 동시성 문제로 많은 요청을 처리하기 힘들다Mongo Reactive Streams Driver비동기적으로 동작하는 어플리케이션을 위한 MongoDB 드라이버클라이언트가 요청을 보내면 스레드는 non-blocking모든 응답이 Publisher를 이용해서 전달되기 때문에 처리하기 어렵다Spring reactive stack과..

Reactor - Publisher, Subscriber

ReactorReactive streams를 구현한 비동기 데이터 스트림 처리를 지원한다.Spring webflux에서 메인으로 사용되며, backpressure를 제공하여 안정성을 높이고 다양한 연산자로 다양한 연산들을 조합하여 가독성을 증대시킨다. 데이터는 소스(Publisher)에서 나와서 소비자(Subscriber)에게 전달된다. 데이터는 다양한 변형과 중간 단계를 거치게되고 중간 부품을 모으는 더 큰 조립 라인의 일부가 된다.한 지점에서 결함이 발생하거나 처리가 불가능해진다면 업스트림에 신호를 보내서 흐름 제한도 가능하다. Reactor PublisherReactor에서 Mono와 Flux를 제공한다. CorePublisher는 reactive streams의 Publisher를 구현하며, ..

Netty - ChannelHandler

ChannelHandlerChannelHandler는 Channel의 I/O 이벤트를 처리하거나 I/O 작업을 수행하는 핸들러다. ChannelInboundHandler : Channel I/O 이벤트를 수행한다.ChannelOutboundHandler : Channel I/O 작업을 수행한다.ChannelDuplexHandler : ChannelInboundHandler, ChannelOutboundHandler 모두를 구현한 핸들러다. ChannelInboundHandlerinbound I/O 이벤트를 처리하기 위한 handler channelRegistered : channel이 eventLoop에 등록되는 경우channelUnregistered : channel이 eventLoop 에서 제거되..

Netty - Channel

ChannelNetty에서 중요한 역할을 하는 channel은 JavaNIO에서 사용되는 Channel과 비슷한 역할을 가진다.Netty에서의 channel은 pipeline, channelFuture 기능을 추가하여 channel에서 IO 연산이 완료 되었을 때 리스너를 추가하거나 결과를 조회할 수 있는 기능을 제공한다.ChannelFutureimport io.netty.util.concurrent.GenericFutureListener;import java.nio.channels.Channel;public interface ChannelFuture extends Future { /* * Returns a channel where the I/O operation associated with..

반응형