본문 바로가기

분류 전체보기

(77)
로그에 클래스, 메소드명 자동 출력하기 언어: 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 라이브러리 (libc)ISO(국제 표준화 기구)에서 정한 표준 라이브러리가 있다.리눅스는 GNU 프로..
[아호코라식 (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 어쩌고 하는데 잘 모르겠다.. 메트릭비트 + 키바나 조합 사용하면 키바나에 자동으로 모니터링 대시보드가 생성되는 것 같다. 키바나 얼럿이나 웹훅은 유료 버전이다. 메트릭비트 + 그라파나 -얼럿이나 웹훅 무료로 사용 가능 -지표는 메트..
[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..