개발
코드 / 아키텍처 / 디버깅
-
채널 메시지로 훅을 자동 실행하는 리스너 설계기
특정 채널에서 메시지가 올라오면 자동으로 훅을 실행하는 기능을 listener에 추가했다. 이 작업은 작지만 팀의 워크플로우를 꽤 바꾸는 지점이라 회고 삼아 정리해본다.
읽기 → -
Codex 사용량 모니터를 CLI와 Discord 알림으로 만든 이유
그 날 팀이 모니터링 대시보드를 원했다. Codex 같은 대규모 도구의 사용량을 실시간으로 추적해야 한다는 요구였다. 숫자만 알아야 하는 게 아니라, 팀의 이목이 닿는 곳에서 바로 알림이 떴으면 했다. 그래서 만들었다: CLI 도구와 Discord 연동이 함께하는 사용량 모니터.
읽기 → -
구독 티어를 Free·Premium·Family로 재편하며 결제와
구독 서비스의 tier를 기존 구조에서 Free/Premium/Family 세 가지로 재편했다. 간단한 변경처럼 보이지만 실제로는 권한 관리 모델부터 결제 로직, 다국어 처리까지 여러 계층을 함께 조정해야 하는 구조적 작업이었다.
읽기 → -
성경 읽기 앱의 TTS 음성을 자연스러운 남성 음성으로 업그레이드
일일 성경 읽기 서비스의 TTS(Text-To-Speech) 음성 엔진을 Google Chirp3-HD/Orus(차분한 남성) 음성으로 변경했다. 단순한 음성 업그레이드처럼 보이지만, 이 작업엔 사용자 경험, 품질 기준, 그리고 장기적 기술 선택이 담겨 있다.
읽기 → -
블로그 발행 시 Discord 알림 자동화로 팀 가시성 개선
블로그 포스트가 발행될 때마다 팀 채널로 자동으로 알림이 날아오도록 했다. 단순해 보이지만 이런 작은 자동화가 팀의 작업 가시성과 반응성을 어떻게 바꾸는지 되짚어본다.
읽기 → -
배포 후 게시물 ID를 디스코드 버튼 알림으로 자동 전달
배포 스크립트에서 새로 생성된 게시물의 post_id를 자동으로 캡처해서 디스코드 알림으로 팀에 전달하는 기능을 추가했다. 기존에는 배포 후 결과를 수동으로 확인하고 팀에 공유해야 했는데, 이제 버튼 형태로 즉시 전달되도록 자동화했다.
읽기 → -
다이어트·장례·보험·로또 콘텐츠 내리기 알림에 게시물 ID 추가
여러 도메인에서 관리하는 콘텐츠가 내려질 때, 팀이 빠르게 인지할 수 있도록 Discord 알림을 자동화하는 작업을 했다. 단순해 보이지만 분산된 시스템에서 **투명성을 확보하는 데 꽤 중요한 변경**이었다.
읽기 → -
디스코드 발행 알림에 삭제 버튼 인터랙션 추가
디스코드로 발행 알림을 보낼 때 버튼을 달았다. 그냥 공지만 하던 방식에서 한 발 나아가서, 사용자가 메시지 아래의 🗑️ 버튼을 눌러 직접 처리할 수 있도록 한 작업이다.
읽기 → -
Discord 알림 봇에 메시지 삭제 버튼 기능 추가
Discord 봇이 포스팅하는 메시지에 삭제 버튼을 달 수 있도록 discord_notify 함수에 post_ids 파라미터를 추가했다. 단순히 "파라미터 하나 더 넣었다"는 것처럼 들릴 수 있지만, 이건 봇의 메시지 상호작용 설계에서 꽤 중요한 변화다.
읽기 → -
블로그 URL 구조 개편 후 Nginx 301 리다이렉트로 레거시 링크 보존
이번엔 블로그의 15개 insights 포스트가 root로 이동하는 URL 구조 개편에서 발생한 리다이렉트 설정을 손봤다. Nginx 설정 파일에 301 permanent redirect를 추가해서 기존 링크들이 계속 유효하도록 처리했다.
읽기 → -
여러 봇의 SEO 생성 실패를 공통 폴백으로 안정화
여러 봇(블로그, 정부, 금융, 보험, 복권, 폼팩)에서 사용하는 SEO 생성 기능에 폴백 로직을 추가했다. 이전까지는 SEO 생성이 실패하면 그냥 실패로 끝나거나 예상 밖의 에러가 발생하는 경우가 있었는데, 이번에 공통 모듈에 폴백 메커니즘을 심으면서 각 봇이 좀 더 견고하게 동작하도록 만들었다.
읽기 → -
여러 봇의 SEO 생성 실패 시 서비스 중단 방지 처리 추가
SEO 메타 생성이 실패해도 서비스가 중단되지 않도록 fallback 로직을 여러 봇 모듈에 추가했다.
읽기 → -
SEO 메타 데이터 누락 글에 자동 폴백 생성 추가
insert_meta_post.py 스크립트에 SEO 메타 데이터 생성 폴백 로직을 추가했다. 기존에 metaTitle이나 metaDesc가 없는 글들에 대해 자동으로 seo_generate 함수를 통해 대체값을 생성하도록 개선한 작업이다.
읽기 → -
운세박스 배포 스크립트에서 사이트명 옵션을 명시화해 안전성 향상
publish.sh 에서 insert_meta_post 호출 시 --site-name 옵션을 명시적으로 전달하는 작업을 했다.
읽기 → -
크롤러 SEO 메타데이터 생성 실패 시 폴백으로 파이프라인 중단 방지
여러 크롤러 봇에서 SEO 메타데이터 생성 로직의 fallback을 구현했다. 외부 의존성이 있는 작업은 실패할 수 있으니, 실패했을 때도 시스템이 우아하게 동작하도록 만드는 게 이번 작업의 핵심이다.
읽기 → -
다이어트·장례·반려동물 봇 SEO 생성 실패에 폴백 추가
diet, funeral, pet 봇 세 서비스의 SEO 생성 로직에 fallback 을 추가했다. 한 번의 API 호출 실패가 전체 서비스 영향으로 이어질 수 있다는 판단 때문이었다.
읽기 → -
Play Console 출시를 위한 개인정보처리방침 페이지 추가
Play Console 같은 앱 배포 플랫폼에 출시하려면 피할 수 없는 관문이 있다. 바로 개인정보처리방침(Privacy Policy) 문서 제출이다. 이번에 app/web/privacy.html 파일을 추가한 건 그 일환이었다.
읽기 → -
모바일 앱 광고 아이디와 릴리즈 서명을 프로덕션용으로 전환
모바일 앱을 실제 스토어에 배포하려면 개발 환경의 편의성과 프로덕션 환경의 보안·정합성 사이의 균형을 맞춰야 한다. 이번 작업은 그 분기점을 명확히 하는 과정이었다.
읽기 → -
프로덕션 빌드에서 절대 경로 문제로 Turbopack을 webpack으로
개발 단계에서는 빨라야 한다. Turbopack이 매력적이었던 이유다. 그런데 프로덕션 환경에 배포할 땐 얘기가 달랐다. macOS 머신에서 빌드한 결과물에 절대 경로가 고스란히 남아있는 현상을 발견했고, 이게 배포 재현성과 보안상 문제가 될 수 있다는 판단 아래 webpack으로 전환했다.
읽기 → -
SEO DB 모듈을 빌드 타임에서 런타임 전용으로 전환한 방법
SEO 메타데이터를 관리하는 데이터베이스 모듈을 런타임에만 로드해야 하는 상황을 마주쳤다. 빌드 단계에서 불필요하게 실행되는 import를 피하기 위해 new Function() 패턴을 도입하면서 설정과 레이아웃 코드를 정리한 작업이다.
읽기 →