분류 전체보기 2526

[디자인 패턴] 팩토리 메서드 패턴 (Factory Method Pattern)

팩토리 메서드 패턴어떤 인스턴스를 생성하는 책임을 구체적인 클래스가 아니라 추상적인 인터페이스의 메서드로 감싸는 패턴추상화하지 않을 경우 객체지향 SOLID 원칙의 OCP 원칙에 어긋나 변경에 닫혀있지 않음어떤 인스턴스를 생성하는 책임을 구체적인 클래스(Concrete Class)가 가져가면 구체적인 클래스가 늘어날 때마다 기존 코드 변경이 불가피한 구조정리하자면 객체 생성의 책임을 서브클래스에게 위임하여, 객체 생성을 위한 인터페이스를 정의하지만 어떤 클래스의 인스턴스를 생성할지는 서브클래스가 결정하게 하는 디자인 패턴  부연 설명팩토리 역할을 할 인터페이스를 생성하여 구현부 중 일부 변경이 필요한 메서드를 추상 메서드로 선언하고 하위 클래스(Concrete Class)에서 해당 메서드를 구현Facto..

Design Pattern 2024.06.18

[Elasticsearch] 스크립트 쿼리

스크립트 쿼리Elasticsearch에서 제공하는 스크립트 언어를 활용해서 검색 쿼리 생성필터 기반의 검색 쿼리여러 필드를 동시에 다루거나 검색 조건이 달라지는 경우 활용 스크립트 사용 방법 스크립트 언어 종류painless: Elasticsearch에서 자체적으로 만든 스크립트 언어expression: 랭킹과 정렬에 사용하기 위한 js를 바이트 코드로 컴파일하는 언어mustache: 템플릿에서 변수 매칭을 위해서 사용되는 표현식으로 {{ variable }}로 표현java 1. painless빠르고 안전자바의 데이터 타입을 지원하며 def와 같은 동적인 타입도 지원조건문의 경우 switch를 제외한 일반적인 자바 문법 지원 1.1 painless 스크립트 사용 케이스문서에 접근하는 용도업데이트, 삭제,..

Elastic Search 2024.06.13

[디자인 패턴] 싱글톤 패턴 (Singleton Pattern)

싱글톤 패턴두 가지 목적을 가진 패턴인스턴스를 오직 한 개만 생성만들어진 하나의 인스턴스에 글로벌하게 접근할 수 있는 방법을 제공  싱글톤 패턴 구현 방법싱글톤 패턴은 여러 가지 방법으로 구현 가능하며 각각의 특징에 대해 간략하게 설명해 보겠습니다. 1. 싱글톤 패턴 구현 방법 #1동기화를 사용해 멀티쓰레드 환경에서 안전하게 만드는 방법   부연 설명클래스 외부에서 생성자를 호출할 수 없도록 private 생성자를 선언하여 새로운 인스턴스 생성 불가능하도록 처리싱글톤 패턴 목적에 맞게 클래스 내에서 인스턴스를 만들고 글로벌하게 접근할 수 있도록 처리해야 함글로벌하게 접근할 수 있어야 하므로 정적(static) 메서드로 선언멀티 쓰레드 환경에서도 thread-safe 하도록 synchronized 키워드를..

Design Pattern 2024.06.13

[Elasticsearch] 자동완성

자동완성 기능서비스에서 사용자가 입력 중인 단어 낱말의 나머지 부분을 예측해서 제안하는 기능영어 동의어로는 autocomplete, typeahead, instant search과거에는 단순하게 찾고자 하는 검색어의 나머지 부분을 제안하는 수준 (LIKE 검색)최근에는 사용자의 니즈를 충족시키기 위해 부가정보를 넣어서 고도화하는 추세 자동완성 기능을 구현하기 위해 필요한 조건 1. 자동완성 후보 키워드를 위한 데이터 셋사용자의 최근 검색어 목록인기 키워드 후보군 2. 제한된 개수 및 길이키워드의 길이가 너무 길지 않아야 함제안하는 키워드의 개수가 반드시 많을 필요 없음 3. 요청에 대한 빠른 응답응답할 데이터 후보군을 캐싱하여 100ms 이내로 응답 4. 색인 시 고려사항자소분리 기능색인량이 상대적으로 ..

Elastic Search 2024.06.12

[Java] 리액티브 프로그래밍

1. 리액티브 시스템과 리액티브 프로그래밍 1.1 리액티브 시스템(Reactive System)reactive의 사전적 의미는 `반응을 하는`이라는 뜻이며 어떤 이벤트나 상황이 발생했을 때, 반응을 해서 그에 따라 적절하게 행동하는 것을 의미리액티브 시스템은 `반응을 잘하는 시스템`이며 클라이언트의 요청에 즉각적으로 응답함으로써 지연 시간을 최소화 1.2 리액티브 선언문(Reactive Manifesto)리액티브 선언문은 리액티브 시스템 구축을 위한 일종의 설계 원칙이자 리액티브 시스템의 특징리액티브 선언문을 통해 리액티브 시스템이 지향하는 바가 무엇인지 명확하게 알 수 있음리액티브 시스템의 설계 원칙에 따라 대규모 분산 시스템 또는 멀티코어 기반의 클라우드 시스템, 모바일 시스템 등 빠른 응답성을 바탕..

