전체 글 7

“같은 검색어인데 왜 결과가 다르지?” - 한글 검색 정규화 문제 해결기

🧐 문제의 시작: “왜 검색 결과가 다르지?” “힛탠다드”와 같은 검색어를 직접 입력했을 때는 문제가 없었어요. 하지만 "힛텐다드"와 같이 잘못된 검색어를 입력했을 때,검색 서비스에서 제공하는 검색어 제안 기능으로 "힛탠다드"가  검색이 되면  NR(검색 결과 없음)으로 표시되는 이슈가 발생했습니다. 분명 같은 키워드인데 왜 어떤 상황에서는 검색이 잘되고, 다른 상황에서는 검색 결과가 나오지 않을까요?     🔍 문제 추적 과정: 어디서부터 차이가 생겼을까? 첫 번째 단서: encodeURIComponent로 인한 문자열 길이 차이 발견 검색어가 제안되었을 때만 NR(검색 결과 없음)이 발생하는 것을 발견하고, 검색어  제안 과정에 문제가 있을 가능성을 의심했습니다.이때 프론트엔드 개발자분이 enco..

Backend 2024.11.13

Elasticsearch Enrich를 활용한 데이터 통합

Elasticsearch Enrich 프로세서란?  Elasticsearch Enrich 프로세서는 데이터에 추가적인 정보를 자동으로 결합해주는 기능입니다. 이 기능은 Elasticsearch 7.5 버전부터 제공되며, 특정 데이터를 사전에 정의된 정책(policy)에 따라 색인화 과정에서 다른 인덱스의 데이터와 결합할 수 있게 해줍니다.Enrich 프로세서를 사용하기 위해서는 Elasticsearch 클러스터 내에 인제스트(Ingest) 노드가 필요합니다. Ingest 노드는 Ingest Pipeline을 통해 문서가 처리될 때 필수적인 역할을 하며, 데이터를 통합하거나 변환하는 과정을 처리합니다.   Enrich Index의 특성Enrich Index는 Elasticsearch에 의해 내부적으로 관리..

Backend 2024.08.28

왜 Elasticsearch 검색이 실패할까? 인덱스 Close와 Alias의 관계

배경실무에서 Elasticsearch를 사용하면서 index_closed_exception 오류를 경험한 적이 있습니다.해당 에러는 ES에서 4XX대 응답을 내려주고 있지만 자칫하면 검색이 되지 않는 크리티컬한 상황이 될 수 있습니다.  위 다이어그램은 제게 이슈가 있었던 상황을 표현한 것입니다. 복수 개의 인덱스가 존재하고 공통 alias로 인덱스가 연결 되어있는 상태일 때alias 연관 인덱스를 close 하고 alias 검색 시 close 인덱스에도 접근을 시도 하게 되어 index_closed_exception 예외가 발생하며 검색 요청이 실패합니다. 해결 원인은 close된 인덱스가 여전히 alias에 의해 참조되고 있어서 발생한 에러 입니다.A closed index is blocked fo..

Backend 2024.07.04

GitHub Actions를 이용하여 GitOps의 YAML 파일 동적 업데이트

배경Jenkins & Spinnaker 기반의 CI/CD 환경에서 GitHub Action & Argo CD로 전환하게 되었습니다.Spinnaker에서는 배포 시 동적 파라미터를 제공하여 yaml 을 수정하는 기능이 있었으나, Argo CD는 이러한 기능을 지원하지 않는걸로 파악했습니다. 구현Argo CD가 GitOps 방식을 따르므로, 애플리케이션 배포 시 GitHub Actions를 활용하여 Deploy Repository의 yaml 파일을 워크플로우 디스패치 이벤트로부터 받은 파라미터로 동적으로 수정합니다. 이를 통해 최종 배포 단계에서 yaml 파일을 업데이트하여 파라미터를 주입합니다. (* yq 활용) 구현 샘플.Application Repository 설정# GitHub Workflownam..

Backend 2024.07.04

[Datadog] Anomaly Detection 리서치

Anomaly Detection메트릭의 과거 트렌드, 계절별 패턴을 비교 분석하여 메트릭이 정상적인 범위를 벗어 났는지 탐지하는 데이터독 기능그래서 언제 사용?https://docs.datadoghq.com/ko/monitors/guide/anomaly-monitor/모니터링 하고자 하는 Elasticsearch 클러스터의 검색 성능과 관련된 지표에서 규칙적인 패턴이 발견됨.이상 징후 모니터를 통해 기대 하는 것 (가설)Datadog의 Anomaly Monitor를 통해 검색 지표를 모니터링 하여 비정상적인 부하를 조기에 감지하여 알람을 받을 수 있다.이상 징후 알람으로 조기 조치가 가능 해진다면 시스템 다운타임을 방지하고, 사용자 경험을 개선하는 데 도움을 줄 수 있다.설정 방법Datadog - Mon..

Backend 2024.07.04

[Datadog] Detection Method 정리

데이터독에 전송된 메트릭은 사전에 정의한 임계값에 도달하면 알람을 받을 수 있다.Threshold Alert특정 메트릭이 설정된 임계값을 초과하거나 미달할 때 경고를 발생시키는 방법적합한 상황잘 알려진 성능 기준이나 목표가 있을 때 유용사용 케이스CPU 사용량 (`elasticsearch.node.cpu.utilization`)이 설정된 임계치 도달클러스터 상태 (`elasticsearch.cluster.health_status`)가 "yellow" 또는 "red"로 변경.단위 샤드 크기 50GB 초과ES JVM 힙 메모리 85% 이상 사용LB 응답시간 p95가 200ms 이상Change Alert메트릭 값의 변화율을 감지하고, 이 변화율이 설정한 임계치를 초과할 때 알림을 발생시킵니다.적합한 상황평소와..

Backend 2024.07.04

[Elasticsearch] maximum normal shards open - 클러스터 샤드 수 제한

상황아래 ES 에러 메시지가 발생하면서 신규 인덱스 생성 불가{"type":"illegal_argument_exception","reason":"Validation Failed: 1: this action would add [10] shards, but this cluster currently has [993]/[1000] maximum normal shards open;"}분석ES 공식문서에 따르면,클러스터의 샤드 수는 노드 수에 기반한 소프트 제한이 있으며, 이것은 클러스터를 불안정하게 할 수 있는 작업을 방지하기 위함입니다.클러스터 샤드 제한은 하드웨어 구성과 부하량에 따라 안정적인 샤드 수가 다릅니다.closed index는 위 max_shards_per_node 에 포함되지 않습니다.새 인덱스 ..

Backend 2024.07.04