Skip to main content

25E. CloudSearch 검색 도메인 엔드포인트 주소 활용하기

About 3 minAWScrashcoursepyrasisawsamazon-web-services

25E. CloudSearch 검색 도메인 엔드포인트 주소 활용하기 관련

목차

아마존 웹 서비스를 다루는 기술

25장 - 5. CloudSearch 검색 도메인 엔드포인트 주소 활용하기

아마존 웹 서비스를 다루는 기술

지금까지 AWS 콘솔을 이용해서 CloudSearch를 사용해보았습니다. 이번에는 검색 도메인의 엔드포인트 주소를 이용하여 문서를 올리고 검색을 해보겠습니다.


CloudSearch 인덱스 구조를 설계하고 검색 도메인 생성하기

검색을 위해 간단한 인덱스 구조를 설계합니다. 이름, 주소, 핸드폰 번호, 직급, 나이 정보를 표현한 문서를 예로 들겠습니다. 메모장이나 기타 텍스트 편집기를 열고 다음과 같이 작성한 뒤 data.json으로 저장합니다.

data.json
[
  {
    "type": "add",
    "id": "1",
    "version": 1,
    "lang": "ko",
    "fields": {
      "name": "홍길동",
      "address": "서울시 종로구",
      "phone": "010-1234-5678",
      "rank": "대리",
      "age": 27
    }
  },
  {
    "type": "add",
    "id": "2",
    "version": 1,
    "lang": "ko",
    "fields": {
      "name": "이율곡",
      "address": "서울시 성북구",
      "phone": "010-4567-8901",
      "rank": "과장",
      "age": 35
    }
  }
]

이와 같은 형식을 SDFSearch Data Format이라고 합니다.

  • type: 문서를 추가할 때에는 add, 삭제할 때에는 delete입니다. 문서의 내용을 수정하려면 type은 add로 설정하고 수정할 문서의 id를 지정합니다. 그리고 version 숫자를 높이면 됩니다.
  • id: 각 데이터의 고윳값입니다. 다른 데이터와 중복될 수 없고, 내용을 수정하거나 삭제할 때 사용됩니다. 영문 소문자 a 부터 z까지, 숫자 0부터 9까지, _(밑줄) 문자를 사용할 수 있으며 24자리까지입니다.
  • version: 문서의 버전입니다. 문서의 내용을 수정할 때 사용됩니다.
  • lang: 문서의 언어입니다. 영어는 en, 한국어는 ko를 사용합니다.
  • fields: 필드 목록입니다. 필드가 하나 이상 포함되어야 합니다.
    • 필드명: 64글자까지이며 영문 소문자, _(밑줄) 문자, 숫자를 사용할 수 있습니다. 필드명은 밑줄 문자로 시작할 수 없습니다.
    • 필드 자료형
      • 문자열: "hello"로 표현합니다.
      • 숫자: 1 또는 0.1로 표현합니다.
      • 배열: [1, 2, 3,] 또는 ["hello", "world"]로 표현합니다.

이 데이터를 기반으로 검색 도메인을 생성하겠습니다.

<FontIcon icon="iconfont icon-select"/>를 클릭한 뒤 <FontIcon icon="iconfont icon-select"/> 버튼을 클릭합니다.
[CloudSearch Dashboard]를 클릭한 뒤 [Create a New Domain] 버튼을 클릭합니다.

CloudSearch 검색 도메인을 생성합니다.

  • Search Domain Name: 검색 도메인 이름입니다. .(점)은 입력할 수 없습니다. exampledomain2를 입력합니다.
  • Desired Instance Type: 검색 도메인이 생성할 검색 인스턴스 유형입니다. 설정하지 않으면 search.m1.small을 사용합니다. 기본값 그대로 사용합니다.
  • Desired Replication Count: 검색 도메인의 복제 개수입니다. 데이터 저장 용량과는 상관 없고, 검색 트래픽이 많을 때 설정합니다. 5개까지 설정할 수 있습니다. 기본값 그대로 사용합니다.
  • Desired Partition Count: 생성할 검색 파티션 개수입니다. 검색 인스턴스 search.m2.2xlarge에서만 설정할 수 있고, 10개까지 생성할 수 있습니다.
설정이 완료되었으면 <FontIcon icon="iconfont icon-select"/> 버튼을 클릭합니다.
설정이 완료되었으면 [Continue] 버튼을 클릭합니다.

CloudSearch 검색 도메인의 인덱스를 정의합니다. 방금 작성한 data.json을 이용하겠습니다. Analyze sample file(s) from my local machine을 선택하고 파일 선택 버튼을 클릭합니다.

  • Analyze sample file(s) from my local machine: 사용자의 컴퓨터에 저장된 데이터를 분석하여 인덱스를 생성합니다.
  • Analyze sample object(s) from Amazon S3: S3 버킷에 저장된 데이터를 분석하여 인덱스를 생성합니다.
  • Analyze sample item(s) from Amazon DynamoDB: DynamoDB에 저장된 데이터를 분석하여 인덱스를 생성합니다.
  • Use a predefined configuration: 미리 정의된 설정을 사용합니다.
  • Manual configuration: 다음 페이지에서 사용자가 인덱스를 직접 정의합니다.
