API 명령어를 통한 Elasticsearch 인덱스 관리의 궁극적인 가이드

이 궁극적인 API 명령어 가이드를 통해 Elasticsearch 인덱스 관리를 마스터하세요. `PUT`을 사용하여 사용자 지정 매핑 및 설정으로 인덱스를 꼼꼼하게 생성하고, `GET`으로 포괄적으로 구성을 확인하며, `DELETE`를 사용하여 불필요한 인덱스를 안전하게 삭제하는 방법을 알아보세요. 이 글은 실용적인 예제, 모범 사례, 그리고 중요한 경고를 제공하여 Elasticsearch 내에서 데이터 수명 주기를 효과적으로 제어하고 최적의 성능과 리소스 관리를 할 수 있도록 지원합니다.

35 조회수

API 명령을 통한 Elasticsearch 인덱스 관리 완벽 가이드

Elasticsearch는 데이터를 인덱스로 구성하는 강력한 분산 검색 및 분석 엔진입니다. 인덱스는 본질적으로 문서가 저장되는 하나 이상의 물리적 샤드를 가리키는 논리적 네임스페이스입니다. 이러한 인덱스를 효과적으로 관리하는 것은 건강하고 성능이 뛰어나며 확장 가능한 Elasticsearch 클러스터를 유지하는 데 기본이 됩니다. 이 가이드는 인덱스 수명 주기 관리를 위한 필수 API 명령을 안내하여 자신 있게 인덱스를 생성, 검사 및 삭제할 수 있도록 도와줍니다.

효율적인 인덱스 관리는 여러 가지 이유로 중요합니다. 데이터를 저장하고 검색하는 방법을 정의할 수 있게 하고, 샤드 및 복제본과 같은 설정을 구성하여 성능을 최적화하며, 오래되었거나 불필요한 데이터를 제거하여 스토리지를 관리할 수 있게 합니다. 이러한 명령을 마스터하는 것은 모든 Elasticsearch 관리자 또는 개발자에게 초석이 되는 기술이며, 데이터 인프라가 강력하고 민첩하게 유지되도록 보장합니다.

Elasticsearch 인덱스 이해하기

API 명령을 자세히 살펴보기 전에 Elasticsearch 인덱스가 무엇인지 이해하는 것이 중요합니다. 간단히 말해, 인덱스는 관계형 데이터베이스 시스템의 데이터베이스와 같습니다. 이는 유사한 특성과 종종 공통된 목적을 가진 문서들의 모음입니다. 인덱스 내의 각 문서는 유형(최신 Elasticsearch 버전에서는 단일 인덱스가 일반적으로 _doc이라는 단일 유형을 나타냄)과 고유 ID를 가집니다. 인덱스는 하나 이상의 샤드로 구성되며, 샤드는 자체 포함된 저수준 Lucene 인덱스입니다. 이러한 샤드는 여러 노드에 분산되어 확장성과 장애 허용 범위를 제공합니다.

인덱스의 주요 구성 요소는 다음과 같습니다:
* 매핑(Mappings): 인덱스 내 문서의 스키마를 정의하며, 필드 이름, 데이터 유형(예: text, keyword, date, integer), 그리고 인덱싱 방식 등을 지정합니다.
* 설정(Settings): 기본 샤드 수, 복제본 샤드 수, 새로 고침 간격, 분석 설정 등 다양한 운영 측면을 구성합니다.
* 별칭(Aliases): 애플리케이션이 실제 인덱스 이름을 알 필요 없이 인덱스와 상호 작용할 수 있도록 유연성을 제공하는 가상 이름으로, 하나 이상의 인덱스를 가리킬 수 있습니다.

Elasticsearch 인덱스 생성하기

인덱스를 생성하는 것은 Elasticsearch에 데이터를 저장하는 첫 번째 단계입니다. 기본 설정으로 인덱스를 생성하거나, 더 일반적으로 데이터 및 검색 요구 사항에 맞게 사용자 지정 매핑 및 설정을 정의할 수 있습니다. 이 목적을 위해 PUT 메서드가 사용됩니다.

기본 인덱스 생성

기본 설정으로 인덱스를 생성하려면, 원하는 인덱스 이름으로 PUT 요청을 실행하기만 하면 됩니다.

PUT /my_first_index

성공적으로 생성되면 Elasticsearch는 확인 응답을 반환합니다:

{
  "acknowledged": true,
  "shards_acknowledged": true,
  "index": "my_first_index"
}

이 작업은 기본적으로 1개의 기본 샤드와 1개의 복제본 샤드를 가진 인덱스를 생성하며, 동적 매핑이 활성화됩니다(이는 문서가 인덱싱될 때 Elasticsearch가 필드 유형을 추론함을 의미합니다).

사용자 지정 매핑 및 설정으로 인덱스 생성하기

더 많은 제어를 위해 필드에 대한 명시적 매핑을 정의하고 샤드 및 복제본 수와 같은 인덱스 설정을 지정할 수 있습니다. 이는 검색 성능을 최적화하고 데이터 무결성을 보장하는 데 중요합니다.

예시: 사용자 지정 매핑 및 설정

