개발
코드 / 아키텍처 / 디버깅
-
배포 후 게시물 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() 패턴을 도입하면서 설정과 레이아웃 코드를 정리한 작업이다.
읽기 → -
배포 스크립트에 SEO 자동 주입 단계를 추가해 휴먼 에러 제거
배포 스크립트에 SEO 주입(inject) 단계를 추가했다. 특정 엔트리포인트 파일에만 선택적으로 적용하는 구조로, 배포 자동화 파이프라인을 한 단계 더 진화시킨 작업이다.
읽기 → -
SEO 메타 태그를 CMS 데이터베이스로 동적 전환한 방법
이번에는 SEO 메타 태그 관리를 하드코딩된 방식에서 데이터베이스 중심으로 전환하는 작업을 했다. 사이트의 제목, 설명, 오픈그래프 이미지 같은 SEO 관련 메타 정보를 CMS 테이블에서 동적으로 불러와서 사용하도록 개선했다.
읽기 → -
Next.js 16 업그레이드 후 경로 별칭을 Turbopack 방식으로
next.config.ts에서 webpack 방식의 alias 설정을 turbopack.resolveAlias로 변경했다. Next.js 16으로 메이저 업그레이드하면서 빌드 엔진이 바뀌니 설정도 함께 맞춰야 하는 작업이었다.
읽기 → -
정적 사이트에 CMS 연동 SEO 메타 자동 주입 구조 설계
정적 파일로 생성되는 HTML 페이지들에 CMS에서 관리되는 SEO 메타정보를 자동으로 주입하는 스크립트를 추가했다. 이것은 생각보다 번거로운 문제였는데, 정적 생성의 장점을 유지하면서도 동적으로 변경되는 메타데이터를 어떻게 싱크할 것인가 하는 고민의 결과다.
읽기 → -
DB 기반 동적 SEO 메타데이터로 전환한 과정
Next.js App Router의 generateMetadata 함수를 DB 기반으로 변경하는 작업을 진행했다. 정적 메타데이터에서 벗어나 동적으로 각 페이지마다 필요한 메타데이터를 데이터베이스에서 조회·생성하는 방식으로 전환한 것인데, 생각보다 영향 범위가 넓었다.
읽기 →