Home Linux AWS Cloud Docker Python AI
클릭하여 터미널 활성화

실시간 인기 키워드 수집기 만들기 TrendingKeywords 개발기

// Python · pywebview · 데스크톱 앱 · SEO · 키워드 · 오픈소스
네이버 실시간 검색어, 구글 트렌드 급상승, 구글/네이버 자동완성 연관 키워드를 한 화면에서 수집하는 데스크톱 앱을 Python으로 만들었다. macOS와 Windows 모두 지원하고, GitHub Actions로 자동 빌드·릴리스까지 구성했다.
📋 이 글에서 다루는 것
TrendingKeywords의 기획 배경과 대상 사용자
4개 데이터 소스(네이버 실시간, 구글 트렌드, 구글/네이버 자동완성) 수집 구조
pywebview 기반 네이티브 데스크톱 앱 아키텍처 — Electron 대비 장점
TXT/엑셀/JSON 내보내기 기능과 5탭 UI 구성
GitHub Actions CI/CD로 macOS + Windows 동시 자동 빌드·릴리스
1. 왜 만들었나

네이버 실시간 검색어가 2021년에 폐지됐다. 그 이후로 "지금 사람들이 뭘 검색하고 있는지"를 한눈에 볼 수 있는 도구가 마땅히 없었다. 구글 트렌드는 있지만 웹에서 따로 열어야 하고, 네이버 자동완성은 검색창에서 하나씩 쳐봐야 한다. 블로그 키워드 발굴할 때마다 여러 사이트를 돌아다니는 게 비효율적이었다.

그래서 여러 소스의 인기 키워드를 한 화면에서 수집하는 앱을 만들었다. 대상은 블로거, SEO 마케터, 콘텐츠 기획자, 또는 단순히 지금 뭐가 화제인지 궁금한 사람이다.

항목내용
프로젝트명TrendingKeywords (실시간 인기 키워드 수집기)
현재 버전v1.1
플랫폼macOS / Windows 데스크톱 앱
언어Python 3.10+
라이선스MIT (오픈소스)
다운로드GitHub Releases

2. 아키텍처 — 어떻게 동작하나

앱 구조는 의외로 단순하다. Python 백엔드가 외부 API를 호출해서 키워드를 수집하고, HTML/CSS/JS 프론트엔드가 결과를 보여준다. 이 둘을 pywebview라는 프레임워크가 하나의 네이티브 윈도우 안에서 연결해준다.

[TrendingKeywords App] │ ├── Frontend (HTML/CSS/JS) │ pywebview 네이티브 윈도우 안에서 렌더링 │ 사용자 입력 → JS → Python 호출 │ ├── Backend (Python) │ API 호출, 데이터 가공, 파일 저장 │ └── External APIs ├── Signal.bz → 네이버 실시간 검색어 ├── Google Trends → 급상승 검색어 (RSS) ├── Google Suggest → 자동완성 연관어 └── Naver Suggest → 자동완성 연관어
싱글 파일 아키텍처

이 앱의 특이한 점은 Python 파일 하나에 백엔드 로직과 프론트엔드 HTML이 전부 들어간다는 것이다. 별도의 정적 파일 서버가 필요 없고, PyInstaller로 빌드할 때도 설정이 간단하다. 파일이 늘어나면 의존성 관리가 복잡해지는데, 싱글 파일이면 "이 파일 하나만 관리하면 된다"는 명확함이 있다.

왜 Electron이 아니라 pywebview인가

데스크톱 앱을 만들 때 가장 유명한 프레임워크는 Electron이다. VS Code, Slack, Discord 같은 유명 앱이 전부 Electron으로 만들어져 있다. 하지만 Electron은 Chromium 브라우저를 통째로 내장하기 때문에 바이너리 크기가 150MB 이상이고 메모리도 많이 먹는다.

pywebview는 OS에 이미 설치되어 있는 WebView(macOS의 WKWebView, Windows의 WebView2)를 사용하기 때문에 바이너리 크기가 ~30MB 수준이고 메모리 사용도 낮다. Python으로 개발할 수 있다는 것도 장점이다.