제품 데이터에 대한 특정 필드 유형을 갖고 3개의 기본 샤드와 2개의 복제본 샤드로 구성된 products라는 인덱스를 생성해 보겠습니다.

PUT /products
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 2
  },
  "mappings": {
    "properties": {
      "product_id": {
        "type": "keyword"
      },
      "name": {
        "type": "text",
        "fields": {
          "raw": {
            "type": "keyword"
          }
        }
      },
      "description": {
        "type": "text"
      },
      "price": {
        "type": "float"
      },
      "stock": {
        "type": "integer"
      },
      "created_at": {
        "type": "date",
        "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd"
      },
      "available": {
        "type": "boolean"
      }
    }
  }
}
  • settings: 인덱스에 대한 클러스터 수준 구성을 정의합니다. 여기서는 number_of_shardsnumber_of_replicas를 설정합니다.
  • mappings: 스키마 정의를 포함합니다. 각 필드에 대한 properties를 정의합니다:
    • product_id: 정확한 일치 검색을 위한 keyword 유형.
    • name: 전문 검색을 위한 text이며, 정확한 정렬 또는 집계(aggregation)를 위한 추가적인 keyword 하위 필드(name.raw)를 가집니다.
    • description: 전문 검색을 위한 text.
    • price: 수치 연산을 위한 float.
    • stock: 수치 연산을 위한 integer.
    • created_at: 정확한 구문을 보장하기 위해 지정된 형식을 가진 date.
    • available: 참/거짓 값을 위한 boolean.

팁: 매핑을 신중하게 계획하십시오. 인덱스가 생성 및 채워진 후에는 기존 필드의 데이터 유형을 변경하는 것이 데이터를 다시 인덱싱하지 않고는 직접적으로 불가능합니다. 데이터 유형 및 분석 요구 사항에 대해 미리 계획하십시오.

인덱스 세부 정보 및 설정 보기

인덱스를 생성한 후에는 설정을 확인하고, 매핑을 검증하거나, 문제를 해결하기 위해 구성을 검사해야 하는 경우가 많습니다. GET 명령은 인덱스에 대한 포괄적인 정보를 검색하는 주요 도구입니다.

모든 인덱스 정보 검색

특정 인덱스에 대한 모든 설정, 매핑, 별칭 및 기타 메타데이터를 얻으려면 인덱스 이름과 함께 GET 명령을 사용합니다.

GET /products

그러면 다음을 포함하여 상세한 정보가 포함된 큰 JSON 객체가 반환됩니다:

{
  "products": {
    "aliases": {},
    "mappings": {
      "properties": {
        "available": {
          "type": "boolean"
        },
        "created_at": {
          "type": "date",
          "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd"
        },
        "description": {
          "type": "text"
        },
        "name": {
          "type": "text",
          "fields": {
            "raw": {
              "type": "keyword"
            }
          }
        },
        "price": {
          "type": "float"
        },
        "product_id": {
          "type": "keyword"
        },
        "stock": {
          "type": "integer"
        }
      }
    },
    "settings": {
      "index": {
        "routing": {
          "allocation": {
            "include": {
              "_tier_preference": "data_content"
            }
          }
        },
        "number_of_shards": "3",
        "provided_name": "products",
        "creation_date": "1701234567890",
        "number_of_replicas": "2",
        "uuid": "some_uuid",
        "version": {
          "created": "7170099"
        }
      }
    }
  }
}

특정 인덱스 정보 검색

URL 끝에 추가하여 인덱스 구성의 특정 부분만 검색할 수 있습니다.

  • 매핑만 가져오기:
    bash GET /products/_mapping

  • 설정만 가져오기:
    bash GET /products/_settings

  • 별칭만 가져오기:
    bash GET /products/_alias

이러한 집중적인 검색은 인덱스의 특정 측면만 관심 있을 때 유용하며, 출력을 더 관리하기 쉽게 만듭니다.

여러 인덱스 보기

쉼표로 이름을 구분하거나 와일드카드를 사용하여 여러 인덱스에 대한 정보를 검색할 수도 있습니다.

  • 특정 여러 인덱스:
    bash GET /products,my_first_index/_settings

  • 'p'로 시작하는 모든 인덱스:
    bash GET /p*/_mapping

  • 모든 인덱스(운영 환경에서는 주의해서 사용):
    bash GET /_all # 또는 GET /*