CloudSearch 검색 도메인의 인덱스를 정의할 데이터 선택
CloudSearch 검색 도메인의 인덱스를 정의할 데이터 선택
파일 열기 창에서 방금 작성했던 <FontIcon icon="iconfont icon-json"/> 파일을 선택하고 <FontIcon icon="iconfont icon-select"/> 버튼을 클릭합니다.
파일 열기 창에서 방금 작성했던 data.json 파일을 선택하고 [열기] 버튼을 클릭합니다.

파일을 열었으면 Create New Search Domain의 [Continue] 버튼을 클릭합니다.

.data.json을 분석하여 인덱스가 생성되었습니다. Analysis Scheme에서 Address, Name, rank를 Korean으로 설정합니다. Phone과 같이 숫자로만 된 필드는 Korean으로 설정하지 않아도 상관없습니다.

설정이 완료되었으면 <FontIcon icon="iconfont icon-select"/> 버튼을 클릭합니다.
설정이 완료되었으면 [Continue] 버튼을 클릭합니다.

CloudSearch 검색 도메인의 접근 정책을 설정합니다. 데이터 업로드용 엔드포인트 주소와 검색용 엔드포인트 주소에 대한 정책입니다. Search and Suggester service: Allow all. Document Service: Account owner only를 클릭합니다.

  • Search and Suggester service: Allow all, Document Service: Account owner only: 검색은 모두 허용하고, CloudSearch를 생성한 AWS 계정만 데이터를 업로드 할 수 있습니다.
  • Allow everyone access to all services: 검색, 데이터 업로드를 모두 허용합니다. 아무나 데이터를 올릴 수 있으므로 권장하지 않습니다.
  • Deny everyone access to all services: 검색, 데이터 업로드를 모두 차단합니다. AWS 콘솔에서만 데이터를 올리고 검색할 수 있습니다.
설정이 완료되었으면 <FontIcon icon="iconfont icon-select"/> 버튼을 클릭합니다.
설정이 완료되었으면 [Continue] 버튼을 클릭합니다.

지금까지 설정한 내용에 이상이 없는지 확인합니다.

이상이 없으면 <FontIcon icon="iconfont icon-select"/> 버튼을 클릭합니다
이상이 없으면 [Confirm] 버튼을 클릭합니다

CloudSearch 검색 도메인 생성이 시작되었습니다.

<FontIcon icon="iconfont icon-select"/> 버튼을 클릭합니다.
[OK] 버튼을 클릭합니다.

CloudSearch 검색 도메인 목록에 방금 생성한 검색 도메인(exampledomain2)이 추가되었습니다.

완전히 생성되기까지 약 10분정도 소요됩니다.
완전히 생성되기까지 약 10분정도 소요됩니다.

CloudSearch 검색 도메인 생성이 완료되었습니다.

검색 도메인()의 세부 내용에 검색 엔드포인트 주소, 문서 엔드포인트 주소가 표시됩니다.
검색 도메인(exampledoamin2)의 세부 내용에 검색 엔드포인트 주소, 문서 엔드포인트 주소가 표시됩니다.

아직 생성된 검색 인스턴스 개수가 0개라고 표시됩니다. 1분 정도 기다린 후 [Refresh] 버튼을 클릭하면 생성된 검색 인스턴스가 표시됩니다.


CloudSearch 검색 도메인 엔드포인트로 데이터 올리기

25장 - 5.2. CloudSearch 검색 도메인 엔드포인트로 데이터 올리기

아마존 웹 서비스를 다루는 기술

AWS CLI를 사용하여 검색 도메인의 엔드포인트로 데이터를 올려보겠습니다. AWS CLI를 설치하고 설정하는 방법은 '30.2 AWS CLI 설치하기'를 참조하기 바랍니다.

다음 명령을 입력하여 data.json 파일을 검색 도메인에 올립니다.

  • cloudsearchdomain: CloudSearch 검색 도메인용 명령입니다.
  • --endpoint-url: 여려분들이 생성한 검색 도메인의 엔드포인트 주소를 입력합니다. doc-<검색 도메인 이름>-<검색 도메인 ID>-ap-northeast-1.cloudsearch.amazonaws.com 형식입니다.
  • upload-documents: 문서를 올리는 명령입니다.
  • --content-type: HTTP 헤더를 설정합니다. JSON 형태의 파일이므로 application/json으로 설정합니다.
  • --documents: 올릴 파일명을 설정합니다. 여기서는 data.json을 입력합니다.
