매핑(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_date는 date 타입으로 생성됩니다.
{
"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 과 같은 기능을 활성화하면 문서 색인마다 추가 연산이 요구됩니다.
- 자동 매핑 과정에서 예기치 않게 필드 타입이 잘못 매핑될 수 있으며, 데이터를 재인덱싱해야 하는 상황이 발생할 수 있습니다.
- 동적 매핑은 설정의 편리함으로 인해 초기 개발 속도를 높이는데 유리하지만, 성능과 일관성 측면에서 정적 매핑보다 불리합니다.
- 따라서, 성능 최적화와 안정적인 운영을 위해서는 가능하면 정적 매핑을 사용하는 것이 좋습니다.
문서정보
- 작성자:호준
- 링크:https://korjun1993.github.io/2026/01/28/dynamic-mapping/
- 작성일: 2026-01-28