본문 바로가기
IT/개발

Elasticsearch에서 색인을 왜 날짜로 나눌까? 물리적 인덱싱에 대하여

by 염옥지 2025. 9. 3.
반응형

Elasticsearch에서 월별·일별 인덱스로 물리적 분리를 하는 주된 목적은 4가지이다

① 성능 최적화 (Search Performance)

• Elasticsearch는 검색 시 모든 샤드를 스캔하는데,
인덱스가 커질수록 성능이 급격히 떨어집니다
• 날짜별 인덱스로 쪼개면, 검색할 기간에 해당하는 인덱스만 조회해서 성능이 크게 향상됩니다
예를들어
• 로그를 1년치를 단일 인덱스(logs)에 넣었을 경우 → 12개월치 샤드 전체 스캔 → 느림
• 로그를 월별 인덱스(logs-2025-09)로 나눌 경우 → 9월 데이터 인덱스만 검색 → 빠름


② 인덱스 관리 & 보관 주기 최적화 (ILM)

반응형

• 로그나 이벤트 데이터처럼 시간에 따라 가치가 줄어드는 데이터는 보관 주기를 다르게 설정하는 게 좋아요.
• 월별 인덱스 구조를 쓰면 오래된 인덱스만 삭제하거나 저비용 스토리지로 이전하는 게 매우 쉬워집니다.
예시
• 최근 3개월 인덱스 → SSD에 저장 (빠른 검색)
• 3개월 이상 지난 인덱스 → S3 같은 저렴한 스토리지로 이전
• 1년 이상 지난 인덱스 → 자동 삭제 가능
이걸 Elasticsearch ILM(Index Lifecycle Management) 정책으로 자동화할 수 있어요.


③ 대용량 데이터 분산 (Scalability)

• 로그, 클릭스트림, 검색 데이터처럼 하루에도 수백만 건씩 쌓이는 경우,하나의 인덱스에 계속 넣으면 샤드 개수가 비대해지고 성능이 떨어집니다
• 날짜 단위로 인덱스를 분리하면 각 인덱스의 크기를 일정하게 유지할 수 있고, 노드 간 균형 잡힌 데이터 분산이 가능해요.
예를들어,
• 단일 인덱스에 10억 건 저장 → 샤드 관리, 메모리 사용량, 검색 속도 모두 부담
• 월별 인덱스로 분할 → 인덱스당 1억 건씩 → 안정적 성능 유지

④ 장애 복구 & 운영 안정성

반응형

• 인덱스를 월별·일별로 나누면, 특정 인덱스에 문제가 생겨도 나머지 인덱스는 영향 없음.
• 단일 대형 인덱스에서 샤드 하나만 깨져도 인덱스 전체가 불안정해질 수 있지만,
날짜별 인덱스는 영향을 최소화할 수 있어요.

결론

인덱스 뒤에 날짜(년/월)를 붙여 물리적으로 나누는 이유는 단순한 네이밍이 아니라 성능과 운영 효율성 때문이에요.

반응형