네이버 웹문서 검색 API 키 발급·설정 절차

여행사 홈페이지 URL 자동·수동 수집(api/travel-agency-collect-websites.php)에 사용합니다. 문서 버전 2026-04-13

전체 순서(체크리스트)
  1. 네이버 개발자센터에서 앱 등록 → 검색 사용 → 웹문서 검색 ON → Client ID·Secret 확인
  2. 설정 파일: 설정 파일 만들기 페이지에서 ID·Secret 입력 후 naver-search-config.local.php 내려받기 (또는 api/naver-search-config.example.php를 복사해 메모장으로 직접 편집)
  3. FTP로 서버 웹 루트의 api/naver-search-config.local.php에 업로드 (덮어쓰기)
  4. 여행사 연락처 정리에서 1차·2차 수집 버튼으로 동작 확인

아래는 네이버 쪽 화면을 따라가는 상세 단계입니다. 화면 이름은 개편에 따라 조금 다를 수 있습니다.

1단계: 네이버 개발자센터 접속 및 로그인

  1. 브라우저에서 네이버 개발자센터에 접속합니다.
  2. 네이버 계정으로 로그인합니다. (사업용·공용 계정을 쓰면 퇴사·이관 시 관리가 쉽습니다.)

2단계: 애플리케이션 등록

  1. 애플리케이션 목록에서 기존 앱을 고르거나 애플리케이션 등록으로 새 앱을 만듭니다. (로그인 필요 · 구형 메뉴: Application → 애플리케이션 등록)
  2. 애플리케이션 이름: 예) OMNI-NEXUS KCTA TOUR 여행사 홈페이지 수집 등 구분 가능한 이름을 입력합니다.
  3. 사용 API: 검색을 선택합니다.
  4. 비로그인 오픈API 선택 화면이 있으면 검색 관련 항목을 포함해 등록합니다. (웹문서 검색은 검색 API 안에 있습니다.)
  5. 환경 추가: 웹 서비스 URL에 https://ikcta.or.kr (필요 시 https://www.ikcta.or.kr)를 넣습니다. 요구 항목이 있으면 안내에 맞게 작성합니다.
  6. 등록을 완료해 Client IDClient Secret이 발급되는 화면까지 갑니다.

3단계: “웹문서 검색” API 사용 설정

  1. 설정 다시 확인: OMNI-NEXUS KCTA TOUR에 쓰는 앱은 애플리케이션 개요(Overview)에서 Client ID·Client Secret을 확인합니다. 화면에 보이는 값이 api/naver-search-config.local.php 안의 naver_client_id·naver_client_secret한 쌍으로 정확히 같아야 합니다. Secret이 가려져 있거나 오래됐으면 재발급 후 새 문자열 전체를 복사해 파일을 고치고 FTP로 다시 올립니다.
  2. 같은 앱 화면에서 API 설정(또는 Application / 사용 API)으로 들어가 검색 → 웹문서 검색(또는 웹문서)을 사용(ON)으로 둡니다.
  3. 다른 앱을 쓰는 경우에는 애플리케이션 목록에서 해당 앱을 연 뒤 위와 같이 확인합니다.
  4. 일일 호출 한도는 네이버 정책에 따릅니다. 여행사 목록 일괄 수집 시 한도를 넘기지 않도록 max 건수·실행 주기를 조절하세요.

호출 URL (직접 테스트할 때)

웹문서 검색의 **정식 경로**는 아래와 같습니다. 문서에 “/v1/search/웹문서”처럼 한글로만 적힌 경우가 있어도, 실제 주소는 **영문 코드 webkr** 입니다.

GET https://openapi.naver.com/v1/search/webkr.json?query=테스트&display=10&start=1

검색어(UTF-8): 한글 등은 그대로 URL에 붙이면 안 되고, UTF-8 기준으로 퍼센트 인코딩한 값을 query=에 넣습니다. (예: PHP rawurlencode(), Python urllib.parse.quote().) 서버 수집 스크립트는 이미 이렇게 호출합니다.

헤더: X-Naver-Client-Id, X-Naver-Client-Secret (값은 앱 상세에 표시된 것과 동일 앱이어야 합니다.)

검색 대상 API 코드(참고)

경로는 모두 /v1/search/{코드}.json 형태입니다. 여행사 URL 수집에는 webkr만 필요합니다.

