전체 글 2600

[디자인 패턴] Reactor Pattern

Reactor Pattern이벤트 드리븐 아키텍처에서 널리 사용되는 패턴으로 동시에 들어오는 요청을 처리하는 이벤트 핸들링 패턴해당 패턴은 이벤트 루프를 사용하여 다양한 I/O 이벤트(읽기, 쓰기, 연결 수락 등)를 처리하며, 각 이벤트는 사전에 등록된 핸들러에 의해 처리단인 쓰레드와 Selector를 통해 이벤트 처리네트워크 애플리케이션에서 높은 성능과 확장성을 제공  주요 구성 요소 1. Selector여러 I/O 채널에서 발생한 이벤트를 감지하는 Event Demultiplexernon-blocking 모드로 설정된 채널들을 감시하고, I/O 이벤트(읽기, 쓰기, 연결 요청 등)가 발생했을 때 이를 감지하고 Dispatcher에게 알림 2. Dispatcher Selector가 감지한 이벤트를 적절..

Design Pattern 2024.07.15

마블 다이어그램 (Marble Diagram)

마블 다이어그램리액티브 프로그래밍에서 사용되는 시각적 도구로, 스트림의 흐름과 데이터 변환을 이해하기 쉽게 표현한 것주로 RxJava나 Reactor와 같은 리액티브 라이브러리의 문서에서 자주 사용Reactor에서 지원하는 Operator를 이해하는 데 중요한 역할마블 다이어그램을 먼저 보고 난 후 API 문서를 읽을 때와 그렇지 않을 때의 이해도에는 상당한 차이가 존재처음 사용해 보는 Operator를 올바르게 이해하고 사용하기 위해서 해당 Operator의 API 설명을 보기 전 마블 다이어그램부터 먼저 확인하는 것을 권장  1. Publisher가 데이터를 내보내는 타임라인그림에서는 단순히 Publisher의 타임라인으로 표시했지만 해당 Publisher는 데이터 소스를 최초로 내보내는 Publis..

[Java] Reactor 간단 정리

ReactorSpring Framework 팀의 주도하에 개발된 리액티브 스트림즈의 구현체Spring Framework 5 버전부터 리액티브 스택에 포함되어 Spring WebFlux 기반의 리액티브 애플리케이션을 제작하기 위한 핵심 역할 담당간단하게 요약하면 리액티브 스트림즈의 구현체인 Reactor는 리액티브 프로그래밍을 위한 라이브러리 1. Reactor의 주요 특징Reactive Streams: 앞서 언급했다시피 Reactor는 리액티브 스트림즈 사양을 구현한 리액티브 라이브러리Non-Blocking: Reactor는 JVM 위에 실행되는 non-blocking 애플리케이션을 제작하기 위해 필요한 핵심 기술Java's Functional API: Reactor에서 Publisher와 Subscri..

[Java] 자바 IO, NIO, AIO

자바 IO자바 1 버전에 최초 도입파일과 네트워크에 데이터를 읽고 쓸 수 있는 API 제공InputStream, OutputStream과 같이 byte 단위로 읽고 쓸 수 있는 streamblocking 방식으로 동작 1. InputStream바이트 스트림을 통해 데이터를 읽는 데 사용되는 추상 클래스Closable 구현체이기 때문에 명시적으로 스트림을 닫거나 try-with-resources 사용 가능파일, 네트워크 연결, 메모리 버퍼 등 다양한 소스로부터 데이터를 읽을 수 있는 표준화된 방법을 제공어떤 source로부터 데이터를 읽을지에 따라 다양한 구현체 존재FileInputStreamByteArrayInputStreamBufferedInputStreamSocketInputStream 1.1 주요 ..

[Elasticsearch] 최적화를 위한 시스템 설정

1. Resource Limit시스템에서 프로세스가 사용할 수 있는 여러 자원의 한계점을 설정하는 방법설정하는 방법은 OS마다 상이하며 여기서는 mac os, linux 기준으로 설명시스템 리소스는 제한된 자원인데 resource limit 설정 시 시스템 관리자가 시스템 리소스를 보호하고 용도에 맞게 분배 가능이를 통해 Elasticsearch의 안정성과 성능을 보장 1.1 Resource Limit 적용 방법$ulimit: Unix 및 Unix 계열 운영 체제에서 사용자 별로 시스템 리소스 제한을 임시로 설정하고 조회하는 명령어로 적용 시 현재 세션 동안에만 유효하며, 세션이 종료되면 설정이 사라짐 설정을 영구적으로 적용하려면 /etc/security/limits.conf 파일을 수정해 Soft Li..

Elastic Search 2024.07.13

[SpringBoot] parallel stream 버그 해결

