엔지니어링

Sense 소식 - Sense 2.0.0-beta1 출시

시작

다른 훌륭한 프로젝트와 마찬가지로 Sense도 암스텔에서 열린 일련의 회의를 마치고 맥주를 즐기며 대화를 나누던 중에 아이디어를 구상한 제품입니다. 친구인Jasper와 내가 Jasper의 회사에서 곧 개최할 연례 해커톤에 대하여 이야기를 나누고 있었습니다. 그 해커톤은 아이디어가 선정되는 방식과 팀 구성 방식을 규정하는 엄격한 절차를 따릅니다. Jasper와 나는 크롬 브라우저의 대체 역사 화면에서 Anne Veling 과 공동 작업에 매진하였습니다.

Jasper와 나는 모두 Elasticsearch 사용에 만족했지만, 풍부한 REST API로 요청을 제출할 수 있도록 지원하는 좋은 도구가 없었다는 부분에는 동의했습니다. 안타깝게도 가장 좋은 도구는 여전히 단말기 기반 cURL 명령이었습니다. 정말로 불편하다고 느끼면서 5초 정도 단말기를 조작하여 요청을 제출하면 끝납니다. 오타를 수정하는 것과 같이 단순한 작업을 위해 전체 명령 다시 입력해야 하거나 단말기의 다선 지원과 씨름해야 했었습니다. 일부 웹 기반 JSON 편집기를 찾아서 편리하게 작업하는 것은 지원하지 않았습니다.

주말동안 끝낼 수 있는 일이 아니었습니다.

약간의 조사를 실시하고 Anne에게 전화를 걸어서 우리는 아직 방문기록 페이지 프로젝트에 매달려 있지만, 우리 모두가 열혈 Elasticsearch 사용자인 이상 멋진 콘솔을 구성하는 데 시간을 더 할애할 수 있을 것 같다고 말했습니다. 우리에게는 단순히Ace 온라인 편집기를 사용하여 API를 자동으로 인식하는 기술 자료를 구축한 후, 적절한 상황별로 제안을 제시하는 방법도 있었습니다. Anne는 즉시 열광하며 좋은 생각이라고 동의하였습니다. 그러나 "주말에 해야 한다"는 해커톤의 기본 원칙에 위배되므로 아이디어를 포기해야 했습니다. 분명히 내가 제안한 것은 불가능했습니다. 그러나 계속 매진하여 우리는 결국 가장 멋진 크롬 방문기록 페이지의 대체 프로그램을 제작하는 데 성공하였습니다.

좌절에도 불구하고, 우리는 계속해서 도전하여 우리가 해낼 수 있다는 것을 증명했습니다. 그 다음 주말 (그리고 며칠동안의 저녁시간에) 우리는 자리에 앉아 작업을 이어나갔습니다. 그리고는 마침내 Sense가 탄생했습니다. 지옥같은 버그들이 가득했지만, 동작했습니다. 난 이것을 사람들에게 보여주었고, 그들은 열광했습니다.

작업 초기

그 시점부터는 주중 저녁 시간을 기술 자료를 확장하고 버그를 수정하는 일로 보냈습니다. Sense가 사람들의 이목을 집중시키고 나는 사람들이 과거 버그가 많은 버전에 매달려 있을까봐 걱정됐습니다. 크롬 확장(Chrome Extension) 서비스로 Sense를 출시하기로 한 것과 반대로 공개할 때 자동으로 업데이트하기로 했습니다. 필요할 때마다 작업 내역 패널(History Panel)과 같은 기능을 하나씩 추가했습니다.

그 무렵에 나는 Elastic에 합류했고, 회사에서 많은 사람들이 큰 관심을 갖고 Sense를 사용하고 있다는 말을 듣고 기분이 정말 좋았습니다. Clint씨가 나에게 "Sense에 필요한 것이 무엇인지 아시나요? 이러한 문법을 지원해야 하고 편집기에서 여러 가지 요청을 작성할 수 있어야 해요"라고 말했던 것을 똑똑히 기억합니다. 과제가 또 하나 생겼고 물론 해결하였습니다. 간단한 문제가 아니어서 Ace의 바닥까지 깊이 파고들어야 했습니다. 그 결과물이 Sense의 추천 엔진에 통합된 새로운 Ace 모드(Ace에 의해 사용되는 하이라이트 문법)입니다.

어떤 의미인지 확인하기 위해, 다음에 나온 Sense의 오랜전 스크린샷을 살펴보십시오.

그림 1. Sense 0.7

Sense 0.7

맨 위에 API url을 입력하고 왼쪽에 JSON 본문을 입력하였습니다. 모든 것이 매끄럽게 구분되었고, Ace의 표준 JSON 모드를 사용할 수 있었습니다. 하지만 이제는 다음 형식을 지원할 방법을 찾아야 했습니다.

GET _cluster/health
POST index/_settings
{
  "index": { "number_of_replicas": 3 }
}
        

즉, Ace가 세 가지 다른 모드(HTTP 메소드, URL, 선택적으로 사용되는 JSON 본문)를 분석하는 방법을 알아야 했습니다. 더구나 이러한 세 가지 모드가 이전처럼 확실하게 구분되지도 않았습니다. JSON 본문이 완성됨을 알 수 있는 유일한 방법은 중괄호를 세는 것입니다. Ace에 약간의 작업과 맞춤형 조정이 필요했지만 모두 해결한 끝에 지금과 같은 Sense 구문이 탄생하였습니다(Clint씨에게 감사드립니다!).

