무색
기술블로그
에세이
연구
소개

무색

소프트웨어로 비즈니스의 가능성을 만듭니다. 웹·앱 개발, 음성 AI, 자동화 콘텐츠 제작까지 — 기술이 필요한 곳에 무색이 있습니다.

연락처

contact@museck.com

사업자 정보

상호: 무색

대표: 배성재

사업자등록번호: 577-58-00836

인천광역시 연수구 인천타워대로 323, 에이동 8층 801-802호 AB-132 (송도동, 송도 센트로드)

© 2026 무색. All rights reserved.
개인정보처리방침·이용약관·연락처
INCHEON, KR
네이버+구글 트렌드 통합 라이브러리 — sumi-e 키 비주얼
📊 검색 트렌드 분석
2026. 3. 4.

네이버 + 구글 트렌드를 하나로 묶는 Python 라이브러리를 만들었다

"클라우드" 트렌드를 네이버에서 검색하면 상승세인데, 구글에서 검색하면 정체다. 어느 쪽이 맞는 걸까? 둘 다 맞다. 보는 시장이 다를 뿐이다.

한국 시장의 검색 트렌드를 분석하려면 네이버와 구글 양쪽을 동시에 봐야 한다. 네이버는 국내 사용자의 관심을 반영하고, 구글은 글로벌 트렌드의 국내 유입을 보여준다. 문제는 이 두 소스의 데이터 형식이 완전히 다르다는 것이다. 네이버는 공식 DataLab API로 일간 데이터를, 구글은 비공식 라이브러리 pytrends로 주간 데이터를 제공한다. 이 둘을 통합하여 교차 분석하는 Python 라이브러리를 처음부터 만들었다.

왜 두 소스가 필요한가

네이버 트렌드만 보면 한국에서 "뭐가 뜨고 있는지"는 알 수 있지만, 그게 글로벌 흐름인지 국내 한정인지 구분할 수 없다. 반대로 구글 트렌드만 보면 한국 특수한 관심사를 놓친다. 예를 들어 "수능" 같은 키워드는 네이버에서 폭발적이지만 구글에서는 거의 보이지 않는다. 반대로 "Kubernetes"는 구글에서 꾸준한 상승세인데 네이버에서는 한참 뒤에야 관심이 올라온다.

이 괴리를 데이터로 읽을 수 있다면, 마케팅 타이밍이나 콘텐츠 전략에 쓸모가 있다. 그래서 두 소스를 하나의 분석 파이프라인으로 묶기로 했다.

설계: 데이터 모델부터

두 소스의 데이터를 통합하려면 공통 모델이 필요하다. Pydantic v2로 핵심 모델을 먼저 정의했다.

TrendPoint: 날짜 + 값 한 쌍. 네이버든 구글이든 결국 이 형태로 정규화된다.

TrendData: 키워드 + TrendPoint 리스트 + 소스(naver/google).

TrendComparison: 정렬된 두 시계열 + Pearson 상관계수 + 괴리 구간 리스트 + 모멘텀 점수.

이 모델 위에 NaverClient(async httpx), GoogleClient(sync pytrends), 그리고 교차 분석 엔진인 TrendComparator를 얹었다.

교차 분석 파이프라인

TrendComparator의 핵심은 5단계 파이프라인이다.

1. 시계열 정렬: 네이버는 일간, 구글은 주간이라 직접 비교가 불가능하다. 7일 간격으로 리샘플링하고 공통 기간만 추출한다.

2. 정규화: 네이버와 구글 각각 최대값 100 기준으로 정규화한다. 절대치 비교는 의미 없고, 추세의 형태를 비교하는 것이 핵심이다.

3. Pearson 상관계수: 두 시계열의 상관을 -1~1 사이 값으로 계산한다. 0.8 이상이면 네이버와 구글에서 비슷한 패턴으로 움직이는 키워드, 0.3 이하면 두 시장에서 완전히 다른 양상을 보이는 키워드다.

4. 괴리 감지: 정규화된 값의 차이가 임계값(25)을 넘는 시점을 찾는다. 이 구간이 의미 있는 인사이트를 제공하는 핵심 부분이다.

5. 모멘텀 계산: 최근 30일 평균과 이전 기간 평균을 비교해서 상승/하락 추세를 판단한다.

실제 코드를 보면 이렇다.

class TrendComparator:
    def compare(self, naver: TrendData | None, google: TrendData | None) -> TrendComparison:
        # 1. 시계열 정렬 (7일 간격 리샘플링, 공통 기간)
        aligned_naver, aligned_google = self._align_time_series(...)
        # 2. 정규화 (최대값 100 기준)
        norm_naver = self._normalize(aligned_naver)
        norm_google = self._normalize(aligned_google)
        # 3. Pearson 상관계수
        correlation = self._compute_correlation(norm_naver, norm_google)
        # 4. 괴리 감지 (임계값 25 초과 시)
        divergences = self._detect_divergences(norm_naver, norm_google)
        # 5. 모멘텀 (최근 30일 vs 이전 기간)
        momentum = self._compute_momentum(norm_naver, norm_google)
        return TrendComparison(...)

두 클라이언트의 차이

NaverClient는 공식 API라서 구현이 깔끔하다. async httpx로 호출하고, 응답 JSON을 TrendData로 변환하면 된다. 최대 5개 키워드를 동시에 조회할 수 있다.

# NaverClient - async httpx 기반
async with NaverClient() as client:
    data = await client.fetch_trend(["파이썬", "자바스크립트"], start, end)

