면접 예상 질문 및 답변
- Elasticsearch의 기본 개념과 작동 원리를 알려주세요.
- Elasticsearch는 Apache Lucene을 기반으로 하는 오픈 소스, 분산, RESTful 검색 엔진입니다. JSON 문서를 저장하고, 이를 인덱싱하여 빠르게 검색할 수 있게 합니다. 핵심 기능은 전체 텍스트 검색과 함께 복잡한 검색 쿼리를 지원하는 것입니다. 데이터는 샤드로 분할되어 있어 여러 노드에 분산 저장되며, 이를 통해 고가용성과 확장성을 제공합니다.
- Elasticsearch에서 인덱싱은 어떻게 이루어지나요?
- 문서가 Elasticsearch에 제출되면, 그 문서는 JSON 형식으로 변환되어 인덱스에 저장됩니다. 각 문서는 고유한 ID로 식별되며, Elasticsearch는 문서의 내용을 분석하여 역색인을 생성합니다. 이 역색인은 검색 시 문서를 빠르게 찾는 데 사용됩니다.
- 대용량 데이터를 다룰 때 Elasticsearch의 성능을 어떻게 최적화하나요?
- 성능 최적화를 위해 샤딩과 리플리케이션을 적절히 구성합니다. 샤딩은 데이터를 분산시켜 처리 능력을 높이는 반면, 리플리케이션은 데이터의 안정성과 가용성을 보장합니다. 또한, 불필요한 데이터를 정리하는 인덱스 라이프사이클 관리, 캐싱 전략을 사용하여 응답 시간을 단축시키고, 필요에 따라 쿼리를 최적화하여 불필요한 데이터 로드를 줄입니다.
- Elasticsearch에서 데이터 모델링은 어떻게 접근하나요?
- Elasticsearch에서는 데이터를 비정규화하여 저장하는 것이 일반적입니다. 관계형 데이터베이스와 달리, 검색 속도를 최적화하기 위해 종종 하나의 큰 문서로 데이터를 합치는 Epsormalization 접근 방식을 사용합니다. 이는 조인 연산 없이도 빠른 검색과 집계를 가능하게 합니다.
- Elasticsearch의 쿼리 DSL에 대해 설명해 주세요.
- Elasticsearch의 쿼리 DSL은 JSON 형식으로 쿼리를 정의하는 강력한 방식입니다. 이를 통해 텍스트, 숫자, 날짜 등 다양한 유형의 데이터에 대해서 정확하고 복잡한 검색 쿼리를 실행할 수 있습니다. 기본적인 검색부터 시작하여 불리언 연산, 필터링, 집계 등 복잡한 연산도 지원합니다.
- Elasticsearch 클러스터의 모니터링과 관리는 어떻게 하나요?
- Elasticsearch 클러스터의 상태와 성능을 모니터링하기 위해 Elasticsearch 자체의 API, Kibana, Elastic Stack의 X-Pack 등을 사용할 수 있습니다. 이들 도구를 통해 클러스터의 상태, 노드의 상태, 쿼리 성능, 샤드의 상태 등을 실시간으로 확인하고 문제를 진단할 수 있습니다. 또한, 클러스터 설정을 조정하고, 인덱스 관리, 백업과 복구 작업 등도 수행할 수 있습니다.
- Elasticsearch와 관련된 보안 조치에는 어떤 것들이 있나요?
- Elasticsearch의 보안 조치에는 여러 가지가 있습니다. 먼저, 통신의 암호화를 통해 데이터 전송 과정에서의 보안을 강화할 수 있습니다. 이는 HTTPS를 사용하여 구현할 수 있습니다. 또한, 사용자 인증과 권한 부여를 통해 데이터에 대한 접근을 제어할 수 있으며, 이는 X-Pack 보안 기능을 통해 설정할 수 있습니다. 로깅과 감사 로그를 활용하여 시스템 내의 활동을 모니터링하고 기록하는 것도 중요한 보안 조치 중 하나입니다.
- Elasticsearch의 주요 단점은 무엇이라고 생각하나요?
- Elasticsearch의 주요 단점 중 하나는 관리와 운영의 복잡성입니다. 대규모 클러스터의 경우, 리소스 관리, 성능 최적화, 보안 설정 등을 올바르게 관리하는데 상당한 노력이 필요합니다. 또한 데이터 일관성 보장 측면에서도 때때로 도전적일 수 있으며, 이는 Elasticsearch가 최종 일관성 모델을 사용하기 때문입니다. 또한, 업그레이드 과정이 복잡하고 리소스 집약적일 수 있으며, 이는 특히 대규모 데이터를 다룰 때 중요한 고려사항입니다.
- ElasticSearch 프로젝트에서 겪었던 가장 큰 도전은 무엇이었고, 어떻게 해결했나요?
- 참여했던 프로젝트에서의 담당은 데이터 조회 API 개발이었는데 복잡한 쿼리를 작성하고 이를 최적화하는 과정이 가장 어려웠던 도전이었습니다. 공식 문서와 쿼리 속도 테스트, 그리고 캐싱 시스템과 같은 전략을 활용하여 서비스의 안정성에 기여했습니다.
- 대용량 데이터를 빠르게 검색하기 위해 쿼리를 어떻게 최적화할 수 있을까요?
- 쿼리의 실행 시간을 줄이기 위해 불필요한 필드는 제외하고, 검색에 필요한 필드만 제한할 수 있습니다. 또한, 적절한 샤딩 전략을 사용하고, 검색 결과의 크기를 제한하는 것도 중요합니다. 집계 작업의 경우, 사전 계산된 집계를 사용하거나, 적절한 집계 크기를 설정하여 성능을 향상할 수 있습니다.
- 수백만 개의 문서를 안정적으로 조회하기 위해 어떤 기능을 사용할 수 있나요?
- Scroll API를 사용할 수 있습니다. 초기 검색 시점의 스냅숏을 유지하며, 데이터를 작은 청크로 나누어 순차적으로 조회할 수 있게 해 줍니다.
- Search After 기능을 사용하면 페이징을 통해 대량의 데이터를 효율적으로 조회할 수 있습니다. 특정 문서 이후의 데이터를 조회하는 방식으로, 실시간 데이터와 빠른 응답 속도가 중요한 경우에 유용합니다.