Marvel 시대

하루 일과 중 주된 업무는 Elasticsearch용 관리 및 모니터링 솔루션인 Marvel을 개발하는 것이었습니다(참고 메모: Marvel은 완전히 새로 제작됨(Shield, Watcher, Marvel 2.0.0 GA 출시" 참조)). 개발 용도에는 Marvel은 무료로 지원할 예정이었고, Marvel에 Sense를 통합하는 것은 합리적이었습니다. 그래서 일과 중 Sense에 매달렸고 더 많은 사용자들 앞에 내놓을 수 있었습니다. 이는 또한, 브라우저 환경(Browser Land)의 모든 최신 기술 정보를 나에게 알려주고 가르쳐주고 정리할 수 있도록 도와준 진정한JavaScript 개발자들이 Sense 개발 작업에 함께 했음을 의미합니다.

이 기간에 Sense를 두 차례 다시 작성하였습니다. 특히, URL과 JSON용으로 두 개의 별도 추천 엔진을 다시 작성하였고 두 가지 컨텍스트 모두에서 작동할 수 있는 하나의 제안 엔진도 구축하였으며, 더불어 세 번째 컨텍스트: URL 매개변수를 허용하였습니다. 새로운 엔진도 여러 가지 제안 컨텍스트를 유지 관리하기에 충분한 지능형 엔진입니다. 예를 들어, _search API정렬 매개변수를 생각해보십시오.

GET _search
{
  "sort": [
     "timestamp": "desc",
     "price": {
        "order": "desc".
        "missing": "last"
     },
     "nested_filter": { "term": { ... }},
     "_score"
  ]
}
        

사용자의 현재 위치에 따라 Sense가 단순한 값(예: _score), 보다 복잡한 구조(예: ordermissing), 더 나아가 임의 필터(예:nested_filter)를 제안할 필요가 있습니다. 이러한 제안 경로는 모두 한꺼번에 처리되며 관련성이 없어지면 제외됩니다.

Sense 2.0 발표

Marvel 1.x는 우수한 데이터 탐색 대시보드 제작 도구였던 Kibana 3.0을 기반으로 구축되었습니다. 하지만 Kibana 팀에는 더 큰 비전이 있었습니다. Kibana 4.x는 사람들이 백엔드로서 Elasticsearch으로 작동할 수 있는 UI 앱을 간편하게 구축할 수 있는 범용 애플리케이션 플랫폼으로 설계되었습니다. 실제로Marvel 2.0은 Kibana를 플랫폼으로 사용할 수 있는 최초의 앱입니다.

한 발 뒤로 물어나 Elasticsearch API와 통신하는 범용 콘솔인 Sense를 검토한 끝에 Kibana 앱 비전과 완전히 일치한다는 사실을 깨달았습니다. 드디어 오늘 개발과 제작에 무료로 사용할 수 있는오픈 소스 Kibana 앱으로 Sense 2.0을 발표하게 되어 매우 기쁩니다.

그림 2. Sense 2.0 스크린샷

Sense 2.0


출시 하이라이트

Sense 2.0에 뛰어난 개선사항이 새로 추가되었습니다. 몇 가지를 소개하면 다음과 같습니다. 전체 목록은 여기에서 확인하시기 바랍니다.

Elasticsearch 2.0
Elasticsearch 2.0을 지원하고 새로운 파이프라인 어그리게이션에 대한 자동 완성 제안을 포함하는 Sense 기술 자료를 업데이트하였습니다.
여러 개의 요청 실행

테스트하거나 뭔가를 시도해볼 때 동일한 순서의 명령들을 반복해야 하는 경우가 자주 발생합니다. 이제 모두 Sense에서 작성하여 필요한 요청을 여러 개 선택한 다음 Elasticsearch로 제출하면 됩니다.

그림 3. 여러 요청 제출

multiple requests

Sense 요청들을 하나씩 Elasticsearch로 보내고, Elasticsearch가 응답하면 오른쪽 창에 출력해줍니다. 버그와 문제를 수정할 때나 다양한 상황에서 여러 가지 쿼리 조합을 시도할 때 매우 편리합니다.

여러 복사-붙여넣기 요청

여러 요청을 선택하면 자동으로 서식을 지정하여 한 번에 cURL로 복사할 수도 있습니다. 예를 들면 다음과 같습니다.

그림 4. cURL로서 여러 개의 요청 복사

copy as curl

이 기능은 명령어들을 다음과 같이 클립보드에 복사 합니다.

# Delete all data in the `website` index
curl -XDELETE "http://localhost:9200/website"
# Create a document with ID 123
curl -XPUT "http://localhost:9200/website/blog/123" -d'
{
  "title": "My first blog entry",
  "text":  "Just trying this out...",
  "date":  "2014/01/01"
}'
                

물론 여러 cURL 명령도 붙여넣을 수 있고, Sense는 당연히 여러 명령을 정확히 분석합니다.


전망

추가 작업이 남아 있다고 생각하여 우선 beta 버전으로 Sense 2.0.0을 출시하고 있지만 GA가 곧 출시될 것이라고 생각합니다.

Sense 2.0에 대해 자세히 알고 싶거나 시험해보려면 새로 공개되는문서를 확인해보시기 바랍니다. 의견이 있으시면 포럼 을 통해 올려주시고, 제안사항이나 발견된 버그가 있으면문제를 공개해주시기 바랍니다.