비교 항목pywebviewElectron
바이너리 크기~30MB~150MB+
메모리 사용낮음 (OS WebView)높음 (Chromium 내장)
개발 언어PythonNode.js
네이티브 통합OS 파일 다이얼로그 기본별도 구현 필요
생태계작음매우 큼

3. 데이터 수집 — 4개 소스에서 키워드 긁어오기
데이터 소스
소스수집 데이터방식
네이버 실시간 검색어TOP 10 키워드 + 순위 변동 (상승/하락/신규/유지)Signal.bz 중계 API
구글 트렌드 급상승급상승 검색어 20개 + 검색량Google Trends RSS 피드
구글 자동완성시드 키워드당 연관어 10개Google Suggest API
네이버 자동완성시드 키워드당 연관어 10개Naver Suggest API
수집 흐름

사용자가 시드 키워드(예: "오늘", "추천", "비교")를 입력하고 검색 버튼을 누르면, 백엔드가 4개 소스에 순차적으로 요청을 보낸다. 각 소스에서 받은 키워드를 중복 제거한 뒤 프론트엔드에 JSON으로 반환한다.

사용자 입력 (시드 키워드: "오늘", "추천", "비교") │ ▼ [백엔드 수집 함수] │ ├──► 네이버 실시간 → TOP 10 키워드 + 순위 변동 ├──► 구글 급상승 → 급상승 검색어 20개 ├──► 구글 자동완성 → 시드별 연관어 10개씩 └──► 네이버 자동완성 → 시드별 연관어 10개씩 │ ▼ 중복 제거 → 결과 반환 (JSON)
네이버 실시간 검색어 — Signal.bz

네이버가 실시간 검색어를 폐지한 후에도 뉴스·커뮤니티 데이터를 분석해서 실시간 인기 키워드를 제공하는 서비스들이 있다. Signal.bz가 그중 하나다. API를 호출하면 현재 TOP 10 키워드와 순위 변동 상태(상승/하락/신규/유지)를 받을 수 있다.

구글 트렌드 급상승 — RSS 피드

구글 트렌드의 급상승 검색어는 RSS 피드로 제공된다. feedparser 라이브러리로 파싱하면 검색어 20개와 대략적인 검색량을 얻을 수 있다. 한국 지역 필터를 걸어서 국내 트렌드만 가져온다.

자동완성 연관어 — 구글/네이버

검색엔진의 자동완성 API는 공식 문서화되어 있진 않지만, 검색창에서 글자를 입력할 때 드롭다운에 뜨는 추천어를 JSON으로 받을 수 있다. 시드 키워드를 넣으면 그와 관련된 인기 검색어 10개를 받아온다. 블로그 키워드 발굴에 가장 실용적인 소스다.

💡 시드 키워드를 안 넣으면? — 기본값으로 "오늘", "추천", "방법", "비교", "후기", "순위" 6개가 자동 입력된다. 블로그 키워드 발굴에 자주 쓰이는 범용 단어들이다.
에러 처리 — 하나가 실패해도 나머지는 정상

4개 소스 각각 독립적으로 에러 처리를 한다. 예를 들어 Signal.bz API가 일시적으로 다운되어도 구글 트렌드와 자동완성 수집은 정상적으로 진행된다. 실패한 소스만 결과에 오류 메시지를 포함시키고 나머지 데이터는 그대로 보여준다.


4. UI — 5탭 구성

수집한 데이터는 5개 탭으로 분류해서 보여준다. 각 탭이 하나의 데이터 소스에 대응한다.

[TrendingKeywords UI] ┌──────────────────────────────────────────┐ │ [키워드 입력 (쉼표 구분)] │ ├──────────────────────────────────────────┤ │ [검색] [복사] [TXT] [엑셀] [JSON] │ ├──────────────────────────────────────────┤ │ 상태: 준비됨 │ ├──────────────────────────────────────────┤ │ 네이버실시간 | 구글연관 | 네이버연관 | 구글급상승 | 전체 │ ├──────────────────────────────────────────┤ │ │ │ 결과 패널 (스크롤 가능) │ │ │ └──────────────────────────────────────────┘
데이터 소스표시 형식
네이버 실시간Signal.bz API순위 + 키워드 + 상태 (▲ ▼ NEW −)
구글 연관검색어Google Suggest시드별 그룹 → 연관어 리스트
네이버 연관검색어Naver Suggest시드별 그룹 → 연관어 리스트
구글 급상승Google Trends RSS순위 + 키워드 + 검색량
전체 키워드전체 통합태그 클라우드 형태
디자인

