분류 전체보기 2526

[디자인 패턴] 인터프리터 패턴 (Interpreter Pattern)

인터프리터 패턴언어의 문법을 정의하는 클래스를 이용하여 해당 언어의 문장을 해석하고 평가하는 디자인 패턴문법이 복잡하거나 자주 변경되지 않는 경우 유용반복되는 문제 패턴을 언어 또는 문법으로 정의하고 확장 가능주로 컴파일러나 스크립트 언어 인터프리터에서 사용됨  주요 구성 요소 1. AbstractExpression인터프리터에 의해 해석되는 공통 인터페이스 혹은 추상 클래스주로 interpret 메서드를 포함하며, 이 메서드는 특정 문법 규칙을 해석하는 역할 2. TerminalExpression문법의 기초 요소를 구현하는 클래스주로 숫자, 변수, 상수와 같은 기초적인 값들을 해석하는 역할 3. NonTerminalExpression문법의 복합 요소를 구현하는 클래스터미널 표현과 다른 비터미널 표현을 조..

Design Pattern 2024.06.30

[디자인 패턴] 중재자 패턴 (Mediator Pattern)

중재자 패턴객체 지향 프로그래밍에서 객체 간의 상호작용을 간소화하고 캡슐화하는 데 사용되는 패턴객체들이 서로 직접 통신하는 것을 피하고 중앙에 있는 중재자 객체를 통해 통신하게 함으로써 여러 컴포넌트 간의 결합도를 중재자를 통해 낮출 수 있음  주요 구성 요소 1. Mediator중재자 역할을 수행하는 인터페이스를 정의 2. ConcreteMediatorMediator 인터페이스 구현체객체들 간의 상호작용을 조정 3. ColleagueMediator와 상호작용하는 객체일반적으로 Colleague 객체들은 Mediator 객체를 통해서만 서로 통신 4. ConcreteColleagueColleague 인터페이스 구현체해당 객체들은 Mediator를 통해 다른 Colleague들과 통신 중재자 패턴 구현 예..

Design Pattern 2024.06.30

[디자인 패턴] 책임 연쇄 패턴 (Chain-of-Responsibility Pattern)

책임 연쇄 패턴요청을 처리할 수 있는 여러 개의 처리 객체를 연결하여 요청을 처리할 수 있는 객체가 요청을 처리할 때까지 차례로 전달하는 행동 디자인 패턴해당 패턴은 다음과 같은 상황에서 유용하게 사용됨여러 객체가 요청을 처리해야 할 때: 요청을 처리할 수 있는 객체가 여러 개 있고, 각 객체가 자신이 처리할 수 없는 요청은 다음 객체로 전달하는 경우객체 간의 결합도를 낮춰야 할 때: 요청을 보내는 객체와 요청을 처리하는 객체 간의 결합도를 낮춰서 더 유연한 코드를 작성하고자 할 때동적으로 요청 처리 객체를 변경할 수 있어야 할 때: 실행 중에 요청 처리 객체를 동적으로 변경할 수 있도록 해야 할 때  주요 구성 요소 1. Handler요청을 처리하는 인터페이스 혹은 추상 클래스다음 Handler를 가리..

Design Pattern 2024.06.29

[디자인 패턴] 프록시 패턴 (Proxy Pattern)