GoogleClient는 사정이 다르다. pytrends가 비공식 라이브러리인데다, urllib3 2.x와 호환 문제가 있었다. 특히 retries 파라미터 처리가 바뀌면서 기본값으로 두면 에러가 났다. retries=0으로 설정하고 자체 재시도 로직을 구현하는 것으로 해결했다.

# GoogleClient - pytrends 래퍼 (retries=0, 자체 재시도)
self._pytrends = TrendReq(hl="ko", tz=540, retries=0)
google = GoogleClient()
data = google.fetch_trend(["Python", "JavaScript"], period_months=3)

괴리가 말해주는 것

이 라이브러리에서 가장 흥미로운 부분은 괴리 감지다. 정규화된 네이버 값과 구글 값의 차이가 25를 넘는 구간을 찾는데, 이 괴리의 방향에 따라 해석이 달라진다.

  • 네이버 > 구글: 국내에서만 관심이 높은 키워드. "수능", "공인중개사" 같은 키워드가 전형적이다.
  • 구글 > 네이버: 글로벌 트렌드가 국내에 아직 본격 유입되지 않은 키워드. 이 괴리가 좁혀지는 시점이 콘텐츠를 준비하기 좋은 타이밍이다.
  • 상관 높음 + 괴리 없음: 글로벌과 국내에서 동일한 패턴으로 움직이는 키워드. 경쟁이 치열할 가능성이 높다.

CLI로 바로 쓸 수 있게

click으로 CLI를 붙여서 터미널에서 바로 분석할 수 있게 만들었다. dotenv도 지원해서 네이버 API 키를 .env 파일에 넣어두면 자동으로 로딩된다.

# 키워드 비교
uv run search-trend compare "Claude" "ChatGPT" --period 3m

# 단일 키워드 심층 분석
uv run search-trend analyze "AI" --deep -p 1y

삽질과 교훈

가장 시간을 잡아먹은 건 pytrends의 urllib3 호환 문제였다. pytrends 4.9.2가 urllib3 2.x의 retries 파라미터 처리 변경을 따라가지 못해서 런타임 에러가 났다. 공식 이슈에도 올라온 문제인데, 해결책은 retries=0으로 설정하고 자체 재시도 로직을 만드는 것이었다.

또 하나 배운 것은 pytrends의 trending_searches()(rising 기능)가 더 이상 안정적으로 동작하지 않는다는 것이다. 비공식 라이브러리는 Google 내부 변경에 취약하다. 의존하는 기능의 범위를 최소화하고, 핵심인 시계열 데이터 조회만 사용하기로 했다.

결과와 배운 것

라이브러리를 만들고 나니 키워드 분석이 CLI 한 줄로 끝난다. 이전에는 네이버 DataLab 웹사이트에서 수동으로 검색하고, 별도로 Google Trends 웹에서 같은 키워드를 검색해서 눈으로 비교했다. 이제는 하나의 명령으로 양쪽 데이터를 가져오고, 상관계수와 괴리까지 자동으로 계산된다.

데이터 소스가 다를 때 중요한 건 "공통 모델을 먼저 정의하는 것"이다. TrendPoint, TrendData라는 공통 언어를 만들어놓으니 네이버든 구글이든, 나중에 다른 소스를 추가하더라도 같은 파이프라인에 흘려보낼 수 있다. 비공식 API에 의존하는 부분은 최소한의 기능만 사용하고, 불안정한 기능은 과감히 빼는 것이 장기 유지보수에 유리하다.

자주 묻는 질문

네이버와 구글 트렌드 데이터를 직접 비교할 수 있나?

그대로는 불가능하다. 네이버는 일간, 구글은 주간 데이터를 주고, 정규화 기준도 다르다. 7일 간격으로 리샘플링하고 최대값 100 기준으로 재정규화해야 비교할 수 있다.

pytrends는 안정적인가?

비공식 라이브러리라 Google 내부 변경에 취약하다. urllib3 2.x 호환 문제도 있어서 retries=0으로 설정하고 자체 재시도 로직을 구현했다. trending_searches 같은 기능은 불안정해서 제거했다.

괴리 분석에서 실제로 어떤 인사이트를 얻을 수 있나?

네이버 > 구글이면 국내에서만 관심이 높은 키워드, 구글 > 네이버이면 글로벌 트렌드가 국내에 아직 유입되지 않은 키워드다. 이 괴리가 좁혀지는 시점이 마케팅 타이밍이 된다.

자주 묻는 질문

네이버와 구글 트렌드 데이터를 직접 비교할 수 있나?
그대로는 불가능하다. 네이버는 일간, 구글은 주간 데이터를 주고, 정규화 기준도 다르다. 7일 간격으로 리샘플링하고 최대값 100 기준으로 재정규화해야 비교할 수 있다.
pytrends는 안정적인가?
비공식 라이브러리라 Google 내부 변경에 취약하다. urllib3 2.x 호환 문제도 있어서 retries=0으로 설정하고 자체 재시도 로직을 구현했다. trending_searches 같은 기능은 불안정해서 제거했다.
괴리 분석에서 실제로 어떤 인사이트를 얻을 수 있나?
네이버 > 구글이면 국내에서만 관심이 높은 키워드, 구글 > 네이버이면 글로벌 트렌드가 국내에 아직 유입되지 않은 키워드다. 이 괴리가 좁혀지는 시점이 마케팅 타이밍이 된다.
📊 검색 트렌드 분석(1/2)
Next

20개 아이디어를 검토하고 신규 개발 0건으로 결론 내린 이야기