월 조회수 데이터, API로 자동화해서 나만의 툴 만들기
솔직히 개발자인 우리 입장에서, 블랙키위나 판다랭크 같은 툴을 결제해서 쓰는 건 좀 자존심 상하는 일 아닙니까?
“어차피 API 찔러서 JSON 받아 뿌려주는 건데, 이걸 돈 내고 쓴다고?”
네, 저도 그 생각으로 시작했습니다. 마케터들이 엑셀 켜고 하나하나 검색할 때, 우리는 스크립트 하나로 데이터를 긁어와야죠. 주말에 Node.js로 네이버 검색광고 API를 연동해 ‘나만의 키워드 분석기’를 만든 과정을 공유합니다.
생각보다 Signature 생성 부분에서 삽질을 좀 했는데, 이 글을 보는 분들은 그 시간 아끼시길 바랍니다.
1. 네이버 개발자 센터가 아닙니다
일단 번지수부터 잘 찾아야 합니다. ‘네이버 로그인’이나 ‘지도 API’가 있는 developers.naver.com이 아니라, 네이버 검색광고 API 센터로 가야 합니다.
여기서 API Key, Secret Key, 그리고 Customer ID를 발급받으세요.
💡 Tip: API 호출 기본 URL도 다릅니다.
https://api.naver.com을 씁니다. 습관적으로openapi.naver.com치면 404 뜹니다.
2. 최대 난관: HMAC-SHA256 서명(Signature) 생성
API 문서를 보면 헤더에 X-Signature를 넣으라고 나옵니다. 그냥 API Key만 던지면 좋겠는데, 보안 때문에 타임스탬프랑 URL이랑 섞어서 암호화를 해야 하죠.
여기서 가장 많이 막힙니다. 포인트는 딱 두 가지입니다.
- 타임스탬프:
Date.now()를 쓰되, 문자열로 변환할 것. - 메서드/URL: 요청하는 메서드(GET)와 API URL이 정확히 일치해야 함.
제가 작성한 서명 생성 코드는 이렇습니다. crypto 모듈만 있으면 됩니다.
/* * [네이버 검색광고 API 서명 생성 예시]
* Node.js 환경: crypto 모듈 사용
*/
const crypto = require('crypto');
function generateSignature(timestamp, method, url, secretKey) {
// 1. 요청할 메서드, URL, 타임스탬프를 조합
const message = `${timestamp}.${method}.${url}`;
// 2. HMAC-SHA256 알고리즘으로 암호화 후 Base64 인코딩
const signature = crypto.createHmac('sha256', secretKey)
.update(message)
.digest('base64');
return signature;
}
3. Axios로 데이터 긁어오기 (RelKeyword)
인증 헤더만 통과하면 나머지는 쉽습니다. 우리가 필요한 건 ‘연관 키워드 조회’ (/keywordstool)입니다.
여기에 내가 조회하고 싶은 ‘시드 키워드(hintKeywords)’를 던지면, 네이버가 알아서 연관된 키워드들의 PC/Mobile 월간 검색수, 클릭수 등을 리턴해줍니다.
/* * [API 호출 로직]
* 작성하신 코드를 바탕으로 핵심 로직을 구성했습니다.
*/
import axios from 'axios';
import crypto from 'crypto';
/**
* 1. 설정값 (실무에서는 .env 파일로 관리하는 것이 정석입니다)
*/
const CONFIG = {
API_KEY: 'YOUR_API_KEY',
SECRET_KEY: 'YOUR_SECRET_KEY',
CUSTOMER_ID: 'YOUR_CUSTOMER_ID',
BASE_URL: 'https://api.naver.com',
} as const;
/**
* 2. 타입 정의 (Naver API 응답 명세 반영)
* 네이버는 검색수가 적으면 숫자가 아니라 "< 10" 문자열을 줍니다.
*/
interface NaverKeywordItem {
relKeyword: string;
monthlyPcQcCnt: string | number;
monthlyMobileQcCnt: string | number;
compIdx: 'HIGH' | 'MID' | 'LOW'; // 경쟁정도
}
interface KeywordResult {
keyword: string;
totalSearch: number;
competition: string;
}
/**
* 3. 유틸리티 함수: 서명(Signature) 생성
*/
const generateSignature = (timestamp: string, method: string, uri: string): string => {
const message = `${timestamp}.${method}.${uri}`;
return crypto
.createHmac('sha256', CONFIG.SECRET_KEY)
.update(message)
.digest('base64');
};
/**
* 4. 유틸리티 함수: 검색수 파싱
* '< 10' 같은 문자열이나 숫자를 받아서 안전한 number로 변환
*/
const parseSearchCount = (count: string | number): number => {
if (typeof count === 'number') return count;
// 문자열인 경우 ('< 10') -> 보수적으로 0으로 처리하거나 10으로 처리
return 0;
};
/**
* 5. 메인 로직: 키워드 검색량 조회 함수
*/
const getKeywordData = async (hintKeywords: string): Promise<KeywordResult[] | void> => {
const uri = '/keywordstool';
const method = 'GET';
const timestamp = Date.now().toString();
try {
const { data } = await axios.get(`${CONFIG.BASE_URL}${uri}`, {
params: {
hintKeywords,
showDetail: 1,
},
headers: {
'X-Timestamp': timestamp,
'X-API-KEY': CONFIG.API_KEY,
'X-Customer': CONFIG.CUSTOMER_ID,
'X-Signature': generateSignature(timestamp, method, uri),
},
});
const keywordList: NaverKeywordItem[] = data.keywordList;
// 데이터 가공 및 필터링
const results: KeywordResult[] = keywordList
.map((item) => {
const pcCount = parseSearchCount(item.monthlyPcQcCnt);
const moCount = parseSearchCount(item.monthlyMobileQcCnt);
return {
keyword: item.relKeyword,
totalSearch: pcCount + moCount,
competition: item.compIdx,
};
})
.sort((a, b) => b.totalSearch - a.totalSearch) // 검색량 내림차순
.slice(0, 5); // 상위 5개만
console.table(results); // 결과 출력
return results;
} catch (error: any) {
console.error('❌ API 호출 실패:', error.response?.data || error.message);
}
};
// 6. 실행 (ts-node index.ts)
getKeywordData('스마트스토어');

4. 이걸로 뭘 만들 수 있나? (Feat. 인디 해커)
단순히 콘솔에 찍어보고 “와 데이터 나왔다” 하고 끝내면 그냥 코딩 연습이고요. 이걸 ‘내 비즈니스’에 써먹어야죠.
저는 이렇게 활용하고 있습니다.
- 자동 필터링:
월 검색량 3,000 이상&경쟁도 낮음조건인 키워드만 뽑아서 매주 월요일 슬랙으로 전송. - 블로그 글감 추천: 내가 운영하는 블로그 주제와 연관된 ‘상승 키워드’를 자동으로 추출.
남들이 유료 툴 쓰면서 “무슨 키워드가 좋지?” 고민할 때, 저는 제가 짠 봇이 물어다 주는 키워드 리스트 보고 바로 글 쓰러 갑니다. 이게 개발자가 가진 최고의 레버리지 아닐까요.
3줄 요약
- 키워드 분석 툴, 유료 결제하지 말고 직접 만들어서 쓰자.
- 네이버 검색광고 API의 핵심은
Signature생성이다. (위 코드 참고) - Action Item: 주말에 딱 2시간만 투자해서 나만의 ‘키워드 추출기’를 구축해 볼 것.