본문 바로가기

전체 글

(99)
7장 레디스 데이터 백업 방법 레디스에서 데이터 영구 저장하기레디스는 메모리에서 관리되기 때문에 인스턴스가 재시작되면 모두 날라갈 가능성이 있으니 백업 정책은 중요하다.복제 정책도 있으나 서로 목적이 다르고(복제는 가용성, 백업은 데이터 복구), 의도치 않게 데이터 삭제 커맨드가 실행되면 복제 정책으로도 복구할 수 없다.백업하는 방법 2가지: RDB, AOFAOF(Append Only File): 메모리 변경있는 모든 쓰기 작업을 차례대로 기록, 복원할 때 커맨드 실행해가며 데이터 재구성RDB(Redis Data Base): 스냅샷 방식. 일정 시점에 메모리에 저장된 데이터 전체 저장실제로 RDB는 바이너리 형태로, AOF는 RESP(레디스 프로토콜)형태로 저장된다.장단점RDB: AOF보다 복원이 빠르나 특정 시점으로 복구는 불가능A..
6장 레디스를 메시지 브로커로 사용하기 1.pub/sub(publish, subscribe), 2.메시징 큐(list), 3.이벤트 스트림(stream)메시지 브로커메시지 브로커가 필요한 이유최근 서비스 아키텍쳐(MSA)에선 각 애플리케이션 간 느슨하면서 탄탄한 상호 작용이 필요하기 때문핵심 역할모듈 간 통신에서 커넥션 실패 같은 장애가 바로 전파되지 않게 비동기 통신으로 하는게 권장된다. 메시지 브로커를 사용하면 서비스 간 통신이 불가능하더라도 바로 장애로 이어지지 않게, 당장 메시지 처리하지 못해도 메시지를 쌓아두어 나중에 처리할 수 있는 채널을 만들어둔다.크게 두 형태: 메시징 큐, 이벤트 스트림 메시징큐와 이벤트 스트림메시징 큐생산자-소비자이벤트 스트림발행자-구독자방향성 관점메시징 큐: 생산자는 소비자의 큐로 직접 push 한다. 같은..
5장 레디스를 캐시로 사용하기 캐시원본 데이터 저장소보다 더 빠르고 효율적으로 접근할 수 있는 임시 데이터 저장소목표: 응답속도 줄이기부가 효과: 원본 저장소 리소스 줄일 수 있고 원본 저장소가 장애난 상황에서 캐시에서 가져오기 때문에 장애 영향 줄일 수 있다. 캐시 적용하면 좋은 경우원본 저장소에서 매번 계산을 해서 가져온다거나 읽기 시간이 오래걸리는 경우캐시에서 가져오는 속도가 더 빠른 경우캐시에 저장된 데이터가 잘 변하지 않는 경우자주 검색되는 데이터일 경우 캐시로서 레디스 쓰면 좋은 점키-값 또는 다양한 자료구조 지원으로 저장/반환할 때 변환 과정없어도 돼서 간단하다.메모리 위에 존재해서 굉장히 빠르다.센티널, 클러스터 사용하면 자동으로 장애 감지해 페일오버돼서 고가용성이다.클러스터 사용하면 스케일아웃도 쉽다. 캐싱 전략: 레..
4장 레디스 자료 구조 활용 사례 실시간 리더보드 - sorted set실시간 리더보드에 sorted set이 좋은 이유실시간으로 정렬돼야하는데 sorted set은 저장할때부터 정렬되므로 조회가 빠름 ZADD, ZREVRANGE, ZINCRBY, ZUNIONSTORE127.0.0.1:6379> ZADD score:250116 100 player:1 (integer) 1127.0.0.1:6379> ZADD score:250116 500 player:2(integer) 1127.0.0.1:6379> ZADD score:250116 700 player:3(integer) 1127.0.0.1:6379> ZREVRANGE score:250116 0 2 withscores1) "player:3"2) "700"3) "player:2"4) "500"..
3장 레디스 기본 개념 redis-cli -h 127.0.0.1 -p 6379string, list, set, hash, sorted set, 비트맵, hyperloglog, geospatial, streamstring한 키에 최대 512MB 저장 가능이진 데이터, JPEG 이미지 같은 바이트 값 HTTP 응답값 다양하게 저장 가능키 하나에 값도 하나 저장되는 유일한 자료 구조SET, GET127.0.0.1:6379> set hello world // 키 값OK127.0.0.1:6379> get hello"world"127.0.0.1:6379> set hello newval NX(nil)127.0.0.1:6379> get hello"world"127.0.0.1:6379> set hello newval XXOK127.0.0.1:..
2장 레디스 시작하기 도커로 띄움서버 환경 설정 변경file descriptor 수는 레디스 maxClients + 32 로소켓도 파일이다: 리눅스는 클라이언트가 접속할 때마다 '소켓'을 생성하는데, 이를 파일(File Descriptor)로 취급합니다.레디스 내부에서 쓰는 파일 디스크립터 수는 32다.만약 nofiles 값이 1024(기본값인 경우가 많음)라면, 클라이언트가 1,000명만 접속해도 레디스는 더 이상 요청을 받을 수 없다.ulimit -a 로 open files 혹은 nofiles 로 파일 디스크립터 값 확인 THP(Transparent Huge Page) 기능 끄기리눅스는 메모리를 페이지 단위(4KB)로 관리하는데, 메모리 크기 클수록 페이지 관리 테이블 크기(TLB)가 커짐테이블 크기가 크면 오버헤드 이슈..
1장 마이크로서비스 아키텍처와 레디스 소프트웨어 아키텍처의 변화(모놀리틱 → MSA)로 인해 데이터 저장소의 요구사항(RDB -> NOSQL)이 바뀌었다모놀리틱 아키텍처전체 애플리케이션을 하나의 단위로 배포, 관리장점: 구조 단순, 소규모에 적합단점:한 곳의 장애가 전체 장애로 퍼질 수 있다프레임워크가 통일이라 새로운 기술 적용이 쉽지 않다배포 시간이 오래 걸린다데이터 저장소 : RDB가 많이 쓰였다.모든 데이터를 한 곳에서 관리하므로 관계형이 표준이었다.마이크로서비스 아키텍처특정 단위로 모듈을 쪼개서 관리장점: 배포가 상대적으로 간단해 요구사항 빨리 처리 가능, 신기술 적용 특정 부분만 해볼 수 있음단점: 관리포인트가 많아져 소규모에서는 어려움데이터 저장소: NoSQL각 모듈에 필요한 데이터를 독립적으로 저장하는게 편리구조화되지 않은 비정..
테스트 클래스 다른 모듈에서 공유하기 배경멀티 모듈로 구성되어 있다: s3 접근하는 data-s3 모듈, 스프링 배치 batch 모듈batch 모듈에서 s3 접근이 필요한 로직들은 data-s3 모듈에 들어있다.하고싶은 것data-s3 모듈에서 테스트용 빈을 구현해 batch모듈에서도 쓰고 싶다.S3Mock을 사용한 테스트용 S3Client지금까지는batch 모듈에서 직접 구현함batch 모듈에서 S3Mock 디펜던시 주입 (io.findify:s3mock_2.12)batch 모듈에서 S3MockConfig 빈 생성→ S3MockConfig 는 s3와 관련된 클래스이니 data-s3 모듈에서 생성하고, batch 모듈에 공유하여 사용하고 싶은 것첫 번째 방법 - testFixtures 플러그인 사용(장점) batch 모듈에서 testImpl..
최신 정보검색론 1장부터 11장까지 책 내용을 정리한 PPT입니다https://docs.google.com/presentation/d/1IwnPWQdgyo3Gsbh_TF0QqTbA-pmFS4lDbFvXsLbYMuQ/edit?slide=id.g36768965a52_0_125&pli=1#slide=id.g36768965a52_0_125 [스터디] 최신 정보검색론최신 정보검색론 1장 소개 2025.6.16docs.google.com Chapter 1 소개Chapter 2 검색 사용자 인터페이스Chapter 3 모델링Chapter 4 검색평가Chapter 5 연관 피드백과 질의확장Chapter 6 문서: 언어 및 특성Chapter 7 질의: 언어 및 특성Chapter 8 텍스트 분류Chapter 9 색인과 검색Chapter 1..
opencode 튜토리얼 - LLM모델을 CLI에서 사용하기 opencode 는 여러 LLM을 CLI 환경에서 사용할 수 있는 AI Coding Agent이다.opencode 사용법, agent 생성하는 법에 대해 알아보기로 한다.opencode 특징TUI 기반이다 (설정같은 건 CLI로 하긴 함)여러 LLM 들을 한 곳에서 사용할 수 있다agent를 지원하지 않는 LLM(ex. github copilot)도 agent를 사용할 수 있다 (생성은 안되더라)독스 학습이 쉽다opencode툴 자체는 무료지만 사용하려는 LLM에 대해서는 API key를 이용하든 구독을 하든 돈을 내야한다. ※참고) 용어-화면 매핑CLI터미널 창TUIopencode 커맨드 입력한 후opencode 설치독스brew install opencode(맥북)opencode help 커맨드를 통해..
Jenkins Helm Charts 파보기 목적젠킨스를 쿠버네티스로 띄운다.helm repository에 젠킨스를 한 번에 띄울 수 있는 chart(패키지)가 있기에 어떤 내용으로 jenkins가 구성되어 있는지 알아보기로 한다.차트 다운 받기레포 세팅helm repo add jenkins https://charts.jenkins.iohelm repo update 레포 확인helm search repo jenkinsNAME CHART VERSION APP VERSION DESCRIPTION jenkins/jenkins 5.8.90 2.516.3 Jenkins - Build great things at any scale!… 차트 다운helm pull jenkins/jenkins --version 5.8.90 --destination /Users/e..
[Webflux] nested flatMap 지옥 해결하기 상황아래 로직을 구현한 코드가 flatMap 안에 flatMap 이 포함되어 있다. 코드 라인이 길고 들여쓰기가 많아서 가독성이 그리 좋지 않아 보인다.1번 작업 실행1번 작업 결과가 0이면 에러 던지기1번 작업 결과 후처리 (prefix 변수에 저장)1번 결과 받아서 2번 작업 실행2번 작업 결과가 0이면 에러 던지기2번 결과 받아서 3번 작업 실행1번 작업 결과 + 2번 작업 결과 + 3번 작업 결과 더해서 반환※ 각 작업은 1초 잠든 후 숫자를 반환한다.public Mono nestedFlatMap() { AtomicReference prefix = new AtomicReference("Prefix"); return _1번_작업() .flatMap(fir..
코사인 유사도 증명하기 문서 간의 유사도, 즉 벡터 간의 유사도를 구하기 위해 코사인 유사도를 많이 사용한다.코사인 유사도가 어떻게 이 수식이 나오게 되었는지 수학적으로 증명해보도록 한다.필자는 고등학교 이후로 거의 수학을 다시 볼 일이 없었기 때문에 왜 이런 공식이 이런 형태로 되어있는지 궁금하여 정리한 글이다.코사인 유사도두 개의 문서를 v, u 라는 벡터로 임베딩했을 때, 두 벡터의 코사인 값은 다음과 같다.$$cosθ = \frac{v⋅u}{∥v∥∥u∥}$$유사도 비교하기벡터 v 를 기준으로 v 와 u 가 비슷한지, v 와 w 가 비슷한지 cosθ 으로 판단해보자.고등학교 때 $cosθ = \frac{x}{r}$ 임을 배웠다.두 벡터는 비슷할수록 θ 가 작아진다. (점점 가까워지므로)θ 가 작을수록 cosθ는 점점 커진..
[Elasticsearch] action.auto_create_index 를 설정하자 색인 시 인덱스 자동 생성을 방지해줄 수 있는 action.auto_create_index 설정을 해보자최종 elasticsearch.ymldiscovery.type: single-nodebootstrap.memory_lock: trueaction.auto_create_index: ".watches,.triggered_watches,.watcher-history-*"xpack.ml.enabled: falsenetwork.host: 0.0.0.0 ES 7.1.11. elasticsearch.yml 에 action.auto_create_index=false 설정항상 컨네이너 삭제 후 재시작함(에러) 컨테이너 뜰 때 Caused by: java.lang.IllegalArgumentException: the [..
[5/5] Node-exporter → Consul → Promethus → Grafana 연동하기 이전 글에서 prometheus 까지 데이터 수집을 완료하였다. [4/5] Node-exporter → Consul → Promethus → Grafana 연동하기이전 글에서 prometheus 을 구축하였다. [2/5] Node-exporter → Consul → Promethus → Grafana 연동하기이전 글에서 node-exporter 를 구축하였다.이제 consul 을 구축해보자② Consul파이프라인을 구성할 때 consul 이elsboo.tistory.com이제 grafana 를 구축해보자⑤ Grafanadocker-compose.ymlversion: '3'services: grafana: image: grafana/grafana container_name: grafana ..
[4/5] Node-exporter → Consul → Promethus → Grafana 연동하기 이전 글에서 prometheus 을 구축하였다. [2/5] Node-exporter → Consul → Promethus → Grafana 연동하기이전 글에서 node-exporter 를 구축하였다.이제 consul 을 구축해보자② Consul파이프라인을 구성할 때 consul 이 반드시 필요하지는 않다. 결국 prometheus 에서만 exporter 를 알면 되기 때문이다. 하지만 consuelsboo.tistory.com이제 consul 에 node-exporter 를 등록하면 prometheus 까지 잘 수집되는지 확인해보자④ node-exporter 등록node-exporter 용 json 설정파일을 생성 후 consul 의 register API를 호출하면 된다.curl --request PU..
[3/5] Node-exporter → Consul → Promethus → Grafana 연동하기 이전 글에서 consul 을 구축하였다. [2/5] Node-exporter → Consul → Promethus → Grafana 연동하기이전 글에서 node-exporter 를 구축하였다.이제 consul 을 구축해보자② Consul파이프라인을 구성할 때 consul 이 반드시 필요하지는 않다. 결국 prometheus 에서만 exporter 를 알면 되기 때문이다. 하지만 consuelsboo.tistory.com 이제 prometheus 를 구축해보자③ Prometheusprometheus 는 exporter 들을 한데로 모으는 깔때기 같은 역할이다. node-exporter 를 consul 을 통해 prometheus 에 등록할 수 있게 해보겠다.docker-compose.ymlversion: ..
[2/5] Node-exporter → Consul → Promethus → Grafana 연동하기 이전 글에서 node-exporter 를 구축하였다. [1/5] Node-exporter → Consul → Promethus → Grafana 연동하기최종 결과: 시스템 정보를 그라파나 대시보드로 확인할 수 있다각종 데이터를 그라파나를 통해 대시보드로 편리하게 확인할 수 있다. cpu 사용량, 메모리 사용량 같은 시스템 정보를 그라파나로elsboo.tistory.com이제 consul 을 구축해보자② Consul파이프라인을 구성할 때 consul 이 반드시 필요하지는 않다. 결국 prometheus 에서만 exporter 를 알면 되기 때문이다. 하지만 consul 이 가지고 있는 큰 장점이 있다. 바로 서비스 디스커버리이다.서비스 디스커버리는 node-exporter 같은 서비스를 API 한 번 호출..
[1/5] Node-exporter → Consul → Promethus → Grafana 연동하기 최종 결과: 시스템 정보를 그라파나 대시보드로 확인할 수 있다각종 데이터를 그라파나를 통해 대시보드로 편리하게 확인할 수 있다. cpu 사용량, 메모리 사용량 같은 시스템 정보를 그라파나로 볼 수 있는 모니터링 파이프라인을 도커를 사용해 구축해보겠다.① Node-exporter각종 데이터를 모아주는 수집기를 exporter 혹은 agent라고 부른다. exporter의 종류는 mysql, elasticsearch 등 다양하게 수집할 수 있다. 나는 그 중에서 하드웨어와 OS 메트릭 등을 확인할 수 있는 node-exporter를 사용할 것이다.docker-compose.yml 구성은 공식 깃을 참고하였다.version: '3'services: node_exporter: image: quay.io/..
검색 "이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
[아호코라식 (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", "_id": ..
로그에 클래스, 메소드명 자동 출력하기 언어: 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 어쩌고 하는데 잘 모르겠다.. 메트릭비트 + 키바나 조합 사용하면 키바나에 자동으로 모니터링 대시보드가 생성되는 것 같다. 키바나 얼럿이나 웹훅은 유료 버전이다. 메트릭비트 + 그라파나 -얼럿이나 웹훅 무료로 사용 가능 -지표는 메트..
[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..