네이버 실시간 검색어가 2021년에 폐지됐다. 그 이후로 "지금 사람들이 뭘 검색하고 있는지"를 한눈에 볼 수 있는 도구가 마땅히 없었다. 구글 트렌드는 있지만 웹에서 따로 열어야 하고, 네이버 자동완성은 검색창에서 하나씩 쳐봐야 한다. 블로그 키워드 발굴할 때마다 여러 사이트를 돌아다니는 게 비효율적이었다.
그래서 여러 소스의 인기 키워드를 한 화면에서 수집하는 앱을 만들었다. 대상은 블로거, SEO 마케터, 콘텐츠 기획자, 또는 단순히 지금 뭐가 화제인지 궁금한 사람이다.
| 항목 | 내용 |
|---|---|
| 프로젝트명 | TrendingKeywords (실시간 인기 키워드 수집기) |
| 현재 버전 | v1.1 |
| 플랫폼 | macOS / Windows 데스크톱 앱 |
| 언어 | Python 3.10+ |
| 라이선스 | MIT (오픈소스) |
| 다운로드 | GitHub Releases |
앱 구조는 의외로 단순하다. Python 백엔드가 외부 API를 호출해서 키워드를 수집하고, HTML/CSS/JS 프론트엔드가 결과를 보여준다. 이 둘을 pywebview라는 프레임워크가 하나의 네이티브 윈도우 안에서 연결해준다.
이 앱의 특이한 점은 Python 파일 하나에 백엔드 로직과 프론트엔드 HTML이 전부 들어간다는 것이다. 별도의 정적 파일 서버가 필요 없고, PyInstaller로 빌드할 때도 설정이 간단하다. 파일이 늘어나면 의존성 관리가 복잡해지는데, 싱글 파일이면 "이 파일 하나만 관리하면 된다"는 명확함이 있다.
데스크톱 앱을 만들 때 가장 유명한 프레임워크는 Electron이다. VS Code, Slack, Discord 같은 유명 앱이 전부 Electron으로 만들어져 있다. 하지만 Electron은 Chromium 브라우저를 통째로 내장하기 때문에 바이너리 크기가 150MB 이상이고 메모리도 많이 먹는다.
pywebview는 OS에 이미 설치되어 있는 WebView(macOS의 WKWebView, Windows의 WebView2)를 사용하기 때문에 바이너리 크기가 ~30MB 수준이고 메모리 사용도 낮다. Python으로 개발할 수 있다는 것도 장점이다.
| 비교 항목 | pywebview | Electron |
|---|---|---|
| 바이너리 크기 | ~30MB | ~150MB+ |
| 메모리 사용 | 낮음 (OS WebView) | 높음 (Chromium 내장) |
| 개발 언어 | Python | Node.js |
| 네이티브 통합 | OS 파일 다이얼로그 기본 | 별도 구현 필요 |
| 생태계 | 작음 | 매우 큼 |
| 소스 | 수집 데이터 | 방식 |
|---|---|---|
| 네이버 실시간 검색어 | TOP 10 키워드 + 순위 변동 (상승/하락/신규/유지) | Signal.bz 중계 API |
| 구글 트렌드 급상승 | 급상승 검색어 20개 + 검색량 | Google Trends RSS 피드 |
| 구글 자동완성 | 시드 키워드당 연관어 10개 | Google Suggest API |
| 네이버 자동완성 | 시드 키워드당 연관어 10개 | Naver Suggest API |
사용자가 시드 키워드(예: "오늘", "추천", "비교")를 입력하고 검색 버튼을 누르면, 백엔드가 4개 소스에 순차적으로 요청을 보낸다. 각 소스에서 받은 키워드를 중복 제거한 뒤 프론트엔드에 JSON으로 반환한다.
네이버가 실시간 검색어를 폐지한 후에도 뉴스·커뮤니티 데이터를 분석해서 실시간 인기 키워드를 제공하는 서비스들이 있다. Signal.bz가 그중 하나다. API를 호출하면 현재 TOP 10 키워드와 순위 변동 상태(상승/하락/신규/유지)를 받을 수 있다.
구글 트렌드의 급상승 검색어는 RSS 피드로 제공된다. feedparser 라이브러리로 파싱하면 검색어 20개와 대략적인 검색량을 얻을 수 있다. 한국 지역 필터를 걸어서 국내 트렌드만 가져온다.
검색엔진의 자동완성 API는 공식 문서화되어 있진 않지만, 검색창에서 글자를 입력할 때 드롭다운에 뜨는 추천어를 JSON으로 받을 수 있다. 시드 키워드를 넣으면 그와 관련된 인기 검색어 10개를 받아온다. 블로그 키워드 발굴에 가장 실용적인 소스다.
4개 소스 각각 독립적으로 에러 처리를 한다. 예를 들어 Signal.bz API가 일시적으로 다운되어도 구글 트렌드와 자동완성 수집은 정상적으로 진행된다. 실패한 소스만 결과에 오류 메시지를 포함시키고 나머지 데이터는 그대로 보여준다.
수집한 데이터는 5개 탭으로 분류해서 보여준다. 각 탭이 하나의 데이터 소스에 대응한다.
| 탭 | 데이터 소스 | 표시 형식 |
|---|---|---|
| 네이버 실시간 | Signal.bz API | 순위 + 키워드 + 상태 (▲ ▼ NEW −) |
| 구글 연관검색어 | Google Suggest | 시드별 그룹 → 연관어 리스트 |
| 네이버 연관검색어 | Naver Suggest | 시드별 그룹 → 연관어 리스트 |
| 구글 급상승 | Google Trends RSS | 순위 + 키워드 + 검색량 |
| 전체 키워드 | 전체 통합 | 태그 클라우드 형태 |
다크 모드 기반이다. 배경은 #0f0f1a, 액센트 컬러는 그린-블루 그라디언트를 사용했다. 시스템 폰트를 사용해서 macOS에서는 Apple SD Gothic Neo, Windows에서는 Malgun Gothic으로 렌더링된다. 커스텀 스크롤바와 라운드 버튼으로 깔끔한 UX를 유지했다.
프론트엔드(JS)에서 백엔드(Python)를 직접 호출할 수 있다. pywebview의 js_api 브릿지 덕분이다. 사용자가 검색 버튼을 누르면 JS가 Python의 search() 메서드를 호출하고, 결과를 JSON으로 받아서 화면에 렌더링한다. 파일 저장도 마찬가지로 JS에서 Python의 save_file()을 호출한다.
수집한 키워드를 3가지 형식으로 저장할 수 있다. 저장 다이얼로그는 pywebview의 네이티브 파일 다이얼로그를 사용해서, macOS에서는 macOS 스타일, Windows에서는 Windows 스타일로 뜬다.
| 형식 | 확장자 | 특징 |
|---|---|---|
| TXT | .txt | 사람이 읽기 쉬운 텍스트 리포트 |
| Excel | .xlsx | 5개 시트로 분류, 헤더 스타일링, 컬럼 너비 자동 조절 |
| JSON | .json | 프로그래밍용 원본 데이터 |
엑셀 내보내기가 가장 강력하다. 5개 시트(네이버 실시간 / 구글 연관 / 네이버 연관 / 구글 급상승 / 전체 키워드)로 분류되고, 헤더에 파란 배경 + 흰색 볼드 폰트 스타일이 자동 적용된다. openpyxl 라이브러리로 구현했다.
클립보드 복사 기능도 있어서, 수집한 키워드를 바로 블로그 편집기에 붙여넣을 수 있다.
PyInstaller가 Python 코드를 macOS 앱 번들(.app)로 패키징하고, hdiutil로 DMG 설치 이미지를 만든다. DMG 안에 Applications 폴더 심볼릭 링크가 포함되어서, 사용자가 앱을 드래그 앤 드롭으로 설치할 수 있다.
Windows에서는 PyInstaller --onefile 옵션으로 단일 .exe 파일을 생성한다. 더블클릭만으로 바로 실행 가능하다.
매번 macOS와 Windows에서 수동으로 빌드하는 건 번거롭다. 그래서 GitHub Actions CI/CD를 구성했다. Git 태그(예: v1.1)를 push하면 자동으로 양쪽 플랫폼에서 빌드가 돌아가고, GitHub Release에 바이너리가 첨부된다.
| 영역 | 기술 | 역할 |
|---|---|---|
| GUI | pywebview | 네이티브 윈도우 + 웹뷰 렌더링 |
| HTTP | requests | API 호출 |
| RSS 파싱 | feedparser | 구글 트렌드 RSS 파싱 |
| 엑셀 생성 | openpyxl | 스타일 포함 XLSX 파일 생성 |
| 패키징 | PyInstaller | .app (macOS) / .exe (Windows) 빌드 |
| DMG 생성 | hdiutil | macOS 설치 이미지 |
| CI/CD | GitHub Actions | 자동 크로스 플랫폼 빌드 + 릴리스 |
| 프론트엔드 | HTML/CSS/JS (인라인) | 다크 모드 사용자 인터페이스 |
구글 트렌드 급상승 검색어 수집, 구글/네이버 자동완성 연관 키워드 수집, TXT/엑셀/JSON 저장 기능, 키워드 클립보드 복사, macOS/Windows 크로스 플랫폼 지원.
NEW 네이버 실시간 검색어 TOP 10 추가 (순위 변동 표시), UI 5탭 체계 전환, 엑셀/TXT 내보내기에 네이버 실시간 섹션 추가, GitHub Actions 자동 빌드 파이프라인 구축.
| 항목 | 설명 |
|---|---|
| 자동 업데이트 | GitHub Release 체크 + 새 버전 다운로드 안내 |
| 스케줄 수집 | 설정 간격으로 자동 반복 수집 |
| 트렌드 차트 | 시간대별 순위 변동 시각화 |
| 다국어 지원 | 일본/미국 등 지역별 트렌드 수집 |
| 병렬 수집 | asyncio로 4개 API 동시 호출 (속도 향상) |