개요Hibernate의 CurrentTenantIdentifierResolver와 AbstractDataSourceBasedMultiTenantConnectionProviderImpl를 이용해 멀티 테넌시를 적용한 서비스에서, 시간이 비교적 오래 걸리는 import 기능을 제공합니다.이는 RDBMS 특성상 테이블들이 정규화되어 있어, 여러 테이블에 데이터를 넣어줘야 하고 넣을 때 외래키 제한에 걸리지 않도록 순서를 맞춰야 하기 때문입니다.저희 팀은 처리 시간을 단축시키기 위해 연관되어 있지 않은 테이블끼리 묶어서 parallel stream을 적용해 병렬 처리를 시도했으나, 간헐적으로 ThreadLocal에서 다른 테넌트, 즉 다른 스키마로 요청을 보내는 문제가 발생하여 foreign key constr..

[DEV] 기록 2024.07.07

[디자인 패턴] 방문자 패턴 (Visitor Pattern)

방문자 패턴객체의 구조와 객체가 수행해야 하는 작업을 분리하여, 새로운 작업을 추가할 때 구조를 수정하지 않고도 확장할 수 있도록 해주는 디자인 패턴주로 복잡한 객체 구조를 다룰 때 유용하며, 각 객체가 다양한 작업을 수행해야 할 때 적용 가능Double Dispatch 활용 가능객체가 두 번의 메서드 호출을 통해 자신에게 적합한 메서드를 결정하고 실행한다는 것을 의미이를 통해 객체 구조에 새 기능을 추가해야 할 때, 기존 클래스의 수정 없이 확장 가능여러 타입의 객체를 다루는 작업을 캡슐화하여 코드의 유지보수성과 확장성을 높임  주요 구성 요소 1. Elementaccept 메서드를 정의해당 메서드는 Visitor를 인자로 받아들이며, Visitor의 visit 메서드를 호출 2. ConcreteEle..

Design Pattern 2024.07.05

[디자인 패턴] 템플릿 메서드 패턴 (Template Method Pattern)

템플릿 메서드 패턴콜백으로 상속 대신 위임을 사용하는 템플릿 패턴특정 알고리즘의 구조를 정의하되 해당 알고리즘의 일부 단계를 서브 클래스에서 구현하도록 위임알고리즘의 뼈대를 정의하고 일부 단계를 추상 메서드로 선언하여 서브 클래스에서 구체적인 동작을 제공하여 코드 재사용성을 높이고 알고리즘의 변화를 서브 클래스에서 쉽게 구현할 수 있도록 지원  주요 구성 요소 1. Abstract Class알고리즘의 뼈대를 정의하고 템플릿 메서드를 포함템플릿 메서드는 알고리즘의 구조를 정의하며 하나 이상의 추상 메서드를 호출 2. Abstract Method서브 클래스에서 구현해야 하는 메서드들 3. Concrete Class추상 클래스에서 정의된 추상 메서드를 구현하여 알고리즘의 구체적인 단계를 제공 템플릿 메서드 패..

Design Pattern 2024.07.03

[디자인 패턴] 전략 패턴 (Strategy Pattern)

전략 패턴여러 알고리즘을 캡슐화하고 상호 교환 가능하도록 지원하는 패턴으로써 코드의 유연성과 재사용성을 높일 수 있음다음과 같은 상황에서 유용함알고리즘이 다양할 때: 특정 기능의 구현이 다양하게 존재할 때 각 구현을 별도의 클래스로 분리알고리즘이 빈번히 변경될 때: 특정 기능의 구현이 자주 변경되거나 확장될 때 쉽게 변경.조건문을 대체할 때: 복잡한 조건문을 전략 패턴으로 대체하여 코드의 가독성을 높일 수 있음  주요 구성 요소 1. Context전략을 사용하는 클래스 2. Strategy다양한 전략의 공통 메서드를 정의 3. ConcreteStategy구체적인 전략 구현체 전략 패턴 구현 예시클라이언트가 필요에 따라 정렬 알고리즘을 변경하는 예시 1. Strategy  2. ConcreteStrateg..

Design Pattern 2024.07.03

[디자인 패턴] 상태 패턴 (State Pattern)

상태 패턴객체의 상태에 따라 동작을 다르게 하는 객체 지향 디자인 패턴해당 패턴 적용 시 상태를 객체로 캡슐화하여 상태 전환을 쉽게 관리할 수 있으며, 조건문을 사용하지 않고 객체의 행동을 변경 가능  주요 구성 요소 1. Context상태를 갖는 객체상태 변경을 위한 인터페이스를 제공하고 현재 상태를 유지 2. State상태를 나타내는 인터페이스 혹은 추상 클래스특정 상태에 따른 행동 정의 3. ConcreteStateState 인터페이스 구현체각 상태에 따른 행동 정의 상태 패턴 동작 방식Context는 State 인터페이스를 통해 현재 상태 객체 호출상태 전환 필요할 때 Context는 현재 상태를 다른 상태로 교체각 ConcreteState 클래스는 Context의 상태 변경을 유발할 수 있음 상..

Design Pattern 2024.07.03