분류 전체보기 2526

[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

[디자인 패턴] 옵저버 패턴 (Observer Pattern)

옵저버 패턴객체의 상태 변화를 감지하고 그 변화를 통지받는 다른 객체들에게 자동으로 전달하는 디자인 패턴주로 이벤트 기반 시스템이나 데이터 변경 통지를 구현할 때 유용publish-subscribe 패턴을 구현할 수 있음  주요 구성 요소 1. Subject상태 변화를 감지하는 객체로, 옵저버 객체들을 관리하고, 상태 변화가 있을 때 모든 옵저버들에게 알리는 역할 2. ObserverSubject 객체의 상태 변화를 통지받는 객체로, Subject 객체에 등록되어 있으며, Subject 객체의 상태가 변할 때 업데이트 메서드를 호출하는 역할 옵저버 패턴 구현 예시옵저버 패턴을 사용하여 크리켓 데이터를 관리하고 표시하는 시스템을 구현하는 예시용어 설명wicket은 아웃된 타자의 수overs는 현재 경기가 ..

Design Pattern 2024.07.02

[디자인 패턴] 메멘토 패턴 (Memento Pattern)

메멘토 패턴캡슐화를 유지하면서 객체의 내부 상태를 외부에서 저장하고 복원할 수 있게 지원하는 디자인 패턴객체 상태를 외부에 저장했다가 해당 상태로 다시 복구할 수 있음메멘토 패턴의 주요 목적은 원본 객체의 상태를 캡슐화하여 외부에서 직접 접근하지 않고도 저장하고 복원할 수 있게 하는 것  주요 구성 요소 1. Originator현재 상태를 저장하고 복원할 객체 2. Memento원본 객체의 상태를 저장하는 객체 3. Caretaker메멘토 객체를 관리하며 필요시 원본 객체의 상태를 복원 메멘토 패턴 구현 예시Originator 객체의 상태를 여러 번 변경하고, 상태를 메멘토 객체로 저장한 후, 나중에 이를 복원하는 과정 1. Originator  2. Memento  3. Caretaker  4. 클라이..

Design Pattern 2024.06.30

[디자인 패턴] 커맨드 패턴 (Command Pattern)

커맨드 패턴요청을 객체로 캡슐화하여 다양한 요청, queueing 작업, 로깅 등을 매개변수화 할 수 있게 지원요청을 캡슐화하여 호출자(invoker)와 수신자(receiver)를 분리하는 패턴명령어의 실행 취소(undo) 기능 또한 지원해당 패턴은 실행될 기능을 메서드 매개변수화시키고 이 기능을 객체 내 메서드 호출로 변경할 수 있도록 지원  주요 구성 요소 1. Command명령을 실행할 메서드 정의하는 인터페이스 2. ConcreteCommandCommand 인터페이스 구현체실제 명령을 수행하는 역할 3. Invoker명령을 실행할 때 사용할 인터페이스 제공 4. Receiver명령을 수행하는 실제 객체 Command 패턴 구현 예시 1. Recevier  2. Command 인터페이스  3. Co..

Design Pattern 2024.06.30

[디자인 패턴] 이터레이터 패턴 (Iterator Pattern)

이터레이터 패턴집합 객체 내부 구조를 노출시키지 않으면서 순회하는 방법을 제공하는 패턴리스트, 배열, 트리와 같은 컬렉션 객체 내부의 요소들에 순차적으로 접근할 수 있도록 하는 디자인 패턴다양한 컬렉션에 대해 동일한 방식으로 요소들을 탐색할 수 있는 장점을 지님  주요 구성 요소 1. Iterator요소들을 순차적으로 접근하기 위한 메서드들을 정의하는 인터페이스일반적으로 hasNext()와 next() 메서드가 포함 2. ConcreteIteratorIterator 인터페이스를 구현체실제 컬렉션의 요소들을 탐색하는 역할 3. Aggregate컬렉션 객체를 표현하는 인터페이스iterator를 생성하는 메서드 createIterator()를 정의 4. ConcreteAggregateAggregate 인터페이..

Design Pattern 2024.06.30