---
title: "Cloud Search 개요"
slug: "analytics-cloudsearch"
tags: ["Cloud Search"]
updated: 2026-10-22T10:46:51Z
published: 2026-10-22T10:46:51Z
canonical: "api-gov.ncloud-docs.com/analytics-cloudsearch"
---
> ## Documentation Index
> Fetch the complete documentation index at: https://api-gov.ncloud-docs.com/llms.txt
> Use this file to discover all available pages before exploring further.
# Cloud Search 개요
## 개요
Cloud Search는 네이버 클라우드 플랫폼의 API Gateway를 통해 API를 제공합니다. API 인증을 위해서 Access Key, Secret Key가 필요하며, API Key 생성 및 사용방법은 [API Gateway 사용가이드 - API 호출하기](https://guide-gov.ncloud-docs.com/docs/api-gateway-overview)을 참고하시기 바랍니다. Access Key와 Secret Key에 관해서는 [NAVER Cloud Platform API 사용 가이드 - 인증키 생성하기](https://api-gov.ncloud-docs.com/release-20261022/docs/common-ncpapi-ncpapi#%EC%9D%B8%EC%A6%9D%ED%82%A4%EC%83%9D%EC%84%B1%ED%95%98%EA%B8%B0)을 참고하시기 바랍니다.
Cloud Search는 다양한 API를 제공하고 있으며 Swagger 페이지를 통해서 API 스펙을 확인하고 간단한 테스트를 수행할 수 있습니다. Cloud Search의 Swagger 문서는 아래 과정을 통해서 접근할 수 있습니다.
1. 콘솔에서 **Menu** > **All Services** > **API Gateway** 메뉴를 차례대로 클릭해 주십시오.
2. **Published APIs** > **CloudSearch** > **Catalog**를 차례대로 클릭해 주십시오.
3. CloudSearch 선택 후 하단의 API 설명서 선택해 주십시오.
- 이때 노출되는 화면이 Cloud Search의 Swagger 페이지이며, 페이지 상단에 표시되는 링크인 `https://cloudsearch.apigw.gov-ntruss.com/CloudSearch/real`이 Cloud Search의 API 주소입니다.
## 공통설정
### Cloud Search API URL
```
https://cloudsearch.apigw.gov-ntruss.com/CloudSearch/real
```
### 요청 헤더
| 헤더 명 | 설명 |
| --- | --- |
| x-ncp-apigw-timestamp | 1970년 1월 1일 00:00:00 협정 세계시(UTC)부터의 경과 시간을 **밀리초(Millisecond)로 나타내며 API Gateway 서버와 시간차가 5분 이상 나는 경우 유효하지 않은 요청으로 간주** `x-ncp-apigw-timestamp:{Timestamp}` |
| x-ncp-iam-access-key | 네이버 클라우드 플랫폼 포털에서 발급받은 Access Key ID 값 `x-ncp-iam-access-key:{Sub Account Access Key}` |
| x-ncp-apigw-signature-v2 | Access Key ID 값 과 Secret Key 로 암호화한 서명 `x-ncp-apigw-signature-v2:{API Gateway Signature}` |
| Content-Type | Request body content type을 application/json 으로 지정 `Content-Type: application/json` |
## 검색 서비스 생성 예제
---
본 예제에서는 세계 여러 자동차 모델의 정보를 제공하는 검색 포털 서비스를 만드는 것을 예제로 API 사용법을 설명하겠습니다.
도메인을 생성하기에 앞서, 도메인 생성 시 설정할 검색 설정(Schema)을 정의해보겠습니다.
## 검색 설정 생성
자동차 모델 각각은 아래의 정보를 가지고 있다고 가정하겠습니다. 검색 엔진에서는 검색의 대상을 나타내는 정보의 묶음을 **문서**라고 지칭합니다. 즉, 아래 정보의 묶음이 하나의 문서가 됩니다.
- docid : 개별 문서의 key가 되는 항목
- brand : 자동차 브랜드
- name : 자동차명
- price : 가격
- type : 차종
### 섹션
여기에서 각 항목을 Cloud Search에서는 **섹션**이라 부릅니다. 그리고, 그 중에 이 문서를 지칭할 수 있는 섹션, 즉 key가 되는 섹션을 **메인 섹션**이라 부릅니다. 예를 들면, 아래의 json은 하나의 문서이며, 이 문서의 key는 "car-10001"입니다.
```
{
"docid": "car-10001",
"brand": "현대",
"name": "2018 싼타페",
"price": "2815",
"type": "중형"
}
```
이와 같은 문서를 넣기 위해서는 docid, brand, name, price, type을 섹션으로 추가해야 합니다.
일반 문자열인 경우에는 섹션의 데이터 타입을 생략할 수 있으며, 그렇지 않은 경우에는 float, uint8, uint16, uint32, uint64, int8, int16, int32, int64, string, mstring, muint8, muint32 중의 하나로 지정해야 합니다.
각 섹션에는 다양한 특성을 부여할 수 있는데, price라는 섹션에 대해 dp_price라는 이름을 부여하면 [Document 검색](/docs/analytics-cloudsearch-searchdocument)의 부가적인 검색 기능에 활용할 수 있습니다.
```
{
"docProperties":[
{
"type":"uint32",
"name":"dp_price"
}
],
"name":"price"
}
```
### 색인
자동차를 검색할 때 브랜드명만을 이용해서 검색하는 경우가 있고 브랜드명, 자동차명, 차종을 통틀어서 검색하는 경우가 있습니다. 이와 같이 용도에 따라 검색하는 대상이 되는 섹션이나 검색의 특성을 달리해서 검색하고자 할 때에는 목적에 맞게 각각 색인을 생성해야 합니다. 특별히 이런 구분을 하고 싶지 않다면 모든 섹션을 넣어서 색인을 만들면 됩니다.
아래의 예제는 brand와 name 섹션을 위한 brand_name이라는 색인을 생성합니다.
색인 생성시 다양한 언어의 형태소 분석기를 설정할 수 있습니다. 본 예제에서는 brand_name 색인에 대해 한글로 형태소 분석기를 지정합니다. 다른 언어의 형태소 분석 지원 여부는 [형태소 분석 옵션 조회 - 가능한 언어 목록](/docs/analytics-cloudsearch-gettokenizerlist) 통해 확인이 가능합니다.
아래와 같이 섹션과 색인을 정의한 검색 설정, 즉 [Schema](/docs/common-apidatatype-csschema)를 [Schema 검증](/docs/analytics-cloudsearch-checkschemavalidator) 요청에 보내면 정상 여부를 알 수 있습니다.
```
{
"document": {
"primarySectionName": "docid",
"sections": [
{
"name": "docid"
},
{
"name": "brand"
},
{
"name": "name"
},
{
"docProperties": [
{
"type": "uint32",
"name": "dp_price"
}
],
"name": "price"
},
{
"docProperties": [
{
"type": "string",
"name": "dp_type"
}
],
"name": "type"
}
],
"indexes": [
{
"documentTermWeight": "sum_wgt",
"buildInfos": [
{
"indexProcessors": [
{
"type": "hanaterm",
"method": "sgmt",
"option": "+korea +josacat +eomicat"
}
],
"sectionTermWeight": "1.0 * stw_2p(tf, 0.5, 0.25, 0., length / 128.0)",
"sections": ["brand", "name"],
"name": "index_build"
}
],
"name": "brand_name"
}
]
}
}
```
아래와 같이 valid라는 응답이 오지 않는다면 Schema를 수정해야 합니다.
```
{
"status": "valid",
"message": "OK",
"response": "{\"status\":{\"code\":0,\"message\":\"ok\"}}\n"
}
```
위 요청에서 valid라는 응답을 받았다면, [Domain 생성](/docs/analytics-cloudsearch-createdomain) 요청시 작성한 검색 설정을 설정해야 합니다.
## 도메인 생성
아직 포털 서비스를 개발하는 중이므로 car_dev라는 도메인을 생성하겠습니다. Cloud Search 사용자는 추후 stage, production 환경을 구축할 때에는 car_stage, car_production이라는 도메인을 생성하여 환경을 구분한다면 개발, 테스트, 운영이 용이할 것입니다. Cloud Search에서는 이와 같이 **도메인**이라는 개념을 이용하여 환경을 구분하고 있습니다.
위에서 사용한 검색 설정과 [Domain 생성](/docs/analytics-cloudsearch-createdomain) API를 참고하여 아래 예시와 같이 json으로 parameter를 정의하여 POST로 /v1/domain를 호출하면 car_dev라는 도메인이 생성됩니다.
```
{
"name": "car_dev",
"type": "small",
"indexerCount": 1,
"searcherCount": 1,
"description": "search engine for cars",
"schema":{
"document":{
"primarySectionName":"docid",
"sections":[
{
"name":"docid"
},
{
"name":"brand"
},
{
"name":"name"
},
{
"docProperties":[
{
"type":"uint32",
"name":"dp_price"
}
],
"name":"price"
},
{
"docProperties":[
{
"type":"string",
"name":"dp_type"
}
],
"name":"type"
}
],
"indexes":[
{
"documentTermWeight":"sum_wgt",
"buildInfos":[
{
"indexProcessors":[
{
"type":"hanaterm",
"method":"sgmt",
"option":"+english +revert +korea +josacat +eomicat"
}
],
"sectionTermWeight":"1.0 * stw_2p(tf, 0.5, 0.25, 0., length / 128.0)",
"sections":[
"brand",
"name"
],
"name":"index_build"
}
],
"name":"brand_name"
}
]
}
}
}
```
## 도메인 조회
도메인이 생성된 것을 확인하기 위해 [Domain 조회](/docs/analytics-cloudsearch-getdomain) API를 호출하면 아래와 같은 응답을 받을 수 있습니다. 이미 생성된 다른 도메인이 있다면 여러 개의 도메인에 대한 응답을 받습니다.
```
{
"name": "car_dev",
"description": "search engine for cars",
"domainStatus": "RUNNING",
"containerChangeable": "ENABLE",
"schemaChangeable": "ENABLE",
"autoCompleteChangeable": "ENABLE",
"type": "small",
"indexerCount": 1,
"searcherCount": 1,
"schema": {
"document": {
"primarySectionName": "docid",
"sections": [
{
"name": "docid"
},
{
"name": "brand"
},
{
"name": "name"
},
{
"docProperties": [
{
"type": "uint32",
"name": "dp_price"
}
],
"name": "price"
},
{
"docProperties": [
{
"type": "string",
"name": "dp_type"
}
],
"name": "type"
}
],
"indexes": [
{
"documentTermWeight": "sum_wgt",
"buildInfos": [
{
"indexProcessors": [
{
"type": "hanaterm",
"method": "sgmt",
"option": "+english +revert +korea +josacat +eomicat"
}
],
"sectionTermWeight": "1.0 * stw_2p(tf, 0.5, 0.25, 0., length / 128.0)",
"sections": [
"brand",
"name"
],
"name": "index_build"
}
],
"name": "brand_name"
}
]
}
},
"autocompleteSchema": null,
"createdDate": "2019-03-05T08:15:11.587Z",
"updatedDate": "2019-03-05T08:15:18.000Z"
}
```
## 문서 업로드
새로 생성한 도메인 car_dev에 문서를 추가하겠습니다. [예제 파일 다운로드](https://cdn.document360.io/777812c9-2b5d-44f2-bbd9-3dcc48928c0f/Images/Documentation/cloudsearch-ex.json?sv=2026-02-06&spr=https&st=2026-11-07T17%3A00%3A52Z&se=2026-11-07T18%3A00%3A52Z&sr=c&sp=r&sig=BHSzJDjRgjHAR0GvRUQGLTtDxy8y1N9%2F1DyXVayBT28%3D)를 참고하시기 바랍니다. 문서는 필요에 따라 insert, update, upsert, delete할 수 있으며 자세한 사용법은 [Document 관리](/docs/analytics-cloudsearch-managedocument)를 참고하시기 바랍니다.
하나의 요청으로 여러 개의 문서를 추가할 수 있으며, insert, update, upsert, delete 요청을 조합하여 한꺼번에 여러 가지 요청을 보낼 수도 있습니다.
[Document 관리](/docs/analytics-cloudsearch-managedocument)에 요청을 보내서 문서를 insert, update, upsert, delete할 수 있습니다.
다음은 3개의 문서를 추가하기 위한 요청입니다. car_dev 도메인에 추가할 것이므로 /v1/domain/car_dev/document/manage를 호출하면 됩니다.
```
{
"requests": [
{
"type": "insert",
"key": "car-10001",
"content": {
"docid": "car-10001",
"brand": "현대",
"name": "2018 싼타페",
"price": "2815",
"type": "중형"
}
},
{
"type": "insert",
"key": "car-10002",
"content": {
"docid": "car-10002",
"brand": "현대",
"name": "2018 그랜저",
"price": "2615",
"type": "중형"
}
},
{
"type": "insert",
"key": "car-3",
"content": {
"docid": "car-3",
"brand": "쉐보레",
"name": "2018 말리부",
"price": "2388",
"type": "중형"
}
}
]
}
```
## 검색
이제 car_dev에 추가된 문서를 검색할 수 있습니다. 검색 API에 대한 상세한 설명은 [Document 검색](/docs/analytics-cloudsearch-searchdocument)을 참고하시기 바랍니다.
간단히 brand명으로 검색을 해보겠습니다. 아래와 같이 요청을 만든 후 POST로 /v1/domain/car_dev/document/search를 호출하면 됩니다.
```
{
"search": {
"brand_name": {
"main": {
"query": "현대"
}
}
}
}
```
아래와 같은 결과를 얻을 수 있습니다.
```
{
"type": "response",
"version": "1.1.3",
"status": 200,
"time_zone": "+09:00",
"elapsed_time": 0.000787,
"term": {
"brand_name": {
"main": {
"term_count": 1,
"term_list": [
"현대"
]
}
}
},
"result": {
"start": 1,
"display": 20,
"ranking": "clous",
"sort_by": "qds",
"total_count": 2,
"removed_count": 0,
"item_count": 2,
"items": [
{
"_rank": 1,
"_key": "car-10001",
"_qds": 0.8729686141014099,
"brand": "현대",
"docid": "car-10001",
"name": "2018 싼타페",
"price": 2815,
"type": "중형"
},
{
"_rank": 2,
"_key": "car-10002",
"_qds": 0.8729686141014099,
"brand": "현대",
"docid": "car-10002",
"name": "2018 그랜저",
"price": 2615,
"type": "중형"
}
]
}
}
```
이에 추가적으로 [자동 완성 설정](/docs/analytics-cloudsearch-putautocomplete) 및 [불용어 정책 설정](/docs/analytics-cloudsearch-poststopword)을 지원합니다. 자세한 설명은 해당 페이지를 참조해주세요.