[Elasticsearch] 집계

집계(aggregation)분산되어 있는 문서를 검색 조건과 일치하는 문서만 모아 수행데이터를 그룹핑하고 통곗값을 얻는 기능SQL의 Group By 절과 비슷한 역할aggs/aggregations 문법으로 사용하여 집계 정의커스텀 플러그인과 스크립팅으로 집계를 생성하는 것도 가능집계에만 따로 필요한 필터 쿼리를 사용할 수 있음 1. 집계(aggregation) 구조aggs 혹은 aggregations의 항목으로 쿼리 사용   2. 집계 종류 2.1 하위 집계sub aggregation으로 집계한 결과 문서로 한번 더 집계ex) 차량 브랜드로 모델을 집계 (현대 -> 아반떼, 소나타, 그랜저) 하위 집계 또는 중첩 횟수가 많아질수록 성능 저하 2.2 중첩 집계동일 레벨의 aggregation으로 여러 개의..

Elastic Search 2024.06.09

[Elasticsearch] 검색

URI 쿼리URL에 검색할 칼럼과 검색어를 지정하면서 검색 수행단순한 쿼리일 때 유리한 방식Request Body 검색에 비해 단순하고 사용하기 편하지만 쿼리가 길어질 경우 가독성 떨어짐"key = value" 형태로 전달하는 방식ex) GET [인덱스]/_search?q=year:2024 1. URI 쿼리 파라미터 파라미터default 값설명q 검색을 수행할 쿼리 문자열 조회df 기본값으로 검색할 필드 지정analyzer 쿼리 문자열에 대한 형태소 분석기 지정analyzer_wildcardfalse접두어/와일드카드 검색 활성화 여부 지정default_operatorOR두 개 이상의 검색어에 대해 검색 조건 연산자 설정_sourcetrue본문의 필드를 전체 표시할지 여부 지정sort 검색 결과의 정렬 기..

Elastic Search 2024.06.07

[Elasticsearch] 분석기(analyzer)

분석기(analyzer)문서의 내용은 분석기에 의해 처리되고 생성된 토큰으로 검색어떤 분석기를 사용할지와 분석기의 실행 순서가 중요너무 많은 분석을 하면 색인 성능 저하색인과 검색의 분석기는 가급적 같은 tokenizer를 사용하는 것이 바람직경우에 따라 색인과 검색에 다른 분석기를 사용하는 케이스가 있음특정 검색어로 인해 더 많은 단어를 필터링해야 하는 경우동의어, 맞춤법 교정 등으로 검색어를 확장하는 경우 1. 분석기 종류Elasticsearch는 다양한 분석기를 제공하며 버전에 따라 변경이 많으므로 분석기도 버전에 따라 변화가 많음자주 사용되는 분석기는 다음과 같으며 각 예제는 "The 10 most loving dog breeds" 문자열이 input으로 들어왔을 때 결과 자주 사용되는 분석기설명..

Elastic Search 2024.06.07

[Elasticsearch] 매핑과 인덱스 alias, template

매핑관계형 데이터베이스에서 스키마와 비슷한 개념RDBMS에서 스키마는 테이블을 구성하는 구성요소 간의 논리적인 관계와 정의Elasticsearch에서는 JSON 형태의 데이터를 Apache Lucene이 이해할 수 있도록 바꿔주는 작업Elasticsearch가 검색 엔진으로 전문 검색과 대용량 데이터를 빠르게 실시간 검색할 수 있는 이유는 매핑이 있기 때문인데 매핑을 엘라스틱 서치가 자동으로 하면 동적 매핑, 사용자가 직접 설정하면 정적 매핑 혹은 명시적 매핑 Elasticsearch의 인덱스에 들어가는 데이터의 타입을 정의하며 인덱스에 추가되는 데이터의 유형을 결정매핑을 지정하지 않아도 동적으로 매핑이 생성되지만 실무에서는 미리 저장할 필드들을 파악하고 정적 매핑 하는 것을 권장인덱스 및 데이터 유형..

Elastic Search 2024.06.06

[Elasticsearch] 데이터 모델링 기초

인덱스인덱스는 도큐먼트를 저장하는 논리적 단위관계형 데이터베이스의 테이블과 유사한 개념인덱스에 다수의 도큐먼트가 포함되는 구조인데, 동일한 인덱스에 있는 도큐먼트는 동일한 스키마를 가짐기본적으로 인덱스는 용량이나 숫자 제한 없이 무한대의 도큐먼트를 포함할 수 있기 때문에 이론적으로는 하나의 인덱스에 수백만, 수억 개의 도큐먼트가 저장될 수 있음하지만 인덱스 크기가 커질 경우 검색 시 많은 도큐먼트를 참조해야하기 때문에 성능 저하 유발 가능따라서 운영 환경에서는 인덱스 용량 제한을 두는 것을 권장기본적으로 특정 도큐먼트 개수에 도달하거나 특정 용량을 넘어서면 인덱스를 분리혹은 일/주/월/년 단위 같은 날짜/시간 단위로 인덱스를 분리하기도 하며 이 경우 특정 날짜의 데이터를 쉽게 처리 가능 인덱스 생성 (S..

Elastic Search 2024.06.06