검색 대상코드
블로그blog
뉴스news
book
백과사전encyc
카페글cafearticle
지식iNkin
웹문서webkr — OMNI-NEXUS KCTA TOUR 홈페이지 수집에 사용
이미지image
쇼핑shop
전문자료doc
성인검색어 판별adult (검색 종류와 용도가 다름)
오타 변환errata (검색 종류와 용도가 다름)

이미지 사이즈 필터 (이미지 검색만 해당)

이미지 검색 API(image)에만 해당하는 옵션입니다. 웹문서(webkr)·여행사 홈페이지 수집과는 무관합니다.

정렬 옵션 sort (참고)

일부 검색 API는 결과 정렬을 sort=sim(유사도순), sort=date(날짜순) 등으로 바꿀 수 있습니다.

오류 SE05 — “존재하지 않는 검색 api”

오류 “NID AUTH Result Invalid (28) … 인증에 실패했습니다”

네이버가 Client ID·Client Secret 조합을 인정하지 못할 때 나는 메시지입니다. 서버 URL이나 OMNI-NEXUS KCTA TOUR 코드 문제가 아니라, 개발자센터에 등록한 키 값을 다시 확인하는 단계입니다.

주의: Client Secret은 비밀번호와 같습니다. 메일·메신저·GitHub 등에 붙여 넣지 말고, naver-search-config.local.php만 서버(FTP)에 두세요. 이 파일은 Git에 커밋하지 않습니다.

4단계: 서버에 설정 파일 두기

  1. 프로젝트의 api/naver-search-config.example.php를 복사합니다.
  2. 복사본 이름을 api/naver-search-config.local.php로 바꿉니다. (반드시 .local.php 확장자)
  3. 파일을 열어 아래 두 항목에 3단계에서 확인한 값을 그대로 넣습니다.
    • 'naver_client_id' => '여기에_Client_ID'
    • 'naver_client_secret' => '여기에_Client_Secret'
  4. 수집 API는 Referer(ikcta.or.kr)와 위 두 값만 사용합니다. 예전에 쓰던 bot_shared_secret 항목이 있으면 삭제하거나 무시해도 됩니다.

5단계: FTP로 서버에 업로드

  1. FTP(또는 호스팅 파일관리자)로 사이트 웹 루트의 api 폴더에 연결합니다.
  2. naver-search-config.local.php 한 파일을 업로드합니다. (기존에 빈 파일이 있으면 덮어씁니다.)
  3. 업로드 후 서버 경로 예: public_html/api/naver-search-config.local.php (호스팅마다 표시 이름만 다를 수 있음)

6단계: 동작 확인

  1. 여행사 연락처 정리에 관리자로 들어갑니다.
  2. 1차 자동 수집 또는 2차 수동 수집을 눌러 봅니다.
  3. 설정이 없거나 키가 비어 있으면 안내 문구에 no_config 또는 empty_keys류 메시지가 표시될 수 있습니다. 파일 경로·따옴표·PHP 문법을 다시 확인합니다.
  4. 네이버 API 오류 시 화면에 오류 요약이 나올 수 있습니다. 앱에서 웹문서 검색이 켜져 있는지, Client ID/Secret이 맞는지 확인합니다.
오류: NID AUTH … (errorCode 024) — 네이버 공식 문서의 JSON 예시와 같은 인증 실패입니다. 가능한 원인: Client ID/Secret 오류, 헤더로 전송하지 않음(서버 스크립트는 헤더 사용), 내 애플리케이션에 해당 Open API가 추가되지 않음 등입니다. 분류표: 오류 코드 — Open API 가이드
지도(JavaScript) API·네이버 로그인용 ID/Secret을 쓰면 검색 Open API에서 실패합니다. 등록 앱 개요에서 ID·Secret을 서버 naver-search-config.local.php와 맞추고, API 설정에서 검색 → 웹문서 검색이 사용(ON)인지 확인한 뒤 Secret 재발급·FTP 반영을 검토하세요.
PC에서만 수집할 때: 동일 키를 애플리케이션 목록의 해당 앱에 두고, 로컬에서는 scripts/naver-search.env(예시: scripts/naver-search.env.example)에 NAVER_CLIENT_ID, NAVER_CLIENT_SECRET을 넣은 뒤 collect-travel-agency-websites.py를 실행합니다. 서버 PHP 설정과는 별개입니다.

문의: webmaster@ikcta.or.kr