본문 바로가기

분류 전체보기

(80)
검색 "이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
[아호코라식 (Aho-corasick) 알고리즘] 논문 이해하기 (3) - 성능 측정 이전 글에서는 아호코라식 알고리즘의 구조에 대해서 알아보았다.이번 글에서는 아호코라식과 엘라스틱서치(ES) 로 검색을 했을 때 성능 측정을 간단하게 해볼 것이다.결론색인 키워드: 5543 개검색 요청: 1000 개 아호코라식ES메모리 사용량5 mb2 mb색인 시간42 ms286 ms검색 시간7 ms2051 ms아호코라식이 압도적으로 빠르다. (색인시간은 약 6.8배, 검색시간은 약 293배 빠름)메모리 사용량은 아호코라식이 더 잡아먹는다. (ES 보다 2.5배)아호코라식은 색인시간이 검색시간보다 더 오래걸린다. (42 ms > 7 ms)ES는 검색시간이 색인시간보다 더 오래걸린다. (2051 ms > 286 ms)※ 검색 결과는 고려하지 않았다.자세한 이야기[색인 키워드] 한글로 이루어진 단어 5543 ..
[ElasticSearch] update_by_query version_conflict_engine_exception & update 쿼리 비교 문제운영 중인 인덱스 문서를 update_by_query 로 실시간으로 업데이트하는 배치를 만들었다. 운영 환경에서 첫 테스트를 하는데 몇 초 지나더니 version_conflict_engine_exception 에러가 간헐적으로 발생하기 시작했다.해결update_by_query 를 bulk update 로 바꿨다.[기존]POST my_index/_update_by_query{ "query": {"term": {"_id": {"value": "1"}}}, "script": { "source": "ctx._source.updated_by_query = true", "lang": "painless" }} [변경후]POST _bulk{"update": {"_index": "my_index",..
로그에 클래스, 메소드명 자동 출력하기 언어: JAVALogging Framework: logback팀 컨벤션 혹은 원활할 디버깅을 위해 로그에 클래스명과 메소드명을 출력하는 경우가 있다.가장 쉬운 방법은 로그에 하드코딩으로 집어넣는 방법일 것이다.log.info("[Class][Method] Message occurred.")하지만 클래스, 메소드명이 바뀔 때마다 수동으로 챙겨줘야하는 불편함이 있다.그래서 클래스, 메소드명을 자동으로 출력할 수 있는 2가지 방법을 소개한다.log.info("method called");2024-06-22 18:07:53.409 INFO 7905 --- [ main] d.h.s.methodlog.MethodLogService : [MethodLogService][log] method called① 애노테이션으..
[정리] 그림으로 배우는 리눅스 구조 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.추천한다! 그림도 많아서 리눅스의 전체적인 흐름을 이해하는데 어렵지 않았다.-리눅스는 커널이라는 핵심 프로그램과 그 외로 나뉜다.커널이 하는 일접근제어, 명령 순서 제어, 자원 배분, 공유프로세스가 저장 장치에 직접 접근하면 명령 순서 같은 게 깨질 수 있음. 그래서 커널을 통해 간접 접근 하도록 한다.프로세스 스케줄링메모리 관리장치 접근cpu 모드 2가지커널 모드: 명령을 실행하는 데 아무 제약이 없다사용자 모드: 명령 실행에 제약이 걸린다.시스템 콜시스템콜을 호출하면 사용자 모드에서 커널 모드로 변경이 돼 호출 처리가 된다.OS 라이브러리OS 가 미리 공통된 기능을 묶어 라이브러리를 제공한다.표준 C 라이브러리 (l..
[아호코라식 (Aho-corasick) 알고리즘] 논문 이해하기 (2) - 데이터 구축 이전 글에서는 아호코라식 알고리즘의 검색 과정에 대해서 알아보았다. [아호코라식 (Aho-corasick) 알고리즘] 논문 이해하기 (1) - 검색 과정 아호코라식 알고리즘은 문자열을 검색하는 알고리즘이다. 검색할 단어가 10개 일 때 검색 대상 문자열도 일일이 10번 탐색하는 게 아니라 찾을 검색어가 아무리 많아도 한 번만 탐색하여 결과를 elsboo.tistory.com 이번 글에서는 아호코라식이 구성하는 세 개 함수 goto(), output() , failure() 의 데이터를 구축하는 법에 대해 알아보자 함수 데이터는 어떻게 만들까? goto() 검색 대상 단어들 [he, she, his, hers] 을 Trie 자료구조로 표현하는 게 목표이다. 문자 하나를 간선(-), 문자의 state 를 정..
[아호코라식 (Aho-corasick) 알고리즘] 논문 이해하기 (1) - 검색 과정 아호코라식 알고리즘은 문자열을 검색하는 알고리즘이다. 검색할 단어가 10개 일 때 검색 대상 문자열도 일일이 10번 탐색하는 게 아니라 찾을 검색어가 아무리 많아도 한 번만 탐색하여 결과를 얻을 수 있다. 시간복잡도가 O(n + m + z) 로 제곱이나 log 가 붙는게 아닌 선형적으로 증가하므로 속도가 빠른 검색 알고리즘에 속한다. n : 텍스트의 길이 m : 모든 패턴의 총 길이 z : 텍스트 내에서 발견된 패턴의 총 출현 횟수 ※ 용어 정리 - 텍스트, 패턴 필자는 논문이나 구글링을 할 때 많이 출현하는 용어 텍스트와 패턴의 의미가 헷갈렸었다. 💡 텍스트 → 검색 대상 문자열 or 단어들 패턴 → 검색어 로 이해하면 쉽다. 예를 들면 텍스트와 패턴이 아래와 같을 때, 💡 텍스트: [사과, 오렌지, ..
[9] 커스텀 플러그인을 이용한 ES 커스터마이징과 실전 운영 (끝) 플러그인을 elasticsearch-plugin install 로 설치하면 플러그인.zip 파일을 풀어 plugins/[플러그인명] 디렉토리에 생성한다. 플러그인 최소 3요소 본체 jar 파일 plugin-descriptor.properties elasticsearch.version : 마이너까지 일치해야 한다. plugin-security.policy : 플러그인이 요구하는 추가적인 권한 (이외 다른 파일은 메인 플러그인과 의존 관계 파일이다) 플러그인 개발 시 유의 사항 버전에 종속적이라 버전 올리면 호환되게 맞춰야 한다. 플러그인 문서는 적은 편이라 ES 코드 읽으면서 개발해야 한다. 라이선스 유의해햐 한다. X-pack 유료 플러그인 코드를 복붙해서 쓰면 위반이다 플러그인 제작 아래처럼 동작하는 ..
[8] 엘라스틱서치의 내부 동작 상세 알아두면 검색 성능은 높여야 하는데 당장 확장할 리소스가 없을 때 써먹을 수 있다. 데이터 분산 처리 과정 쓰기 요청이 들어왔을 때 동작과 동시성 제어 쓰기 전체 흐름 조정 단계(coordination stage) → 프라이머리 샤드 단계(primary stage) → 복제 단계(replica stage) 쓰기 요청이 들어오면 라우팅을 통해 인덱스의 몇 번 샤드로 작업을 보낼 지 정하고 (조정 단계), 노드가 프라이머리 샤드한테 작업을 넘겨주고 (프라이머리 샤드 단계), 프라이머리 샤드는 요청이 문제가 없는 지 검증하고 로컬에 요청한 쓰기 작업 수행하고 작업 완료되면 레플리카 (in-sync 복제본) 샤드에 병렬로 요청을 넘긴다 복제받을 레플리카 샤드 목록은 마스터 노드에서 관리하고 있고 in-sync ..
[7] 운영 도중 발생하는 장애 대응 장애 탐지를 위한 지표 수집 및 모니터링 지표 수집 메트릭비트: 여러 서비스의 메트릭 데이터를 주기적으로 수집해 ES, logstash, kafka 등으로 넘김) 각 노드마다 메트릭비트 있는 것보다 한 클러스터에 한 메트릭비트로 수집하는것을 공식문서에서는 추천한다. ※ 메트릭비트 설치는 책 참고 모니터링용 클러스터 구축 모니터링용 ES 와 키바나를 별도로 구성한다. 메트릭비트 + 키바나 그 다음에 보안 적용을 위해 elasticsearch-xpack, kibana-xpack 어쩌고 하는데 잘 모르겠다.. 메트릭비트 + 키바나 조합 사용하면 키바나에 자동으로 모니터링 대시보드가 생성되는 것 같다. 키바나 얼럿이나 웹훅은 유료 버전이다. 메트릭비트 + 그라파나 -얼럿이나 웹훅 무료로 사용 가능 -지표는 메트..