-
그룹 수집 요청 과다로 인한 API 오류 차단
외부 서비스와 연동하는 자동화 봇을 운영하다 보면 정기적으로 데이터를 수집해야 하는데, 이때 가장 자주 마주치는 문제가 API 레이트 제한이다. 이번엔 그룹 데이터를 수집하는 seed_groups 자동화에서 발생하던 429 에러(Too Many Requests)를 해결하기 위해 요청 throttle을 상향하고, 동시에 불필요한 데이터를 조기에 필터링했다.
읽기 → -
계정 설정과 팀 지침을 버전 관리로 정리
서비스의 외부 계정 설정(GSC/AdSense 등)과 팀 개발 지침을 docs 디렉토리에 정리하고, git 저장소에 추가했다. 산재된 정보가 버전 관리되면서 팀 전체가 동일한 정보를 참고할 수 있는 구조가 갖춰졌다.
읽기 → -
프로젝트 전환 시 만나는 서버 함정 문서화
한 서비스에서 다른 서비스로 인수인계하거나 전환하는 과정은 생각보다 복잡하다. 겉으로는 "코드만 옮기고 배포하면 되지 않나" 싶지만, 실제로는 배포 환경, 네트워크 설정, 외부 연동 등 크고 작은 차이들이 도사리고 있다. psy에서 curiodot로 전환하면서 우리 팀이 마주한 서버 함정들—배포타겟, 포트, indexnow, 위젯 설정 관련 이슈들이—반복되
읽기 → -
검색 엔진 핑을 빌드 시스템으로 정식화
오래전부터 돌아가던 indexnow-ping 스크립트를 /opt/psy-build 라는 격리된 디렉토리에서 빼내 정식 빌드 파이프라인으로 옮기는 작업을 했다. 작은 변경으로 보일 수 있지만, 이 정식화 과정에서 배운 게 꽤 있어서 글로 남긴다.
읽기 → -
음악 발견 봇의 장르별 노이즈 필터링 정확도 개선
음악 발견 시스템에서 특정 신호가 **없을 때**의 필터링이 제대로 동작하지 않던 문제를 수정했다. 사소해 보이지만, 자동화 시스템에서 "조건부 처리"의 함정을 보여주는 좋은 사례다.
읽기 → -
한국 시그널 중심화로 발견 엔진 정확도 개선
그룹 발견 봇이 관련성 없는 해외 신호로 노이즈가 심했다. discover_groups.py 에서 해외 신호가 존재할 때만 제외하는 로직을 추가해서 재현율을 높였다. 핵심은 "단순 제외"가 아니라 "한국 스텁은 절대 버리지 않는다"는 전략이었다.
읽기 → -
웹 크롤링 정확도 높이고 속도 제한 회피
한국 그룹을 자동 발견하는 과정에서 두 가지 문제가 누적돼 있었다. 검색 결과에 부적절한 그룹들이 섞여 들어오는 것과, 외부 위키 API를 너무 빨리 두드려서 속도 제한(429)에 걸리는 것. 이번 fix에서 relevance 필터와 throttle 메커니즘을 함께 넣어서 정확도와 안정성을 동시에 높였다.
읽기 → -
도메인 전수 정리, 설정부터 배포까지 한눈에 확인
도메인과 경로명을 이전 명칭에서 새 명칭으로 전체 통일하는 작업을 마쳤다. 단순한 코드 리팩토링이 아니라 프로젝트 전반의 설정, 문서, 빌드, 배포 스크립트까지 걸쳐 있었기 때문에 생각보다 꼼꼼한 검증이 필요했다.
읽기 → -
자동 그룹 발견 중복 제거
봇이 그룹을 자동 발견할 때 괄호가 있는 표제어 중복을 제거하고, 서브유닛까지 포함되는 문제를 걸러냈다.
읽기 → -
신규 그룹을 자동 발견하는 봇 만들기
wiki에 올라오는 신규 그룹들을 수동으로 일일이 찾아 등록하는 프로세스를 자동화하는 discover_groups 기능을 만들었다. 연도별 카테고리를 주기적으로 스캔해서 발견된 그룹들을 시스템에 자동으로 반영하는 방식이다.
읽기 → -
영어 문서 없는 신인 그룹도 자동으로 커버
seed_groups 자동화 로직을 다루던 중, 신인(마이너) 그룹들의 자료 수집이 깨지는 케이스를 만났다. 원인은 단순했는데, 봇이 영어 Wikipedia만 참고하고 있었기 때문이다. 한국어 문서도 함께 찾도록 fallback을 추가해서 커버리지를 늘렸고, 이 과정에서 배운 몇 가지 패턴을 정리한다.
읽기 → -
자료요청 위젯과 카운팅을 분리하다
사용자가 콘텐츠를 직접 요청할 수 있는 자료요청 위젯을 Astro 프론트엔드에 추가하면서, 그 요청을 추적하고 집계하는 별도의 카운터 서버를 구축했다.
읽기 → -
검증된 자료요청으로 신뢰성 높이기
사용자가 추가되었으면 하는 자료나 콘텐츠를 직접 요청할 수 있는 채널이 필요했다. 많은 팀이 이런 피드백을 슬랙 DM이나 메일로 받다 보니 체계가 없었고, 실제 사용자 요구인지 스팸인지 구분하기도 어려웠다. 그래서 이번엔 위젯과 API를 함께 만들어 신뢰도 높은 채널로 만들기로 했다.
읽기 → -
멤버 검색 페이지 추가로 다국어 라우팅 기초 마련
멤버 검색 페이지를 추가하고 데이터 시드를 설정하는 작업을 했다. 단순히 새로운 페이지 하나를 띄우는 것처럼 보이지만, 사실은 팀이 앞으로 다국어 기능을 확장할 때 따를 수 있는 패턴을 정립한 것이다.
읽기 → -
광고 문의 폼 도배 방어 추가
광고 관련 문의가 늘면서 스팸성 자동 제출이 문제가 되기 시작했다. 단순히 폼을 여러 번 클릭하거나 스크립트로 반복 요청을 보내는 수준을 넘어, 특정 IP에서 짧은 시간에 대량 제출되는 패턴이 눈에 띄었다. 운영자가 처리해야 할 건전하지 않은 요청들이 계속 쌓이고, 정말 필요한 고객 문의를 구분하기 어려워지는 상황이었다. 이번 작업에서는 서버 레벨의 rat
읽기 → -
광고문의 도배 차단한 이중 rate limiting 설계
광고 문의 폼 신청이 계속 반복되거나 악의적으로 도배되는 상황을 마주했다. 이를 해결하기 위해 서버와 클라이언트 양쪽에 rate limiting을 엮었고, 그 과정에서 배운 여러 트레이드오프를 정리해본다.
읽기 → -
광고 문의 폭주 방어하기
광고 문의 기능이 연달아 도배되는 문제가 터졌다. 한두 사람이 의도적으로 폭주시키거나, 자동화 도구가 반복 요청을 날리는 상황들이 있었고, 이게 정상 사용자 입장에서는 경험을 방해할 뿐 아니라 서버도 불필요하게 소비시키고 있었다. 단순한 스팸 차단이 아니라 시스템 안정성과 사용 편의성 모두를 고려해서 방어 체계를 짜기로 했다.
읽기 → -
웹 광고문의 채널 자동화하기
광고·제휴 협력사들이 외부 이메일이나 전화로 문의를 보내오던 것을 웹 폼으로 받고, 그 내용을 바로 메일로 자동 발송하는 시스템을 만들었다. 간단한 기능이지만 여러 레이어를 거쳐야 하는 작업이었고, 이 과정에서 오래된 설정 문제까지 발견해서 함께 정리했다.
읽기 → -
우하단 플로팅 위젯으로 제휴 문의 접근성 개선
사이트 전역에서 광고·제휴 문의를 받을 수 있는 플로팅 위젯을 추가했다. 기존엔 연락처 페이지나 푸터 링크를 통해서만 문의할 수 있었는데, 이제 사용자가 어느 페이지에 있든 우하단의 작은 위젯을 통해 즉시 문의를 보낼 수 있게 됐다.
읽기 → -
플로팅 위젯으로 광고·제휴 문의 수집 시작
광고나 제휴 제의를 받을 창구가 필요했다. 메인 네비게이션에 숨겨진 링크보다는, 방문자 눈에 띄는 곳에 항상 열어둔 문의 창이 낫다고 판단했다. 그래서 우하단 플로팅 위젯 + 자동 메일 발송 API를 한 묶음으로 추가했다.
읽기 →