동적 매핑(dynamic mapping)

2026/01/28 elasticsearch 전체 1327 단어,약 4 분

매핑(mapping)

  • mapping은 데이터 저장 구조를 정의하는 파일을 말합니다.
  • RDB 스키마와 비슷합니다.

동적매핑(dynamic mapping)

엘라스틱서치에서는 dynamic mapping 기능을 이용할 수 있습니다. 문서를 인덱싱(저장)하기 위해 미리 인덱스를 만들거나, 매핑 타입을 정의하거나, 필드들을 설정할 필요가 없습니다. 그냥 바로 문서를 인덱싱하면 인덱스, 타입, 필드들이 자동으로 나타납니다.

PUT data/_doc/1
{ "count": 5 }

이 요청을 보내면 data라는 인덱스가 생성되고, _doc이라는 매핑 타입과 long 데이터 타입을 가진 count라는 필드가 자동으로 만들어집니다. 이렇게 새로운 필드를 자동으로 감지하고 추가하는 기능을 동적매핑(Dynamic Mapping)이라고 합니다.

dynamic 파라미터를 true 또는 runtime으로 설정하여, 동적매핑을 활성화할 수 있습니다.

PUT book/_mapping
{
  "dynamic": true
}
  • true / runtime: 동적매핑 활성화
  • strict / false: 동적매핑 비활성화

동적 필드 매핑이 활성화되면, Elasticsearch는 에 정의된 규칙을 사용하여 각 필드의 데이터 타입을 어떻게 매핑할지 결정합니다.”

날짜 감지 (Date detection)

날짜 감지(date_detection) 설정은 기본적으로 활성화되어 있습니다. 새로운 문자열 필드가 들어올 때 그 값이 날짜 패턴과 일치하는지 확인합니다. 일치하는 패턴을 찾으면, 해당 형식에 맞는 새로운 날짜(date) 필드가 매핑에 추가됩니다.

PUT book/_doc/2
{
  "name": "stranger thing",
  "create_date": "2026-02-26"
}

이 요청을 보내면, 날짜 감지 기능에 의해 신규필드 create_datedate 타입으로 생성됩니다.

{
  "book": {
    "mappings": {
      "dynamic": "true",
      "properties": {
        "create_date": {
          "type": "date"
        },
        "name": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        }
      }
    }
  }
}

숫자 감지(Numeric detection)

이 기능은 기본적으로 비활성화되어 있습니다. 기본적으로 데이터가 {"count": "5"}처럼 따옴표에 감싸진 채로 들어오는 경우면 “5”를 보고 이 필드를 text나 keyword 타입으로 정해버립니다. 숫자 감지 기능을 활성화하면, Elasticsearch가 문자열 내부의 내용을 검사해서 숫자 형식이면 자동으로 long이나 float 같은 숫자 타입으로 매핑해 줍니다.

실무 운영 팁

  • date detection, numeric detection 과 같은 기능을 활성화하면 문서 색인마다 추가 연산이 요구됩니다.
  • 자동 매핑 과정에서 예기치 않게 필드 타입이 잘못 매핑될 수 있으며, 데이터를 재인덱싱해야 하는 상황이 발생할 수 있습니다.
  • 동적 매핑은 설정의 편리함으로 인해 초기 개발 속도를 높이는데 유리하지만, 성능과 일관성 측면에서 정적 매핑보다 불리합니다.
  • 따라서, 성능 최적화와 안정적인 운영을 위해서는 가능하면 정적 매핑을 사용하는 것이 좋습니다.

문서정보