프록시 패턴특정 객체에 대한 접근을 제어하거나 기능을 추가할 수 있는 패턴원래 객체에 대한 대리자 역할을 수행하는 프록시 객체를 생성하여 원래 객체에 대한 접근을 제어하거나 추가적인 기능을 제공프록시를 거치게 하여 초기화 지연, 접근 제어, 로깅, 캐싱 등 다양하게 응용해 사용 가능  주요 구성 요소 1. Subject프록시와 실제 객체가 공통으로 구현하는 인터페이스 혹은 추상 클래스 2. Real Subject프록시 객체가 대리하는 실제 작업을 수행하는 객체 3. Proxy프록시와 실제 객체가 공통으로 구현하는 인터페이스 혹은 추상 클래스 프록시 패턴 구현 예시이 예제에서는 가상 프록시를 사용하여 실제 객체의 생성을 지연시킴 1. Image 인터페이스 (Subject)   2.RealImage (Rea..

Design Pattern 2024.06.29

[디자인 패턴] 플라이웨이트 패턴 (Flyweight Pattern)

플라이웨이트 패턴메모리 사용을 최소화하면서 많은 객체를 효율적으로 지원하기 위해 사용되는 구조 디자인 패턴대량의 작은 객체를 생성하는 경우 유용하며 객체의 상태를 자주 변하는 속성(Extrinsit)과 변하지 않는 속성(Intrinsit)으로 분리하여 공통된 내재 상태를 공유함으로써 메모리 사용을 줄임  주요 구성 요소 1. Flyweight 인터페이스모든 Flyweight 클래스가 구현해야 하는 인터페이스로 주로 자주 변하는 속성(Extrinsit)을 인자로 받는 메서드를 정의 2. ConcreteFlyweight 클래스Flyweight 인터페이스 구현체변하지 않는 속성(Intrinsit)을 저장 3. FlyweightFactory 클래스Flyweight 객체를 생성하고 관리하는 역할요청된 Flywei..

Design Pattern 2024.06.29

[디자인 패턴] 퍼사드 패턴 (Facade Pattern)

퍼사드 패턴퍼사드 패턴은 클라이언트가 사용해야 하는 복잡한 서브 시스템 의존성을 간단한 인터페이스로 추상화하는 데 사용한 인터페이스로 구성된 높은 수준의 인터페이스를 제공하여 서브시스템을 사용자가 더 쉽게 사용 가능하도록 지원퍼사드 패턴 적용 시 여러 객체로 구성된 복잡한 서브시스템에 접근할 때 단일 인터페이스를 통해 접근할 수 있게 되어 코드의 가독성 및 유지보수성 향상 * Facade는 불어로 `건물의 입구 쪽 전경`을 의미건물의 전경을 봐서는 내부적으로 배관이 어떻게 설치되어있고 기둥이 어떤 방식으로 설치되었는지 모름  주요 구성 요소 1. Facacde복잡한 서브시스템의 간단한 인터페이스를 제공 2. Subsystem퍼사드가 호출하는 클래스들이며, 복잡한 로직을 포함퍼사드 객체가 이들 객체의 기능..

Design Pattern 2024.06.29

[디자인 패턴] 데코레이터 패턴 (Decorator Pattern)

데코레이터 패턴객체의 기능을 동적으로 확장할 수 있게 해주는 구조적인 디자인 패턴상속이 아닌 위임을 통해 런타임에 부가 기능을 추가하는 것이 가능해짐  주요 구성 요소 1. Component데코레이터와 실제 객체의 공통 인터페이스 혹은  추상 클래스ex) Shape 인터페이스 2. ConcreteComponent기본 기능을 구현하는 실제 객체ex) Circle, Rectangle 클래스 3. DecoratorComponent 인터페이스를 구현하거나 상속받는 추상 클래스해당 클래스는 실제 객체에 대한 참조를 포함(Dependecy Injection)하며, Component 인터페이스의 메서드를 위임(delegation)ex) ShapeDecorator 4. ConcreteDecoratorDecorator ..

Design Pattern 2024.06.29

[Elasticsearch] 색인

색인이 동작하는 과정여러 개의 Primary 샤드로 구성되어 있는 경우 hash(_id) % (샤드 개수)로 샤딩이 이루어짐MurmurHash3 알고리즘 사용해시 테이블에서 키를 빠르고 균일하게 분산시키기 위해 사용되는 비암호화 해시 함수Elasticsearch에서는 색인 시 문서의 필드를 고유한 키 값으로 변환하는 데 사용되며 해당 알고리즘은 매우 빠르고 충돌 가능성이 낮아 널리 사용 Apache Lucene 색인새 문서가 Apache Lucene에 색인되면 바로 디스크에 즉시 기록되는 대신 in-memory buffer에 analyzer에 의해 analyze 된 문서가 저장됨바로 디스크에 저장하지 않고 in-memory buffer를 거치는 이유는 I/O 횟수를 절약하기 위해 그리고 롤백에 용이하기 ..

Elastic Search 2024.06.28

[Elasticsearch] 검색

Elasticsearch Cluster 구조Elasticsearch는 분산형 검색 엔진으로써 데이터를 여러 노드에 분산해서 저장각 노드는 여러 개의 인덱스를 가질 수 있으며각 인덱스는 여러 개의 샤드로 구성샤드는 primary 샤드와 replica 샤드로 구성샤드는 Apache Lucene 인스턴스로써 독립적으로 작동하며 각 샤드는 데이터의 일부분을 가지고 있음  검색 요청의 처리 과정Elasticsearch의 검색 요청은 크게 두 단계로 나뉨Query phaseFetch phase 이 때문에 query then fetch라고도 불림 1. Query Phase검색 요청이 수행되어야 하는 샤드를 결정하고 각 샤드에서 검색을 수행하는 단계client 요청은 L4 등을 통해 특정 노드로 라우팅요청을 받은 노드..

Elastic Search 2024.06.28

[Elasticsearch] ILM

ILM(Index Lifecycle Management)Elasticsearch의 인덱스 수명 주기를 자동으로 관리하기 위한 기능로깅 시스템처럼 인덱스가 계속해서 쌓이는 환경에서 인덱스를 효율적으로 관리 가능ILM을 사용하면 인덱스가 생성된 후의 상태를 단계별로 정의하고, 각 단계에서 수행할 작업 지정 가능하며 이를 통해 인덱스의 크기와 성능을 최적화하고, 스토리지 비용을 절감하며, 인덱스 수명 주기 전반에 걸쳐 데이터를 효율적으로 관리 가능인덱스가 특정 크기 또는 문서 수에 도달하면 새 인덱스를 생성특정 기간이 지나면 새로운 인덱스를 생성하고 이전 인덱스를 보관아주 오래된 인덱스를 제거 ILM의 주요 개념 1. 수명 주기 정책(Lifecycle Policy)인덱스의 수명 주기를 정의하는 정책각 정책은 ..

Elastic Search 2024.06.27