전체 글 121

Chapter 4 리포지터리와 모델 구현

도메인 주도 개발 시작하기 4장을 요약한 내용입니다. 4.1 JPA를 이용한 리포지터리 구현 객체 기반의 도메인 모델과 관계형 데이터 모델 간의 매핑을 처리하는 기술로 ORM만한 것이 없다. 자바의 ORM 표준인 JPA를 이용해 리포지터리와 애그리거트를 구현하는 방법에 대해 살펴본다. 4.1.1 모듈 위치 리포지터리 인터페이스는 애그리거트와 같이 도메인 영역에 속하고, 리포티저티를 구현한 글래스는 인프라스트럭처 영역에 속한다. 리포지터리 구현 클래스를 인프라스트럭처 영역에 위치시켜서 인프라스트럭처에 대한 의존을 낮추는 것이 좋음 4.1.2 리포지터리 기본 기능 구현 리포지터리가 제공하는 기본 기능 ID로 애그리거트 조회 애그리거트 저장 public interface OrderRepository { Ord..

Chapter 3 애그리거트

도메인 주도 개발 시작하기 3장을 요약한 내용입니다. 3.1 애그리거트 온라인 쇼핑몰 시스템을 개발할 때 상위 수준 개념을 이용해 전체 모델을 정리하면 전반적인 관계를 이해하는 데 도움이 된다. 상위 수준 모델을 개별 단위로 변환 상위 수준에서 개념을 파악하려면 더 오랜 시간이 걸림 더 많은 코드와 도메인 전문가와 대화를 통해 상위 수준에서 모델 간 관계가 이해하기 좋음 백 개 이상의 테이블을 한 장의 ERD에 모두 표시하면 테이블간의 관계를 파악하느라 큰 틀에서 데이터 구조를 이해하는데 어려움이 있다. 도메인 객채 모델이 복잡해지면 개별 구성요소 위주로 모델을 이해하게 되고 전반적인 구조나 큰 수준의 도메인간의 관계를 파악하기 어려움 복잡한 도메인을 이해하고 관리하기 쉬운 단위로 만들려면 상위 수준에서..

카테고리 없음 2023.11.08

Chapter 2 아키텍처 개요

도메인 주도 개발 시작하기 2장을 요약한 내용입니다. 2.1 네 개의 영역 “표현”, “응용”, “도메인”, “인프라스트럭처”는 아키텍처를 설계할 때 출현하는 전형적인 네 가지 영역 표현 영역 사용자의 요청을 받아 응용 영역에 전달, 응용 영역의 처리 결과를 사용자에게 전달 스프링 MVC 프레임워크가 표현 영역의 기술 응용 영역 표현 영역을 통해 사용자의 요청을 전달받은 응용 영역은 시스템이 사용자에게 제공해야할 기능을 구현 “주문 등록”, “주문 취소”, “상품 상세 조회” 등의 기능을 예로 들수 있다. 기능을 구현하기 위한 도메인 영역의 도메인 모델을 사용 “주문 취소” 기능을 제공하는 응용 서비스를 도메인 모델을 사용해서 기능 구현이 가능 public class CancelOrderService {..

Chapter 1 도메인 모델 시작하기

도메인 주도 개발 시작하기 1장을 요약한 내용입니다. 1.1 도메인이란? 온라인 서점을 구현할 소프트웨어라고 봤을때 도메인이란? 상품 조회, 구매, 결제, 배송 추적 등 온라인 서점 도메인은 몇개의 하위 도메인으로 나눌 수 있다. 카탈로그 하위 도메인은 고객에게 구매할 수 있는 상품 목록을 제공하고, 주문 하위 도메인은 고객의 주문을 처리 혜택의 하위 도메인은 쿠폰이나 특별 할인과 같은 서비스 제공 하위 도메인은 다른 하위 도메인과 연동하여 완전한 기능을 제공 한다. 고객이 물건을 구매하면 주문, 결제, 배송, 혜택 하위 도메인의 기능이 엮이게 된다. 특정 도메인을 위한 소프트웨어라고 해서 도메인이 제공해야 할 모든 기능을 직접 구현하는 것은 아님 배송 도메인의 일부 기능은 자체 시스템으로 구현하고 나머..

07장 한글 검색 확장 기능

엘라스틱서치 실무 가이드 7장을 요약한 내용입니다. Suggest API가 키워드 자동완성 기능을 지원 한글 키워드는 정상 동작하지 않음 7.1 Suggest API 소개 Suggest API를 이용하면 텀과 정확히 일치하지 않는 단어도 자동 인식 Suggest API 4가지 방식 Term Suggest API: 추천 단어 제안 Compleetion Suggest API: 자동완성 제안 Phrase Suggest API: 추천 문장 제안 Context Suggest API: 추천 문맥 제안 7.1.1 Term Suggest API 편집거리(edit distance)를 사용해 비슷한 단어를 제안 문자열이 다른 문자열과 얼마나 비슷한가를 편집거리를 사용해 알아 볼 수 있음 편집거리 측정 방식은 단어를 삽입,..

06장 고급 검색

엘라스틱서치 실무 가이드 6장을 요약한 내용입니다. 6.1 한글 형태소 분석기 사용하기 한글 문서를 효율적으로 검색하게 하려면 한글 형태소 분석기를 활용해 분석기를 구성해야 한다 한글 형태소 분석기로는 상용 제품도 있고 오픈소스로 공개된 것도 있다 6.1.1 은전한닢 형태소 분석기 자바 인터페이스와 스칼라 인터페이스 두 종류를 제공 엘라스틱서치에서 가장 보편적으로 사용하는 한글 형태소 분석기 tokenizer 설정을 통해 은전한닢 플러그인에서 제공하는 seunjeon_tokenizer를 활성화하고 analyzer 설정을 통해 형태소 분석기를 정의하면 사용 준비가 끝난다 사전 추가 검색 엔진에서 “삼성”을 검색하거나 “전자”를 검색했을 때도 문서가 검색되게 하고 싶다면 복합명사를 분리해서 역색인 해야 한다..

카테고리 없음 2023.11.08

05장 데이터 집계

엘라스틱서치 실무 가이드 5장을 요약한 내용입니다. 데이터를 그룹화해서 각종 통계 지표를 제공하기 위해 집계 기능을 제공 SQL에서 제공하는 Group By 연산과 비슷하다 5.1 집계 집계는 데이터를 그룹화하고 통계를 구하는 기능 5.1.1 엘라스틱서치와 데이터 분석 대용량의 데이터를 처리하기 위해 데이터를 조각내어 관리 문서의 수가 늘어나도 배치 처리보다 좀 더 실시간에 가깝게 문서 처리 가능 영화별로 리뷰 점수를 집계하는 예제 SQL의 GROUP BY를 사용 SELECT SUM(ratings) FROM movie_review GROUP BY movie_no Query DSL 사용 집계를 여러 개 중첩해서 사용 가능 범위, 날짜, 위치 정보도 집계 가능 { "aggs": { "movie_no_agg"..

04장 데이터 검색

엘라스틱서치 실무 가이드 4장을 요약한 내용입니다. 다양한 검색 조건을 충족시키기 위해 Query DSL이라는 특수한 쿼리 문법을 제공 4.1 검색 API 문장은 색인 시점에 텀으로 분해 색인 시점에 Analyzer를 통해 분석된 텀을 Term, 출현빈도, 문서번호와 같이 연색인 구조로 만들어 내부적으로 저장 검색 시점에는 Keyword 타입과 같은 분석이 불가능한 데이터와 Text 타입과 같은 분석이 가능한 데이터를 구분해 분석을 수행 [그림 4.1] 색인 시점과 검색 시점에서의 동작 비교 참고 4.1.1 검색 질의 표현 방식 검색 API는 기본적으로 질의를 기반으로 동작 4.1.2 URI 검색 URL에 검색할 칼럼과 검색어를 직접 지정하면 검색이 수행 간단한 URI 검색 쿼리 [표 4.1] URI 검..

03장 데이터 모델링

엘라스틱서치 실무 가이드 3장을 요약한 내용입니다. 매핑은 색인될 문서의 데이터 모델링이라고 할 수 있다 필드 데이터 타입이 자동으로 지정될 경우 실제 운영환경에서 예기치 않은 문제가 발생할 수 있다. 매핑 과정은 매우 중요한 과정 3.1 매핑 API 이해하기 매핑은 색인 시 데이터가 어디에 어떻게 저장될지 결정하는 설정 인덱스에 추가되는 각 데이터 타입을 구체적으로 정의하는 일 데이터베이스에서 테이블의 칼럼 정보를 정의하는 것이 중요하듯 엘라스틱서치에서도 데이터의 타입을 정의하는 것은 매우 중요 엘라스틱서치는 스키마리스이기 때문에 명시적으로 필드를 정의하지 않아도 데이터 유형에 따라 필드 데이터 타입에 대한 매핑 정보가 자동으로 생성 실수로 잘못된 타입이 지정될 경우 수정할 방법이 없음 첫 번째 문서를..

02장 엘라스틱서치 살펴보기

엘라스틱서치 실무 가이드 2장을 요약한 내용입니다. 2.1 엘라스틱서치를 구성하는 개념 2.1.1 기본 용어 인덱스 인덱스는 데이터 저장 공간 하나의 인덱스는 하나의 타입 하나의 물리적인 노드에 여러 개의 논리적인 인덱스를 생성 가능 검색시 인덱스 이름으로 문서 데이터를 검색 여러 개의 인덱스를 동시에 검색 가능 인덱스 생성 시 기본적으로 5개의 프라이머리 샤드와 1개의 레플리카 샤드 셋트를 생성 인덱스 이름은 모두 소문자 추가, 수정, 삭제, 검색은 RESTful API로 수행 인덱스가 없는 상태에서 데이터가 추가된다면 데이터를 이용해 인덱스가 자동으로 생성 샤드 색인된 문서는 하나의 인덱스에 저장 인덱스 내부에 색인된 데이터는 물리적인 공간에 여러 개의 파티션으로 나뉘어 구성 파티션을 샤드라고 부른다..