본문 바로가기

분류 전체보기

(80)
[6] 클러스터 운영 클러스터 설정 GET _cluster/settings -persistent: 클러스터를 full restart 전체 재시작해도 유지된다. path.data 내 파일로 저장됨 -transient: 전체 재시작하면 내용이 사라진다. -설정 적용 우선순위: transient > persistent > config/elasticsearch.yml -지정한 설정 제거하려면 null 로 지정해주기 -공식 가이드는 transient 는 사라져서 추천 안 함 _cat API ‘compact and aligned text’ ** GET _cat/health?v ** GET _cat/health?format=json [ { "epoch" : "1701005989", "timestamp" : "13:39:49", "clu..
[5] 서비스 환경에 클러스터 구성 노드 설정과 노드 역할 노드 역할 https://www.elastic.co/guide/en/elasticsearch/reference/7.17/modules-node.html -master-eligible node(마스터 후보 노드) : 마스터 후보 중에서 선거를 통해 마스터 노드가 선출된다. 클러스터 관리, 인덱스 생성/삭제, 어떤 샤드를 어떤 노드에 할당한 것인지 정한다. -coordinating node(조정 노드): 노드는 기본적으로 조정 역할을 수행한다. mode.roles:[] 를 empty 로 두면 조정 역할만 수행한다. (1단계 scatter: 요청을 데이터 노드로 분산시키고, 2단계 gather: 결과 모으기) -remote_cluster_client: 다른 클러스터에 클라이언트로 붙을 ..
[4] 데이터 다루기 색인 API PUT [인덱스명]/_doc 덮어쓰기 허용 PUT [인덱스명]/_create 덮어쓰기 금지 refresh 검색 가능하게 만들기 true: 색인 직후 refresh 하고 응답을 반환한다. → 단점: 너무 작은 세그먼트를 많이 생성해 성능 저하와 병합 부하 커짐 wait_for: index.refresh_interval (기본값 1초)만큼 기다린다. refresh 대기하는 문서가 index.max_refresh_listeners 값(기본값 1000) 이상이면 바로 refresh 한다. false: refresh 하지 않는다 조회 API GET [인덱스명]/_doc/[_id] , GET [인덱스명]/_source/[_id] refresh 기다릴 필요 없이 바로 확인할 수 있다! 업데이트 API d..
[ElasticSearch] synonym_graph 의 start_offset, end_offset, position, position_length 이해하기 엘라스틱서치의 _analyze 는 analyzer 분석 결과를 확인할 수 있는 API 이다. explain:true 옵션을 주면 토큰들의 위치 관계를 파악할 수 있는데, 특히 synonym_graph 토큰 필터가 적용된 analyzer 에서는 동의어가 포함된 토큰 관계를 이해하는데 유용하다. explain:true 에 포함된 필드 중 start_offset, end_offset, position, position_length 를 분석해 토큰들 간의 연결 관계를 파악하는 법을 확인보려한다. 이 블로그 글은 ES 공식 문서 초반 부분에 대한 자세한 설명이 될 것이다. In order to properly handle multi-word synonyms this token filter creates a gra..
[3] 인덱스 설계 23.11.6 [[대규모 음악 데이터 검색 기능을 위한 Elasticsearch 구성 및 속도 개선 방법]] 인덱스 설정 number_of_shards -한 번 지정하면 reindex 하지 않는 한 설정 바꾸기 어렵기 때문에 신중하게 설계해야 한다. 클러스터에 샤드 수가 너무 많으면 → 색인 성능이 감소한다. 인덱스 당 샤드 수를 너무 작게 하면 → 장애 상황 등에서 샤드 복구에 많은 시간이 소요되고 클러스터 안정성이 떨어진다. -기본값이 7 버전 미만은 5였는데 7부터 1로 변경됐다. number_of_replicas -인덱스 생성 후에도 동적으로 변경 가능하다 http://localhost:9200/_settings { "index" : { "number_of_replicas" : 0 } } 리플리카..
[2] 엘라스틱서치 기본 동작과 구조 23.11.3 코디네이터 노드 역할 클라 요청을 받아서 데이터 노드에 요청을 분배하고 클라에게 응답을 돌려준다. 루씬 flush 시스템의 페이지 캐시에 데이터를 쓴다. 이 때부터 세그먼트가 되며 검색가능한 상태가 된다. https://ddongwon.tistory.com/56 page cache 우리가 컴퓨터를 사용할 때, CPU는 사용을 적게 할수록 성능이 좋아진다.(발열관련 문제) 하지만, 메모리는 사용을 적게 하거나 빵빵하게 사용한다고 해서 컴퓨터 성능에 영향을 주지 않는다. 이런 특징을 이용해서 메인 메모리(램)의 남는 공간을 활용해 페이지 캐시(page cache)라는 메모리 공간을 마련해 놓는다. 이 공간은 파일 I/O의 성능을 향상시키기 위해 사용되는 것으로, 사용된 파일의 내용을 저장해 놓..
[11] 33~34 사례 연구: 비디오 판매 23.11.4 [33] 사례 연구: 비디오 판매 개인과 기업에게 판매한다. 개인은 구매자인 동시에 시청자이고, 스트리밍 혹은 영구 소지할 수 있다. 기업은 구매자와 시청자가 다르고, 스트리밍만 된다. 액터 기준으로 경계가 나뉨 -한 액터 기능이 변경되도 다른 액터에게 영향 없도록 -제작자, 관리자, 구매자, 시청자 -카탈로그 조회(View Catalog) 는 추상 클래스이다. 비슷한 기능이라서. 구매자, 시청자 단에서 각각 구현해줌. 컴포넌트 아키텍처 -검정 화살표: 상속관계 / 빈 화살표: 제어 흐름. 고수준을 향해 있다. -컨트롤러로 입력이 들어오면 interactions 에 의해 데이터가 만들어지고, 그 이후에 Presenters 가 결과 포맷 변경하고 Views 가 화면에 표시한다. -Catalo..
[10] 30~32 세부사항 23.10.29 [30] 데이터베이스는 세부사항이다 DB는 그저 매커니즘에 불과하며 디스크 표면과 RAM 사이에서 데이터를 이리저리 옮길 때 사용할 뿐이다. 실제로 비트를 담는 거대한 그릇이며, 데이터를 장기적으로 저장하는 공간에 지나지 않는다. 그러므로 세부사항인 DB 를 아키텍처 중심에 두어서는 안되며, 즉 테이블과 행이 객체 형태로 시스템 여기저기에서 돌아다니게 허용하면 안된다. ※ DB 가 널리 사용되는 이유 디스크에 있는 데이터를 접근하는 건 너무 느리기 때문에, 시간 지연을 완화하기 위해 색인, 캐시, 쿼리 계획 최적화 같은 것들이 필요해졌는데 그럴러면 원천 데이터가 있는 곳이 필요했다. 그래서 문서 기반의 파일 시스템, 내용 기반의 DB 시스템이 출현했다. 파일 시스템은 파일을 편리하게 저장..
[9] 27~29 서비스 기반 아키텍처 vs. 컴포넌트 기반 아키텍처 23.10.23 [27] ‘크고 작은 모든' 서비스들 서비스 기반 아키텍처 vs. 컴포넌트 기반 아키텍처 서비스 아키텍처의 통설 및 이의 통설 1) 서비스 사이의 결합이 철저하게 분리된다. 이의 제기) 결합 분리의 오류 어느 정도 일리는 있지만 서비스 단위로 다른 프로세서에서 실행되고, 다른 서비스 변수에 직접 접근할 수 없고, 인터페이스는 잘 정의되어있어야 한다. 꼭 그런 것만은 아니다 서비스들이 한 장비 내에 존재한다면 네트워크 상의 공유 자원 때문에 결합될 가능성이 여전히 존재한다. 서비스는 분리해도 DB 를 공유하면 DB 데이터가 변경됐을 때 관련된 모든 서비스들이 변경돼야 한다. 통설 2) 개발 및 배포 독립성을 지원한다. 이의 제기) 개발 및 배포 독립성의 오류 어느 정도 일리가 있지만 대규모..
[8] 24~26 경계 23.10.10 [24] 부분적 경계 완벽한 경계를 만들기엔 비용과 노력이 너무 많이 들므로(쌍방향 바운더리 인터페이스, input/output 데이터 구조, 컴포넌트 격리), 부분적 경계를 활용해 볼 수도 있다. 부분적 경계 구현 방법 3가지 1. 마지막 단계를 건너뛰기 마지막 단계: 다중 컴포넌트로 각각 배포하는 것 같음 독립적으로 컴파일하고 배포할 수 있는 컴포넌트 만드는 작업은 모두 수행한 후, 단일 컴포넌트에 그대로 모아만 둔다. 컴파일이랑 배포도 단일 컴포넌트로 한다. 그래도 완벽한 경계를 만들 때만큼의 코드량과 설계 비용은 많이 들지만, 버전 번호나 배포 관리 부담이 없는 차이가 있다. 사례) Fitnesse 만들 때 초기 전략으로 웹 컴포넌트를 분리했으나 한 번에 다운로드하는게 목적이기도 ..