더그 커팅의 Lucene과 Hadoop이 어떻게 검색과 분산 데이터 처리를 현대 데이터 팀의 널리 채택된 오픈 소스 빌딩 블록으로 바꾸었는지에 대한 설명입니다.

Lucene과 Hadoop은 다소 실용적인 이야기를 들려줍니다: 일단 빠른 검색을 위해 정보를 인덱싱할 수 있게 되면, 다음 과제는 한 대의 머신으로는 감당할 수 없는 더 많은 데이터를 처리하는 일입니다. 이 둘은 함께 “검색”과 “분산 컴퓨팅”을 틈새 비용이 큰 기능에서 일반 하드웨어로 팀들이 채택할 수 있는 일상적 빌딩 블록으로 바꾸는 데 기여했습니다.
이 글은 수식이나 분산 시스템 이론의 심층 분석이 아니라 작동하는 역사입니다. 사람들 앞에 있던 문제들, 진보를 가능하게 한 단순한 아이디어들, 그리고 그 아이디어들이 현대 도구들에 왜 여전히 나타나는지를 연결하는 것이 목표입니다.
Apache Lucene은 개발자가 애플리케이션에 고품질 검색을 쉽게 추가하도록 만들었습니다: 텍스트를 인덱싱하고, 빠르게 쿼리하며, 모든 것을 처음부터 발명하지 않고 반복할 수 있게 했습니다.
Apache Hadoop은 다른 고통을 다뤘습니다: 조직들이 로그, 클릭스트림, 그리고 단일 서버에 편하게 들어가지 않는 대규모 데이터셋을 수집하고 있었습니다. Hadoop은 그 데이터를 여러 머신에 저장하는 방법(HDFS)과 그 위에서 배치 처리 작업(MapReduce)을 실행하는 방법을 제공해, 바닥부터 분산 시스템을 직접 설계하지 않고도 해결할 수 있게 했습니다.
이들 프로젝트 이전에는 많은 팀이 비용이 큰 상용 시스템을 구매하거나 느리고 수동적인 워크플로를 받아들여야 했습니다. Lucene과 Hadoop은 장벽을 낮췄습니다.
이 글을 통해 Lucene과 Hadoop 이전의 문제들이 무엇이었는지, 왜 더그 커팅의 작업이 개발자들에게 공감했는지, 그리고 인덱싱에서 클러스터 조정에 이르기까지 아이디어들이 어떻게 연결되었는지를 볼 수 있습니다.
끝까지 읽으면 남는 영향력을 이해하게 될 것입니다: 스택에 Elasticsearch, Spark, 클라우드 오브젝트 스토리지, 관리형 서비스가 들어 있더라도 많은 핵심 개념은 Lucene과 Hadoop이 대중화한 것에서 기인합니다.
더그 커팅은 두 가지 다른 ‘기본’ 도구—검색을 위한 Apache Lucene과 분산 데이터 처리를 위한 Apache Hadoop—의 방향을 형성한 드문 엔지니어 중 하나입니다. 두 프로젝트 모두 한 사람보다 훨씬 크게 성장했지만, 커팅의 초기 기술적 결정과 오픈 협업에 대한 그의 헌신이 방향을 설정했습니다.
커팅의 일관된 테마는 접근성이었습니다. Lucene은 고품질 검색을 대기업만이 구축할 수 있는 특수 시스템이 아니라 애플리케이션에 임베드할 수 있는 라이브러리처럼 느껴지게 만들었습니다. 이후 Hadoop은 대규모 저장과 연산을 비싼 전용 하드웨어가 아니라 보통의 머신 클러스터에서 가능하게 하려 했습니다.
이 동기는 중요합니다: 이는 단순한 ‘빅데이터를 위한 빅데이터’가 아니라 예산이 제한된 소규모 팀에게도 강력한 기능을 제공하려는 추진이었습니다.
Lucene과 Hadoop은 Apache Software Foundation 아래에서 성장했으며, 그곳에서 결정은 공개적으로 이루어지고 기여를 통해 권한이 얻어집니다. 이 모델은 버그 수정, 성능 개선, 문서화, 기업과 대학의 실사용 피드백 등 꾸준한 개선 흐름을 장려했습니다.
커팅의 개인적 기여는 초기에 가장 강력했습니다: 초기 아키텍처, 초기 구현, 그리고 다른 기여자들을 끌어모을 신뢰성. 채택이 확산되면서 커뮤니티(그리고 이후 많은 기업들)가 주요 추가 사항들—새 기능, 통합, 확장, 운영 툴링—을 주도했습니다.
유용한 사고 방식은 이렇습니다: 커팅은 ‘첫 번째 작동 버전’과 그 주위의 문화를 만들었고, 오픈 소스 커뮤니티는 그 아이디어들을 장기적인 인프라로 발전시켰습니다.
Lucene 이전에 제품에 ‘검색’을 넣는 것은 종종 작은 연구 프로젝트를 만드는 것을 의미했습니다. 많은 팀이 값비싼 상용 소프트웨어를 사거나 조정하기 어렵고 확장하기 힘들며 잘못되기 쉬운 자체 솔루션을 엮어 사용했습니다.
검색은 단지 단어가 어디에 나오는지를 찾는 문제가 아닙니다. 속도, 순위, 그리고 현실 세계의 지저분한 텍스트를 다루는 일이 포함됩니다. 사용자가 “running shoes”를 입력하고 밀리초 내에 유용한 결과를 얻기를 원한다면, 특수 자료구조와 알고리즘, 그리고 인덱싱·업데이트·쿼리를 안정적으로 유지하기 위한 세심한 엔지니어링이 필요했습니다.
인덱스는 책 뒤의 색인과 비슷하지만 모든 문서에 대한 것입니다: 매번 모든 페이지를 스캔하는 대신 용어를 찾아 곧바로 해당 위치로 이동합니다. 인덱스가 없으면 검색은 느려지고, 사실상 매 쿼리마다 모든 것을 다시 읽는 셈이 됩니다.
관련도는 무엇을 먼저 보여줄지 결정합니다. 예를 들어 “shoes”에 10,000개의 문서가 일치한다면, 관련도는 첫 페이지에 어떤 10개를 보여줄지를 결정합니다. 이는 용어 빈도, 용어가 등장한 위치(제목 대 본문), 그리고 전체 컬렉션에서 그 용어의 희귀성 같은 신호에 따라 달라집니다.
웹사이트와 온라인 카탈로그가 폭발적으로 늘어나자 ‘충분히 좋은’ 검색은 더 이상 충분하지 않았습니다. 사용자는 빠른 응답, 오타 허용, 합리적 순위를 기대했고, 이를 제공하지 못하는 기업은 참여와 매출을 잃었습니다.
재사용 가능한 라이브러리는 팀이 인덱싱과 관련도 문제를 처음부터 다시 해결하지 않아도 된다는 뜻입니다. 이는 검색 구축 비용을 낮추고 모범 사례를 공유 가능하게 하며 개발자가 제품 고유의 요구사항에 집중하게 합니다.
Lucene은 검색을 ‘처음부터 발명해야 하는 연구 프로젝트’가 아니라 제품에 추가할 수 있는 기능처럼 느껴지게 했습니다. 핵심적으로, Lucene은 지저분한 텍스트를 빠르고 일관되게 검색할 수 있게 바꿔주는 라이브러리입니다.
Lucene은 네 가지 실용적 업무에 초점을 맞춥니다:
Lucene은(그리고 여전히) 일상적인 검색 요구에 적합합니다:
Lucene의 매력은 마법이 아니라 실용성입니다:
Lucene은 한 회사의 문제만 해결한 것이 아니라 많은 검색 애플리케이션과 서비스가 기반으로 삼는 신뢰할 수 있는 레이어가 되었습니다. 이후 많은 검색 도구들은 Lucene의 인덱싱과 관련도 접근법을 차용했거나 Lucene을 직접 엔진으로 사용했습니다.
검색 로그, 클릭스트림, 이메일 아카이브, 센서 읽기, 웹페이지 등은 공통적으로 한 가지 속성을 가집니다: 구매한 서버보다 더 빠르게 성장합니다. 팀이 ‘모든 것’을 보관하기 시작하자 데이터셋은 단순 저장 용량뿐 아니라 이를 처리하는 데 드는 시간 측면에서도 단일 머신에 맞지 않게 되었습니다.
첫 대응은 스케일 업이었습니다: 더 많은 CPU, 더 많은 RAM, 더 큰 디스크. 하지만 한계가 오면 가격이 기하급수적으로 뛰고, 시스템 전부를 하나의 박스에 걸게 됩니다. 장애가 나면 모든 것이 멈추고, 끝까지 살아있다 해도 디스크나 메모리 같은 물리적 한계가 존재합니다. 일부 워크로드는 데이터가 계속 두 배로 늘어날 때 제시간에 끝나지 않습니다.
스케일 아웃은 접근을 뒤집습니다. 한 대의 강력한 컴퓨터 대신 여러 대의 보통 컴퓨터를 사용하고 작업을 나눕니다.
유용한 비유는 도서관 이사입니다: 한 사람이 가장 무거운 박스를 들 수는 있지만 열 사람이 더 작은 박스를 나눠 들면 더 빨리 끝납니다—누군가 지치더라도 나머지가 진행합니다. 분산 데이터 처리는 저장과 연산에 동일한 아이디어를 적용합니다.
저가형 머신 여러 대를 사용하면 새로운 가정이 생깁니다: 무언가는 항상 고장난다. 디스크가 죽고, 네트워크가 끊기고, 노드가 재부팅됩니다.
따라서 목표는 장애를 예상하고 계속 동작하는 시스템입니다—데이터를 여러 복사본으로 저장하고, 어떤 작업 조각이 완료되었는지 추적하며, 중단된 부분을 자동으로 재실행하는 방식입니다. 이 압력—단일 머신보다 많은 데이터와 대규모에서의 잦은 실패 현실—이 Hadoop의 분산 처리 접근을 가능하게 했습니다.
Hadoop은 두 가지 간단한 약속으로 이해하기 쉽습니다: 여러 대의 보통 머신에 대규모 데이터를 저장하고 그 데이터를 병렬로 처리하겠다는 것. 이 약속은 두 핵심 요소로 나타납니다: 저장을 담당하는 HDFS와 처리 모델인 MapReduce.
HDFS(Hadoop Distributed File System)는 한 컴퓨터에 너무 큰 파일을 고정 크기 블록으로 나눕니다(일종의 청크). 그런 다음 그 블록들을 클러스터의 여러 머신에 분산합니다.
데이터를 안전하게 유지하기 위해 HDFS는 각 블록을 다른 머신에 복제해서 한 컴퓨터가 다운되어도 파일을 다른 복사본에서 읽을 수 있게 합니다. 사용자는 수동으로 백업을 찾을 필요 없이 시스템이 이를 처리합니다.
실용적 결과는: HDFS의 디렉터리는 일반 폴더처럼 동작하지만 내부적으로는 많은 디스크로 이어붙여진 구조라는 점입니다.
MapReduce는 배치 처리용 프로그래밍 모델로 두 단계가 있습니다:
대표적인 예는 테라바이트 단위 로그에서 단어를 세는 것입니다: 매퍼는 각 청크 내에서 단어를 세고, 리듀서는 단어별 합계를 더합니다.
HDFS와 MapReduce를 합치면 대규모 배치 작업(로그 분석, 인덱싱 파이프라인, 클릭스트림 집계, 데이터 정리)을 단일 서버로는 감당할 수 없는 데이터셋에 대해 실행할 수 있게 되었습니다. 거대한 머신을 사는 대신 보통 박스를 더 추가하고 Hadoop이 저장, 재시도, 병렬 실행을 조정하도록 하면 됩니다.
Lucene과 Hadoop은 한 장씩 다른 이야기처럼 보일 수 있습니다—하나는 검색에 관한 것이고 다른 하나는 ‘빅데이터’에 관한 것입니다. 하지만 둘은 공통된 사고방식을 공유합니다: 실제 팀들이 운영하고 확장하고 신뢰할 수 있는 실용적 도구를 만들라는 것, 단순히 기발한 프로토타입을 내놓고 끝내지 않는 것.
Lucene은 인덱싱, 쿼리, 랭킹 같은 몇 가지 어려운 일을 훌륭하게 수행하도록 집중했고, 이를 어디에든 임베드할 수 있는 라이브러리로 포장했습니다. 그 선택은 중요한 교훈을 줍니다: 통합하기 쉽고 디버그 가능하며 문서화가 잘 된 도구라면 채택이 확산된다는 것.
Hadoop도 같은 철학을 분산 데이터 처리에 적용했습니다. 특수 하드웨어나 틈새 시스템을 요구하는 대신, 보통 머신에서 실행되고 단일 서버에 더 이상 맞지 않는 데이터를 저장하고 처리하는 일상적 문제를 해결하려 했습니다.
데이터가 거대하면 그걸 네트워크로 복사해 한 강력한 머신으로 옮겨 처리하는 것은 도서관의 모든 책을 한 책상으로 옮겨 인용문을 찾으려는 것과 같습니다. Hadoop의 접근은 연산을 이미 데이터가 있는 곳으로 가져가는 것입니다: 작은 코드 조각을 여러 머신에 보내 각자 로컬 슬라이스를 처리하게 하고 결과를 합칩니다.
이 아이디어는 검색 인덱싱과도 닮아 있습니다: 데이터를 (인덱스) 그 데이터가 있는 곳에 조직해 쿼리가 매번 모든 것을 스캔하지 않도록 하는 것입니다.
두 프로젝트 모두 오픈 협업의 혜택을 받았습니다: 사용자는 이슈를 보고, 수정을 제출하고, 운영 노하우를 공유할 수 있었습니다. 채택을 이끈 결정적 요인들은 화려하진 않지만 결정적이었습니다—명확한 문서화, 다양한 환경에 대한 이식성, Apache 거버넌스는 기업들이 벤더 락인을 두려워하지 않고 시간과 인력을 투자하게 만들었습니다.
Hadoop이 퍼진 이유는 팀들이 갑자기 ‘빅데이터’를 원했기 때문이 아니라, 단일 머신과 전통적 데이터베이스로는 점점 비싸고 믿기 어려워지는 몇 가지 자주 발생하는 작업들이 있었기 때문입니다.
로그 처리가 초기 히트였습니다. 웹 서버, 앱, 네트워크 장비는 대량의 append-only 레코드를 생성합니다. 팀들은 오류별 집계, 지연 백분위수, 지역별 트래픽 같은 일일(또는 시간별) 롤업이 필요했습니다. Hadoop은 원시 로그를 HDFS에 저장하고 스케줄된 작업으로 요약을 계산하게 했습니다.
클릭스트림 분석이 자연스럽게 뒤를 이었습니다. 제품팀은 전환 전에 사람들이 어떤 것을 클릭했는지, 어디서 이탈했는지, 코호트가 시간에 따라 어떻게 행동했는지 알고 싶어 했습니다. 이 데이터는 지저분하고 고볼륨이며, 가치가 대개 대규모 집계에서 나오기 때문에 Hadoop이 적합했습니다.
**ETL(추출·변환·적재)**도 핵심 사용 사례가 되었습니다. 조직은 데이터가 데이터베이스, 파일, 벤더 익스포트에 흩어져 있었습니다. Hadoop은 원시 데이터를 중앙에 적재하고 대규모로 변환한 뒤 큐레이션된 결과를 데이터웨어하우스나 다운스트림 시스템으로 내보낼 수 있는 장소를 제공했습니다.
이러한 워크플로의 대부분은 배치였습니다: 일정 기간(예: 지난 한 시간 또는 하루) 동안 데이터를 수집한 뒤 몇 분 또는 몇 시간이 걸릴 수 있는 작업으로 처리합니다. 배치는 질문이 트렌드와 합계에 관한 것이지 즉각적인 개인별 응답이 아닐 때 가장 적합합니다.
실무에서는 Hadoop이 야간 리포트, 정기 대시보드, 대규모 백필(예: 작년 전체를 새 논리로 재계산) 등을 구동했습니다. 서브초(인터랙티브) 탐색용으로 설계된 것은 아니었습니다.
큰 매력은 더 저렴한 처리 비용이었습니다: 단일 고성능 머신에 투자하는 대신 범용 하드웨어로 스케일 아웃합니다.
또 다른 장점은 중복을 통한 신뢰성입니다. HDFS는 데이터 블록을 여러 머신에 복제해 노드 장애가 자동으로 데이터 손실이나 전체 재시작으로 이어지지 않게 합니다.
초기 Hadoop 스택은 특히 데이터베이스 기반의 빠른 읽기 성능과 비교하면 인터랙티브 쿼리에 느릴 수 있었습니다.
또한 운영 복잡성을 도입했습니다: 클러스터 관리, 작업 스케줄링, 데이터 포맷, 다수 머신에서의 장애 원인 추적 등이 필요했습니다. 채택은 대개 배치 워크로드가 명확하고 파이프라인 표준화의 규율이 있을 때 성공했습니다—Hadoop으로 모든 것을 하려 하지 않았을 때가 성공 확률이 높았습니다.
Lucene과 Hadoop은 서로 다른 문제를 해결하므로 함께 쓸 때 강력합니다.
Lucene은 빠른 검색에 관한 것입니다: 텍스트와 구조화된 필드를 인덱싱해 지금 당장(예: 200개의 관련 이벤트를 찾아 즉시 보여주는 식) 빠르게 검색할 수 있게 합니다.
Hadoop은 여러 머신에 걸친 큰 파일의 저장과 처리에 관한 것입니다: 데이터를 HDFS에 신뢰성 있게 저장하고 병렬로 처리(역사적으로는 MapReduce)해 단일 서버로는 감당할 수 없는 데이터셋을 다룹니다.
간단히 말해: Hadoop은 데이터를 준비하고 연산을 수행하며; Lucene은 그 결과를 탐색하기 쉽게 만듭니다.
수개월치 원시 애플리케이션 로그가 있다고 상상해보세요.
이제 대규모 원시 데이터에 대한 강력한 배치 처리와 조사 및 리포팅을 위한 인터랙티브 검색을 모두 갖출 수 있습니다.
분석은 흔히 “전체적으로 무슨 일이 일어났나?”에 답하고, 검색은 “구체적 증거를 보여줘”에 답합니다. Hadoop은 거대한 입력에서 파생 데이터셋을 계산 가능하게 했고, Lucene은 그 데이터셋을 발견 가능하게 만들어 파일 더미를 실제로 사람이 탐색할 수 있는 대상이 되게 했습니다.
이 조합이 필수는 아닙니다. 데이터가 단일 데이터베이스에 편하게 들어가거나 관리형 검색·분석이 이미 요구를 충족하면 Hadoop+Lucene을 연결하는 것은 운영 오버헤드를 증가시킬 수 있습니다. 대규모 처리와 빠른 탐색이 모두 필요할 때만 이 조합을 선택하세요.
Hadoop은 단순히 큰 파일을 처리하는 새 방법을 제시한 것이 아니라 많은 조직이 공유되는 데이터 플랫폼이라는 관점으로 생각하게 만들었습니다. 프로젝트마다 별도 시스템을 만드는 대신 원시 데이터를 한 번 적재해 저렴하게 보관하고 여러 그룹이 시간이 지나도 재사용할 수 있게 된 것입니다.
HDFS 스타일 저장과 배치 처리가 익숙해지자 패턴이 생겼습니다: 데이터를 중앙화한 뒤 위에 기능을 계층화합니다. 이 변화는 다음과 같은 분리를 장려했습니다:
이는 기술적 변화만큼이나 개념적 변화였습니다. 데이터 인프라는 재사용 가능하고 거버넌스가 있으며 팀 간 접근이 가능해야 한다는 기대를 만들었습니다.
커뮤니티의 모멘텀이 따라왔습니다: 사람들은 데이터를 더 쉽게 쿼리하고, 신뢰성 있게 로드하며, 반복 워크플로를 실행할 방법을 원했습니다. 이는 높은 수준에서 다음의 성장을 촉진했습니다:
더 많은 도구가 같은 플랫폼에 연결되면서 표준이 접착제 역할을 했습니다. 공통 파일 포맷과 공유 저장 패턴은 엔진과 팀 간의 데이터 교환을 쉽게 만들었습니다. 모든 파이프라인을 도구마다 다시 쓰는 대신 조직은 몇 가지 ‘기본’ 포맷과 디렉터리 규약에 합의했고, 플랫폼은 그 부분들의 합 이상이 되었습니다.
Hadoop의 절정기는 대규모 배치 작업으로 정의됩니다: 데이터를 HDFS에 복사하고 MapReduce를 밤새 실행한 뒤 결과를 게시하는 식이었습니다. 그 모델이 사라지진 않았지만, 기대치가 “지금 답변”과 “지속적 업데이트”로 이동하면서 기본값은 아니게 되었습니다.
팀들은 순수 배치 처리에서 스트리밍 및 준실시간 파이프라인으로 이동하기 시작했습니다. 매일 MapReduce를 기다리는 대신 이벤트가 도착할 때 처리하고 대시보드나 알림을 빠르게 업데이트하는 시스템이 등장했습니다.
동시에 새로운 컴퓨트 엔진은 인터랙티브 분석을 현실적으로 만들었습니다. 인메모리 처리와 최적화된 쿼리 실행을 위해 설계된 프레임워크는 반복 작업, 탐색적 분석, SQL 스타일 쿼리에서 고전적 MapReduce보다 나은 성능을 보였습니다.
스토리지도 바뀌었습니다. 많은 조직이 “HDFS 중심”에서 비용이 저렴하고 단순한 클라우드 오브젝트 스토리지로 옮겼습니다. 컴퓨트는 더 일회성이 되었습니다: 필요할 때 띄우고 끝나면 내립니다.
Hadoop 브랜드 구성요소 중 일부는 쇠퇴했지만 아이디어는 널리 퍼졌습니다: 분산 저장, 연산을 데이터에 근접시킴, 범용 하드웨어에서의 내결함성, 공유된 ‘데이터 레이크’ 마인드셋. 도구가 바뀌어도 아키텍처 패턴은 표준이 되었습니다.
Lucene은 많은 현대 검색 스택에 임베디드된 핵심 라이브러리라 부침이 크지 않았습니다. Elasticsearch, Solr 등 많은 검색 솔루션이 여전히 인덱싱, 스코어링, 쿼리 파싱에서 Lucene에 의존합니다—검색, 관찰성, 제품 발견에 중심이 되는 기능들입니다.
Hadoop이라는 묶음형 플랫폼은 지금 덜 흔하지만 그 기본 원칙은 현대 데이터 엔지니어링을 형성했습니다. 반면 Lucene은 여전히 검색 중심 애플리케이션을 구동하며, 종종 새로운 서비스와 API로 래핑되어 사용됩니다.
Lucene과 Hadoop의 아이디어에서 이득을 보려면 반드시 ‘빅데이터 시스템’을 구축할 필요는 없습니다. 유용한 부분은 당신이 어떤 문제를 풀고 있는지 아는 것입니다: 빠르게 찾기(검색)인지 아니면 많은 데이터를 효율적으로 처리하기(배치/분산 컴퓨트)인지.
사용자(또는 내부 도구)가 쿼리를 입력하고 키워드, 구문, 필터, 랭킹으로 관련 결과를 빠르게 받아야 한다면—그건 검색 인덱싱 영역입니다. Lucene 스타일 인덱싱이 강점을 가집니다.
목표가 큼직한 데이터량을 크런치해 특성, 익스포트, 리포트, 변환을 주기적으로 산출하는 것이라면—그건 배치 처리 영역입니다. Hadoop이 정형화한 문제 공간입니다.
간단한 휴리스틱:
도구를 고르기 전에 요구사항을 압박 테스트하세요:
옵션을 탐색할 때는 요구사항을 일반 패턴과 트레이드오프로 매핑해 보면 도움이 됩니다. 관련 비교 기사는 /blog에서, 관리형 대 자가 호스팅의 운영 책임 비교는 /pricing에서 확인해 보세요.
Lucene/Hadoop 시대가 준 실용적 교훈 중 하나는 팀이 이 인프라 아이디어를 작동하는 제품으로 빠르게 바꿀 수 있을 때 이긴다는 것입니다. 내부 로그 탐색기, 문서 검색 앱, 소규모 분석 대시보드를 프로토타이핑할 때 Koder.ai 같은 바이브-코딩 플랫폼은 끝까지 작동하는 엔드투엔드 앱으로 더 빨리 도달하도록 도울 수 있습니다: 프론트엔드는 React, 백엔드는 Go와 PostgreSQL, 채팅으로 반복하는 인터페이스를 제공합니다.
이는 필드, 필터, 보존 기간, UX 같은 요구를 검증할 때 특히 유용합니다. 플래닝 모드, 스냅샷, 롤백 같은 기능은 클러스터 운영이나 검색 스택 튜닝 같은 무거운 운영 선택을 하기 전에 초기 실험을 덜 위험하게 만듭니다.
Lucene과 Hadoop이 주류가 된 이유는 마법 때문이 아니라 재사용 가능한 원시 프리미티브인 인덱싱과 분산 처리를 팀들이 채택하고 확장하며 오픈 소스를 통해 공유할 수 있는 빌딩 블록으로 포장했기 때문입니다.
Lucene은 인덱스를 생성해 매번 모든 콘텐츠를 스캔하지 않고도 일치하는 문서를 빠르게 찾아주는 검색 라이브러리입니다. 또한 실무에서 필요한 구성 요소들을 제공합니다: 분석기(텍스트를 토큰화하는 방식), 쿼리 파싱, 관련도 점수화 등.
Hadoop은 "더 큰 서버를 사는 것"으로는 해결되지 않는 지점에 대응합니다. 대량의 데이터를 여러 대의 머신에 분산 저장하고, 이를 병렬로 처리하는 배치 작업을 수행할 수 있게 하며, 머신 장애 시 재시도와 중복 저장 같은 내결함성을 제공합니다.
인덱스는 용어(또는 기타 토큰)를 해당 용어가 등장하는 문서/필드로 매핑하는 자료구조로, 책 뒤의 색인과 유사합니다.
실무적으로 말하면: 인덱싱은 쿼리 때마다 모든 것을 다시 읽지 않도록 사전에 한 번 수행하는 작업이어서, 사용자 쿼리가 밀리초 내에 응답할 수 있게 합니다.
관련도는 검색 엔진이 일치하는 결과들 중 어느 것을 먼저 보여줄지 결정하는 방식입니다.
일반적인 신호로는:
상품 검색을 만든다면 필드 부스트, 분석기, 동의어 같은 관련도 튜닝에 시간을 투자해야 합니다. 단순히 나중에 처리할 문제가 아닙니다.
HDFS(Hadoop Distributed File System)는 큰 파일을 고정 크기 블록으로 나누어 클러스터의 여러 머신에 분산 저장합니다. 각 블록은 여러 머신에 복제되어 노드가 장애가 나도 데이터에 접근할 수 있도록 합니다.
운영 관점에서는 일반 파일 시스템처럼 취급하면 되고, 블록 배치와 중복 관리는 Hadoop이 처리합니다.
MapReduce는 두 단계로 이루어진 배치 프로그래밍 모델입니다:
로그 집계처럼 ‘모든 것을 스캔해서 요약을 계산하고 결과를 쓰는’ 작업에 적합합니다.
“연산을 데이터로 옮긴다”는 것은 거대한 데이터셋을 네트워크로 복사해 한 곳에서 처리하는 대신, 데이터를 이미 가지고 있는 머신들에 작은 코드 조각을 보내 각자 로컬에서 처리하게 한다는 뜻입니다.
이 방식은 네트워크 병목을 줄이고, 특히 대규모 배치 워크로드에서 확장성이 더 좋습니다.
일반적인 패턴은 다음과 같습니다:
이렇게 하면 대규모 배치 처리와 인터랙티브한 검색 탐색이 서로 방해하지 않습니다.
초기에는 볼륨이 크고 추가만 되는 데이터에서 큰 가치를 냈습니다:
이들 대부분은 분 단위/시간 단위의 배치 워크플로우였고, 즉시성이 낮아도 되는 경우가 많았습니다.
요구사항에 따라 가장 단순한 도구를 선택하세요:
지체 시간, 데이터 크기/성장, 업데이트 패턴, 팀 역량, 운영 부담을 꼭 점검하세요. 관련 비교 기사를 보려면 /blog를 참고하고, 관리형 대 자가 운영의 트레이드오프는 /pricing에서 운영 책임을 비교해보는 것이 도움이 됩니다.