다크 모드 기반이다. 배경은 #0f0f1a, 액센트 컬러는 그린-블루 그라디언트를 사용했다. 시스템 폰트를 사용해서 macOS에서는 Apple SD Gothic Neo, Windows에서는 Malgun Gothic으로 렌더링된다. 커스텀 스크롤바와 라운드 버튼으로 깔끔한 UX를 유지했다.

JS-Python 통신

프론트엔드(JS)에서 백엔드(Python)를 직접 호출할 수 있다. pywebview의 js_api 브릿지 덕분이다. 사용자가 검색 버튼을 누르면 JS가 Python의 search() 메서드를 호출하고, 결과를 JSON으로 받아서 화면에 렌더링한다. 파일 저장도 마찬가지로 JS에서 Python의 save_file()을 호출한다.


5. 데이터 내보내기

수집한 키워드를 3가지 형식으로 저장할 수 있다. 저장 다이얼로그는 pywebview의 네이티브 파일 다이얼로그를 사용해서, macOS에서는 macOS 스타일, Windows에서는 Windows 스타일로 뜬다.

형식확장자특징
TXT.txt사람이 읽기 쉬운 텍스트 리포트
Excel.xlsx5개 시트로 분류, 헤더 스타일링, 컬럼 너비 자동 조절
JSON.json프로그래밍용 원본 데이터

엑셀 내보내기가 가장 강력하다. 5개 시트(네이버 실시간 / 구글 연관 / 네이버 연관 / 구글 급상승 / 전체 키워드)로 분류되고, 헤더에 파란 배경 + 흰색 볼드 폰트 스타일이 자동 적용된다. openpyxl 라이브러리로 구현했다.

클립보드 복사 기능도 있어서, 수집한 키워드를 바로 블로그 편집기에 붙여넣을 수 있다.


6. 빌드 및 배포 — 코드에서 실행 파일까지
macOS 빌드 과정
app.py (소스 코드) │ ▼ PyInstaller (--windowed --onedir) │ TrendingKeywords.app (macOS 앱 번들) │ ▼ hdiutil (UDZO 압축) │ TrendingKeywords.dmg (설치 이미지) ├── TrendingKeywords.app └── Applications → /Applications (심볼릭 링크)

PyInstaller가 Python 코드를 macOS 앱 번들(.app)로 패키징하고, hdiutil로 DMG 설치 이미지를 만든다. DMG 안에 Applications 폴더 심볼릭 링크가 포함되어서, 사용자가 앱을 드래그 앤 드롭으로 설치할 수 있다.

Windows 빌드 과정

Windows에서는 PyInstaller --onefile 옵션으로 단일 .exe 파일을 생성한다. 더블클릭만으로 바로 실행 가능하다.

GitHub Actions — 자동 빌드 + 릴리스

매번 macOS와 Windows에서 수동으로 빌드하는 건 번거롭다. 그래서 GitHub Actions CI/CD를 구성했다. Git 태그(예: v1.1)를 push하면 자동으로 양쪽 플랫폼에서 빌드가 돌아가고, GitHub Release에 바이너리가 첨부된다.

git tag v1.1 && git push --tags │ ▼ [GitHub Actions] │ ├── build-windows (windows-latest) │ Python 3.12 → TrendingKeywords.exe │ ├── build-mac (macos-latest) │ Python 3.12 → TrendingKeywords.dmg │ └── release (ubuntu-latest) GitHub Release 자동 생성 + .exe / .dmg 바이너리 첨부
💡 크로스 플랫폼 자동 빌드의 장점 — macOS 앱은 macOS에서, Windows 앱은 Windows에서만 빌드할 수 있다. GitHub Actions는 각 OS 환경을 클라우드에서 제공하기 때문에, 개발자가 두 OS를 다 갖고 있지 않아도 양쪽 빌드를 자동으로 돌릴 수 있다.