aws cloudsearchdomain --endpoint-url http://doc-exampledomain2-7fq636cmiddehdtdfpa3d3s454.ap-northeast-1.cloudsearch.amazonaws.com\
upload-documents --content-type "application/json" --documents <FontIcon icon="iconfont icon-json"/>`data.json`

검색 도메인(exampledomain2)에서 [Refresh] 버튼을 클릭합니다.

잠시 기다리면 Searchable Documents가 2로 표시됩니다. <FontIcon icon="iconfont icon-json"/>에 포함된 문서 2개가 정상적으로 올라갔습니다.
잠시 기다리면 Searchable Documents가 2로 표시됩니다. data.json에 포함된 문서 2개가 정상적으로 올라갔습니다.

검색 도메인(exampledomain2)에서 [Run a Test Search]를 클릭 합니다. 그리고 Search 부분에 홍길동을 입력하고 [Go] 버튼을 클릭합니다.

이제 홍길동의 문서가 검색됩니다.
이제 홍길동의 문서가 검색됩니다.

자세한 내용은 다음 링크를 참조하기 바랍니다.

http://docs.aws.amazon.com/cloudsearch/latest/developerguide/uploading-data.htmlopen in new window


CloudSearch 검색 도메인 엔드포인트 주소로 검색하기

25장 - 5.3. CloudSearch 검색 도메인 엔드포인트 주소로 검색하기

아마존 웹 서비스를 다루는 기술

이번에는 AWS 콘솔이 아닌 검색 도메인의 엔드포인트 주소로 검색을 해보겠습니다. 이때 HTTP 메서드를 손쉽게 사용할 수 있는 cURL을 사용하겠습니다. 보통 Linux 배포판이나 Mac OS X에는 cURL이 기본적으로 설치되어 있습니다. 설치되어 있지 않다면 다음 명령으로 설치할 수 있습니다.

:: tabs

@tab:active Amazon Linux, CentOS

sudo yum install curl

@tab Ubuntu Linux

sudo apt-get install curl

@tab Windows

Windows용은 http://curl.haxx.se/download.htmlopen in new window에서 받을 수 있습니다.

:::

다음 명령을 입력하여 검색 도메인에서 검색을 합니다 (Windows에서는 curl.exe를 실행합니다).

  • -X GET: HTTP GET 메서드를 사용합니다.
  • search-<검색 도메인 이름>-<검색 도메인 ID>-ap-northeast-1.cloudsearch.amazonaws.com/2013-01-01/search: 검색용 엔드포인트 주소입니다. 여러분들이 생성한 검색 도메인의 엔드포인트 주소를 입력합니다. 맨 마지막에 /2013-01-01/search에서 2013-01-01은 엔드포인트 API의 버전입니다. 다른 날짜로 바꾸면 동작이 되지 않으니 주의하기 바랍니다.
  • ?q=010-1234-5678: 검색어입니다. 여기서는 핸드폰 번호가 010-1234-5678인 것을 검색했습니다. 검색 방법에 대한 자세한 내용은 아래 링크를 참조하기 바랍니다.
    http://docs.aws.amazon.com/cloudsearch/latest/developerguide/search-api.htmlopen in new window
curl -X GET search-exampledomain2-7fq636cmiddehdtdfpa3d3s454.ap-northeast-1.cloudsearch.amazonaws.com/2013-01-01/search?q=010-1234-5678
#
# {"status":{"rid":"scjNw+QoCwqYmgY=","time-ms":11},"hits":{"found":1,"start":0,"hit":[{"id":"1","fields":{"name":"홍길동","age":"27","rank":"대리","phone":"010-1234-5678","address":"서울시 종로구"}}]}}

터미널, 명령 프롬프트에서 UTF-8 한글 입력

Linux의 터미널, Windows의 명령 프롬프트에서 UTF-8로 인코딩된 한글을 입력하는 것은 상당히 까다롭습니다. 그래서 숫자로 된 핸드폰 번호로 검색했습니다. 실제로 검색용 엔드포인트 주소를 사용할 때는 프로그래밍 언어를 통해서 사용하게 됩니다.

한글을 검색할 때는 꼭 UTF-8로 인코딩해야 합니다. 특히 검색처럼 엔드포인트 URL에 GET 메서드를 이용할 경우 UTF-8에 URL 인코딩(URL Encode)을 해주어야 합니다.

HTTP GET 메서드는 우리가 인터넷을 할 때 흔히 사용하는 HTTP 메서드입니다. 따라서 웹 브라우저에서 엔드포인트 주소로 검색을 할 수 있습니다.

이 때는 한글을 그대로 사용할 수 있습니다.
이 때는 한글을 그대로 사용할 수 있습니다.

이찬희 (MarkiiimarK)
Never Stop Learning.