OpenSearch
고친 사람 github-actions[bot]
OpenSearch 는 쌓아 둔 글을 낱말로 찾아 주는 검색 서버입니다. Elasticsearch 의 소스 코드를 복사해 따로 잇기 시작한 물건입니다. 라이선스가 바뀌자 바뀌기 전 판을 바탕으로 갈라져 나왔습니다. 그래서 검색하는 방식은 양쪽이 거의 같고, 누가 어떤 조건으로 쓸 수 있는지가 다릅니다.
쉽고 빠른 이해
OpenSearch 는 글을 낱말로 찾아 주는 검색 서버입니다. 쇼핑몰의 상품 검색이나 서버 로그에서 오류 메시지 찾기에 씁니다.
Elasticsearch 가 라이선스를 바꾸면서, 그 소스를 마음대로 가져다 쓰던 쪽이 예전처럼 쓸 수 없게 됐습니다. 바뀌기 전 마지막 판을 복사해 따로 잇기로 한 것이 OpenSearch 입니다.
어떻게 갈라졌나:
- 갈라지기 전 마지막 판의 소스를 복사합니다
- 예전과 같은 조건으로 쓸 수 있는 라이선스를 붙입니다
- 그 뒤로는 양쪽이 각자 기능을 더해 갑니다
대가는 생태계가 둘로 나뉜 것입니다. 찾아본 설명이 어느 쪽 이야기인지 매번 가려야 하고, 시간이 갈수록 두 제품의 기능과 이름이 어긋납니다.
상세
OpenSearch 는 문서를 저장해 두고 낱말로 찾아 주는 서버 프로그램입니다. 내려받아 띄우면 HTTP(HyperText Transfer Protocol) 요청으로 문서를 넣고 검색합니다. 쇼핑몰의 상품 검색과 서버 로그 검색이 대표적인 쓰임입니다.
글을 낱말로 쪼개 어느 낱말이 어느 문서에 들었는지 미리 적어 두는 전문 검색 방식은 Elasticsearch 와 같습니다. 두 제품이 한 소스에서 나왔기 때문입니다. 그래서 이 절은 검색이 어떻게 도는지가 아니라 왜 둘로 갈라졌고 갈라진 뒤 무엇이 달라지는지를 다룹니다.
소스를 복사해 갈라져 나온 물건
남이 만든 소스 코드를 복사해 별개의 제품으로 잇는 것을 포크라고 합니다. 원본 저장소를 통째로 떠 와서 그때부터 자기 판단으로 고쳐 나가는 일입니다. OpenSearch 는 Elasticsearch 를 포크해서 나온 제품입니다.
포크한 쪽은 복사한 시점까지의 코드와 역사를 전부 물려받습니다. 그래서 갈라진 직후의 두 제품은 껍데기만 다른 같은 물건입니다. 다른 것은 앞으로 누가 어느 방향으로 고쳐 나가느냐뿐입니다.
라이선스가 바뀌면서 갈라졌다
라이선스는 이 소프트웨어를 받은 사람이 무엇을 해도 되는지 적어 둔 문서입니다. 고쳐도 되는지, 남에게 다시 나눠 줘도 되는지, 그것으로 돈을 벌어도 되는지를 정합니다. 소스를 공개하면서 이 셋을 모두 열어 두는 라이선스를 오픈소스 라이선스라고 부릅니다.
Elasticsearch 는 처음에 오픈소스 라이선스인 아파치 라이선스로 풀려 있었습니다. 누구나 받아서 고칠 수 있었고, 고친 것을 남에게 서비스로 팔아도 됐습니다. 클라우드 사업자가 이 코드를 가져다 관리형 서비스로 파는 일이 여기서 나왔습니다. 관리형 서비스는 남이 만든 소프트웨어를 대신 띄우고 돌봐 주면서 사용료를 받는 장사입니다.
그 뒤 Elasticsearch 의 라이선스가 바뀌었습니다. 소스는 그대로 공개하되, 이 소프트웨어를 남에게 서비스로 제공하는 데 조건이 붙는 쪽으로 바뀌었습니다. 소스를 볼 수 있다는 점은 같아도 마음대로 다시 쓸 수는 없으니, 이제 오픈소스 라이선스는 아닙니다.
바뀐 조건이 곤란한 쪽에게는 길이 둘이었습니다. 새 조건을 받아들이거나, 아직 아파치 라이선스였던 마지막 판을 복사해 따로 잇거나. 뒤쪽을 고른 결과가 OpenSearch 입니다.
flowchart TD
A["하나의 소스 코드 · 아파치 라이선스"]
A --> B["Elasticsearch · 바뀐 라이선스로 이어 감"]
A --> C["OpenSearch · 복사해서 아파치 라이선스로 이어 감"]
위쪽 상자는 두 제품이 함께 가진 역사입니다. 아래 두 줄기부터가 각자의 역사이고, 갈라진 지점이 곧 라이선스가 바뀐 때입니다.
갈라진 뒤 벌어지는 것
갈라진 직후에는 같은 요청을 보내면 같은 응답이 돌아왔습니다. 그래서 쓰던 쪽은 붙는 주소만 바꿔도 대개 굴러갔습니다. 이 전제는 시간이 갈수록 약해집니다. 양쪽이 각자 새 기능을 더하면서 한쪽에만 있는 기능이 쌓이기 때문입니다.
상표는 포크할 수 없어서 이름도 갈렸습니다. 코드는 라이선스가 허락하면 복사할 수 있지만, 제품 이름은 그 이름을 가진 쪽의 것입니다. 그래서 곁에 딸려 있던 도구까지 새 이름을 받았습니다.
| Elasticsearch 쪽 | OpenSearch 쪽 | |
|---|---|---|
| 검색 서버 | Elasticsearch | OpenSearch |
| 화면 도구 | Kibana | OpenSearch Dashboards |
| 라이선스 | 서비스 제공에 조건이 붙는다 | 아파치 라이선스 |
언어별 클라이언트 라이브러리도 양쪽이 따로 냅니다. 같은 언어를 쓰더라도 붙이는 라이브러리가 서로 다른 물건입니다.
포크가 남긴 대가
찾아본 정보가 어느 쪽 것인지를 먼저 가려야 합니다. 검색해서 나온 설명과 플러그인이 어느 제품을 말하는지 확인하지 않으면, 없는 기능을 찾거나 안 맞는 설정을 넣게 됩니다. 두 제품이 같은 낱말을 쓰는 탓에 이 혼동은 잘 드러나지도 않습니다.
판 번호도 각자 매깁니다. 번호가 같다고 같은 기능을 가진 것이 아닙니다. 그래서 어느 제품의 몇 번 판인지를 늘 함께 적어야 말이 통합니다.
한쪽에서 다른 쪽으로 옮겨 타는 일은 갈수록 비싸집니다. 갈라진 뒤에 생긴 기능은 반대쪽에 없고, 쌓아 둔 데이터를 옮기는 방법도 따로 챙겨야 합니다. 둘 중 하나를 고르는 일이 기능 비교보다 라이선스 조건과 어느 관리형 서비스에 붙을지를 보는 일에 가까워지는 까닭입니다.
관련 항목
OpenSearch 가 갈라져 나온 뿌리
Elasticsearch · 포크 · Lucene · 업스트림 · 브랜치
OpenSearch 를 쓸 수 있는 조건을 정하는 라이선스
라이선스 · 오픈소스 · 오픈소스 라이선스 · 아파치 라이선스 · SSPL · Elastic License
OpenSearch 안에서 검색을 떠받치는 구조
역색인 · 전문 검색 · 분석기 · 관련도 점수 · 세그먼트 · 인덱스
OpenSearch 클러스터를 이루는 구성 요소
노드 · 클러스터 · 샤드 · 레플리카 샤드 · 샤딩 · 복제
OpenSearch 와 함께 묶어 쓰는 도구
OpenSearch Dashboards · Kibana · Logstash · Fluent Bit · Beats · 로그
OpenSearch 에 보내는 요청과 질의
HTTP · REST · JSON · API · Query DSL
OpenSearch 와 같은 역할을 두고 겨루는 검색 엔진
Apache Solr · Meilisearch · Typesense · Algolia · Vespa
OpenSearch 가 속하는 상위 분류
검색 엔진 · 검색 · 분산 시스템 · NoSQL · 문서 데이터베이스
OpenSearch 를 띄우고 굴리는 환경
다른 이름: 오픈서치