참고: GET /_all 또는 GET /*을 사용할 때는 클러스터에 인덱스가 많을 경우 매우 큰 응답이 올 수 있으므로 준비하십시오. 특히 운영 환경에서는 이를 신중하게 사용하십시오.

Elasticsearch 인덱스 삭제하기

인덱스를 삭제하는 것은 영구적인 작업으로, 이와 관련된 모든 문서와 메타데이터가 제거됩니다. 이는 일반적으로 디스크 공간 확보, 오래된 데이터 제거 또는 테스트 인덱스 정리를 위해 수행됩니다. 이 중요한 작업을 위해 DELETE 메서드가 사용됩니다.

단일 인덱스 삭제

단일 인덱스를 삭제하려면 인덱스 이름 뒤에 DELETE 명령을 사용합니다.

DELETE /my_first_index

성공적인 삭제는 다음을 반환합니다:

{
  "acknowledged": true
}

경고: 이 작업은 되돌릴 수 없습니다. 인덱스가 삭제되면 스냅샷이나 백업이 없는 한 해당 데이터는 영원히 사라집니다. 특히 운영 환경에서는 DELETE 명령을 실행하기 전에 항상 인덱스 이름을 다시 확인하십시오.

여러 인덱스 삭제

GET과 유사하게, 쉼표로 구분된 목록에 지정하거나 와일드카드를 사용하여 여러 인덱스를 삭제할 수 있습니다.

  • 특정 여러 인덱스 삭제:
    bash DELETE /my_old_index_1,my_old_index_2

  • 패턴과 일치하는 모든 인덱스 삭제:
    bash DELETE /logstash-2023-*
    이 명령은 이름이 logstash-2023-으로 시작하는 모든 인덱스를 삭제합니다.

  • 모든 인덱스 삭제(극도의 주의 필요!):
    bash DELETE /_all # 또는 DELETE /*

    위험! _all 또는 *을 삭제하면 클러스터의 모든 인덱스가 제거됩니다. 이는 극도로 파괴적인 작업이며, 전체 클러스터를 삭제하려는 명시적인 의도가 있고 강력한 복구 계획이 있는 경우가 아니라면 운영 환경에서 절대로 수행해서는 안 됩니다. 많은 운영 클러스터는 의도치 않은 데이터 손실을 방지하기 위해 이 기능을 비활성화합니다.

삭제 모범 사례

  • 항상 확인: 삭제하기 전에 삭제하려는 인덱스(또는 와일드카드를 통한 인덱스)를 검사하기 위해 GET을 사용합니다. 이를 통해 올바른 데이터를 대상으로 하고 있는지 확인합니다.
    bash GET /logstash-2023-*
    출력을 검토하고 예상과 일치하면 DELETE를 진행합니다.
  • 권한: DELETE 명령을 실행하는 사용자 또는 역할에 필요한 권한이 있는지 확인합니다. 운영 환경에서는 DELETE 권한을 승인된 담당자에게만 제한해야 합니다.
  • 스냅샷: 특히 데이터가 중요한 경우, 대규모 삭제를 수행하기 전에는 항상 클러스터의 스냅샷을 찍어 두십시오.

비교 및 수명 주기 관리

이 세 가지 명령(PUT 생성, GET 검사, DELETE 제거)은 수동 인덱스 수명 주기 관리의 중추를 형성합니다. 이들은 다른 단계에서 사용됩니다:

  • 생성 (PUT): 인덱스 수명 시작 시 구조 및 초기 구성을 정의합니다.
  • 검사 (GET): 인덱스의 활성 수명 전반에 걸쳐 모니터링, 문제 해결 및 검증을 위해 사용됩니다.
  • 삭제 (DELETE): 인덱스 수명 종료 시 리소스를 회수하고 데이터 보존 정책을 관리하기 위해 사용됩니다.

이러한 명령은 임시 또는 프로그래밍 방식 관리에 훌륭하지만, Elasticsearch는 자동화된 인덱스 수명 주기 관리(ILM)를 위한 강력한 기능도 제공합니다. ILM 정책을 사용하면 나이, 크기 또는 기타 기준에 따라 인덱스를 단계(핫, 웜, 콜드, 삭제)로 자동 전환하는 규칙을 정의할 수 있으며, 여기에는 축소(shrinking), 강제 병합(force merging) 및 궁극적으로 삭제와 같은 작업이 포함됩니다. 대규모 또는 장기적인 데이터 보존의 경우, DELETE 단계를 자동화하기 위해 ILM이 권장되는 접근 방식입니다.

결론

API 명령을 통해 Elasticsearch 인덱스를 관리하는 것은 플랫폼에서 작업하는 모든 사람에게 필수적인 기술입니다. PUT을 사용하여 정확한 매핑 및 설정으로 인덱스를 생성하고, GET을 사용하여 구성을 철저히 검사하며, DELETE를 사용하여 안전하게 제거하는 방법을 배웠습니다. 이러한 명령을 이해하고 올바르게 적용함으로써 데이터 저장에 대한 세분화된 제어 권한을 얻고 Elasticsearch 클러스터가 효율적이고 잘 구성되어 있으며 성능을 유지하도록 보장할 수 있습니다.

매핑에 대한 신중한 계획, 삭제 전의 철저한 확인, 그리고 고급 자동화된 수명 주기 관리를 위해 ILM과 같은 Elasticsearch의 내장 기능을 활용하는 것의 중요성을 항상 기억하십시오. 이러한 도구와 모범 사례를 통해 Elasticsearch 인덱스 관리를 마스터할 수 있는 충분한 준비를 갖추게 됩니다. 추가적인 탐색을 위해 고급 매핑 옵션, 인덱스 템플릿 및 Elasticsearch의 인덱스 수명 주기 관리 정책의 전체 기능을 자세히 살펴보십시오.