7. 기술 스택 요약
영역기술역할
GUIpywebview네이티브 윈도우 + 웹뷰 렌더링
HTTPrequestsAPI 호출
RSS 파싱feedparser구글 트렌드 RSS 파싱
엑셀 생성openpyxl스타일 포함 XLSX 파일 생성
패키징PyInstaller.app (macOS) / .exe (Windows) 빌드
DMG 생성hdiutilmacOS 설치 이미지
CI/CDGitHub Actions자동 크로스 플랫폼 빌드 + 릴리스
프론트엔드HTML/CSS/JS (인라인)다크 모드 사용자 인터페이스
✓ 외부 서버 불필요 — 모든 API 호출이 Python 백엔드에서 직접 이루어지기 때문에 CORS 문제가 원천적으로 발생하지 않는다. 별도의 프록시 서버나 백엔드 서버 없이 앱만 실행하면 된다.

8. 버전 히스토리
v1.0 — 초기 릴리스

구글 트렌드 급상승 검색어 수집, 구글/네이버 자동완성 연관 키워드 수집, TXT/엑셀/JSON 저장 기능, 키워드 클립보드 복사, macOS/Windows 크로스 플랫폼 지원.

v1.1 — 현재 버전

NEW 네이버 실시간 검색어 TOP 10 추가 (순위 변동 표시), UI 5탭 체계 전환, 엑셀/TXT 내보내기에 네이버 실시간 섹션 추가, GitHub Actions 자동 빌드 파이프라인 구축.


9. 향후 개선 가능사항
항목설명
자동 업데이트GitHub Release 체크 + 새 버전 다운로드 안내
스케줄 수집설정 간격으로 자동 반복 수집
트렌드 차트시간대별 순위 변동 시각화
다국어 지원일본/미국 등 지역별 트렌드 수집
병렬 수집asyncio로 4개 API 동시 호출 (속도 향상)

10. 자주 묻는 질문 (FAQ)
Q. 설치 없이 바로 쓸 수 있나?
macOS는 DMG 파일을 열어서 앱을 Applications 폴더에 드래그하면 되고, Windows는 EXE 파일을 더블클릭하면 바로 실행된다. Python이나 다른 프로그램을 별도로 설치할 필요 없다.
Q. 수집한 키워드는 어디에 쓸 수 있나?
블로그 글 주제 선정, SEO 키워드 리서치, 콘텐츠 기획, 마케팅 트렌드 분석에 활용할 수 있다. 엑셀로 저장하면 팀원과 공유하기 좋고, JSON으로 저장하면 다른 프로그램에서 데이터를 가공할 수 있다.
Q. API 키가 필요한가?
필요 없다. 사용하는 API 모두 공개 엔드포인트이거나 인증 없이 접근 가능한 것들이다. 별도의 회원가입이나 API 키 발급 과정 없이 앱만 실행하면 된다.
Q. 네이버가 실시간 검색어를 폐지했는데 어떻게 수집하나?
네이버 공식 실시간 검색어는 폐지됐지만, 뉴스·커뮤니티 데이터를 분석해서 실시간 인기 키워드를 제공하는 서드파티 서비스(Signal.bz)를 활용한다. 네이버 공식 데이터는 아니지만, 현재 화제가 되는 키워드를 파악하는 데 충분히 유용하다.
Q. 소스 코드를 수정하고 싶으면?
MIT 라이선스 오픈소스라 자유롭게 수정·재배포 가능하다. GitHub 저장소에서 소스를 받아서 수정하면 된다. Python 3.10 이상과 필요한 패키지를 설치하면 로컬에서 바로 실행할 수 있다.

📌 이 글 핵심 요약
TrendingKeywords는 네이버 실시간, 구글 트렌드, 구글/네이버 자동완성에서 인기 키워드를 한 화면에 수집하는 데스크톱 앱이다
pywebview 기반으로 Electron 대비 5배 가벼운 네이티브 앱을 만들었다 (~30MB vs ~150MB)
싱글 파일 아키텍처로 유지보수와 빌드가 간단하고, CORS 문제가 원천 차단된다
TXT/엑셀(5시트)/JSON 내보내기와 클립보드 복사를 지원한다
GitHub Actions로 macOS + Windows 동시 자동 빌드·릴리스 파이프라인을 구성했다