25E. CloudSearch ๊ฒ์ ๋๋ฉ์ธ ์๋ํฌ์ธํธ ์ฃผ์ ํ์ฉํ๊ธฐ
25E. 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"]๋ก ํํํฉ๋๋ค.
์ด ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฒ์ ๋๋ฉ์ธ์ ์์ฑํ๊ฒ ์ต๋๋ค.
CloudSearch ๊ฒ์ ๋๋ฉ์ธ์ ์์ฑํฉ๋๋ค.
- Search Domain Name: ๊ฒ์ ๋๋ฉ์ธ ์ด๋ฆ์ ๋๋ค. .(์ )์ ์ ๋ ฅํ ์ ์์ต๋๋ค. exampledomain2๋ฅผ ์ ๋ ฅํฉ๋๋ค.
- Desired Instance Type: ๊ฒ์ ๋๋ฉ์ธ์ด ์์ฑํ ๊ฒ์ ์ธ์คํด์ค ์ ํ์ ๋๋ค. ์ค์ ํ์ง ์์ผ๋ฉด search.m1.small์ ์ฌ์ฉํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ์ฌ์ฉํฉ๋๋ค.
- Desired Replication Count: ๊ฒ์ ๋๋ฉ์ธ์ ๋ณต์ ๊ฐ์์ ๋๋ค. ๋ฐ์ดํฐ ์ ์ฅ ์ฉ๋๊ณผ๋ ์๊ด ์๊ณ , ๊ฒ์ ํธ๋ํฝ์ด ๋ง์ ๋ ์ค์ ํฉ๋๋ค. 5๊ฐ๊น์ง ์ค์ ํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ์ฌ์ฉํฉ๋๋ค.
- Desired Partition Count: ์์ฑํ ๊ฒ์ ํํฐ์ ๊ฐ์์ ๋๋ค. ๊ฒ์ ์ธ์คํด์ค search.m2.2xlarge์์๋ง ์ค์ ํ ์ ์๊ณ , 10๊ฐ๊น์ง ์์ฑํ ์ ์์ต๋๋ค.
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: ๋ค์ ํ์ด์ง์์ ์ฌ์ฉ์๊ฐ ์ธ๋ฑ์ค๋ฅผ ์ง์ ์ ์ํฉ๋๋ค.
ํ์ผ์ ์ด์์ผ๋ฉด Create New Search Domain์ [Continue]
๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
.data.json
์ ๋ถ์ํ์ฌ ์ธ๋ฑ์ค๊ฐ ์์ฑ๋์์ต๋๋ค. Analysis Scheme์์ Address, Name, rank๋ฅผ Korean์ผ๋ก ์ค์ ํฉ๋๋ค. Phone๊ณผ ๊ฐ์ด ์ซ์๋ก๋ง ๋ ํ๋๋ Korean์ผ๋ก ์ค์ ํ์ง ์์๋ ์๊ด์์ต๋๋ค.
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 ์ฝ์์์๋ง ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฆฌ๊ณ ๊ฒ์ํ ์ ์์ต๋๋ค.
์ง๊ธ๊น์ง ์ค์ ํ ๋ด์ฉ์ ์ด์์ด ์๋์ง ํ์ธํฉ๋๋ค.
CloudSearch ๊ฒ์ ๋๋ฉ์ธ ์์ฑ์ด ์์๋์์ต๋๋ค.
CloudSearch ๊ฒ์ ๋๋ฉ์ธ ๋ชฉ๋ก์ ๋ฐฉ๊ธ ์์ฑํ ๊ฒ์ ๋๋ฉ์ธ(exampledomain2
)์ด ์ถ๊ฐ๋์์ต๋๋ค.
CloudSearch ๊ฒ์ ๋๋ฉ์ธ ์์ฑ์ด ์๋ฃ๋์์ต๋๋ค.
์์ง ์์ฑ๋ ๊ฒ์ ์ธ์คํด์ค ๊ฐ์๊ฐ 0๊ฐ๋ผ๊ณ ํ์๋ฉ๋๋ค. 1๋ถ ์ ๋ ๊ธฐ๋ค๋ฆฐ ํ [Refresh]
๋ฒํผ์ ํด๋ฆญํ๋ฉด ์์ฑ๋ ๊ฒ์ ์ธ์คํด์ค๊ฐ ํ์๋ฉ๋๋ค.
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]
๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
๊ฒ์ ๋๋ฉ์ธ(exampledomain2
)์์ [Run a Test Search]
๋ฅผ ํด๋ฆญ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ Search ๋ถ๋ถ์ ํ๊ธธ๋
์ ์
๋ ฅํ๊ณ [Go]
๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
์์ธํ ๋ด์ฉ์ ๋ค์ ๋งํฌ๋ฅผ ์ฐธ์กฐํ๊ธฐ ๋ฐ๋๋๋ค.
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.html์์ ๋ฐ์ ์ ์์ต๋๋ค.
:::
๋ค์ ๋ช
๋ น์ ์
๋ ฅํ์ฌ ๊ฒ์ ๋๋ฉ์ธ์์ ๊ฒ์์ ํฉ๋๋ค (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์ธ ๊ฒ์ ๊ฒ์ํ์ต๋๋ค. ๊ฒ์ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์๋ ๋งํฌ๋ฅผ ์ฐธ์กฐํ๊ธฐ ๋ฐ๋๋๋ค.
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 ๋ฉ์๋์ ๋๋ค. ๋ฐ๋ผ์ ์น ๋ธ๋ผ์ฐ์ ์์ ์๋ํฌ์ธํธ ์ฃผ์๋ก ๊ฒ์์ ํ ์ ์์ต๋๋ค.