-
날조 없이 DB 팩트로 자동 설명 생성하기
새 피처가 나오거나 운영 데이터가 쌓이면, 그것을 설명하는 텍스트가 필요한 순간이 온다. 멤버의 소개글, 앨범의 분석 결과, 혹은 이벤트의 요약—이런 일들은 수작업으로 하면 비용이 크고 일관성도 떨어진다. 그래서 자동화를 생각하는데, 많은 팀이 바로 LLM 을 떠올린다. 빠르고 유연하고 그럴듯하니까. 하지만 이번에는 다르게 접근하기로 했다.
읽기 → -
정책 페이지 4종이 이제 다국어를 지원합니다
네 개의 정책 페이지에 다국어 라우팅을 추가했다. 쿠키 정책, 연락처, 정정 요청, 소스 정책이 사용자의 언어 설정에 맞게 로드되도록 한 것인데, 생각보다 반성할 점이 많은 작업이었다.
읽기 → -
정책 페이지를 7개국어로 지원하며 글로벌 진출 준비하기
정책 페이지 8종을 일괄로 국제화했다. About, Copyright, Privacy, Terms, Cookies, Contact, Source Policy, Correction Request 페이지를 7개국어로 동시에 제공하는 구조를 만들었다.
읽기 → -
그룹명 자동 수집 중 위키 disambiguation 오류 수정
위키 API로 음악 그룹 정보를 자동 수집하면서, 짧고 모호한 그룹명이 여러 검색 결과를 동시에 반환하는 문제를 만났다. 실제로는 한 음악 그룹만 필요한데도 disambiguation 페이지가 걸려서 원하지 않는 결과물들이 섞이곤 했는데, 이번에 정확히 타겟 article을 검증하고 disambiguation을 우회하는 로직을 추가했다.
읽기 → -
그룹 부분 갱신 시 기존 데이터 손상 막기
그룹 메타 갱신 스크립트를 자동화하면서 마주친 딜레마가 있었다. 메타데이터(이름, 설명, 썸네일)만 최신화하고 싶은데, 스크립트가 멤버나 출처 정보까지 밀어넣지 않도록 어떻게 할 것인가. 이번에 seed_groups에 --refresh 모드와 idempotent 가드를 추가해서 이 문제를 풀었다.
읽기 → -
다국어 뉴스 자동 번역 인프라 완성
이번에 뉴스 서비스의 다국어 지원을 위해 110건의 뉴스를 7개 언어로 번역하고, 그 데이터를 범용 i18n 헬퍼/컴포넌트와 연결했다. 이 작업은 단순한 "데이터 채우기"가 아니라, 글로벌 확장을 대비한 인프라 정비의 첫 단계였다.
읽기 → -
사이트맵 hreflang으로 다국어 색인 정확히 하기
이번에 사이트맵에 hreflang 대체본을 완전하게 추가했다. 기존에는 영어만 명시하거나 일부 언어만 처리했는데, 이제 우리가 지원하는 모든 언어를 각 URL마다 명시하고 x-default까지 포함하는 방식으로 개선했다. 단순히 "태그 추가"처럼 보일 수 있지만, 다국어 SEO의 기초를 바로잡는 중요한 작업이었다.
읽기 → -
사이트맵 타임스탠프 오류로 검색 순위 떨어지던 문제 수정
사이트맵(sitemap.xml) 생성 로직에서 일부 데이터 소스의 타임스탠프 컬럼이 잘못 선택되고 있었다. K-pop 뉴스와 멤버 정보를 다루는 쿼리에서 updated_at 대신 created_at을 사용해야 하는데 반대로 적용되고 있던 것. 이번 작업은 단순 컬럼 교정에 그치지 않고, 여러 데이터 소스를 조회할 때의 에러 처리 방식도 함께 개선했다.
읽기 → -
얇은 콘텐츠 페이지 검색 제외, 핵심 콘텐츠만 노출
얼마 전 검색 엔진 최적화(SEO) 차원에서 사이트의 페이지 인덱싱 정책을 개선했다. 앨범, 회사, 팬덤 관련 페이지들은 검색 결과에서 제외하고, 그룹·뉴스·멤버 같은 가치 있는 콘텐츠만 명시적으로 구글에 노출하는 작업이었다.
읽기 → -
도메인 변경, 메타데이터 누락이 SEO 페널티 되지 않도록
도메인을 kpop.hedvion.com에서 kpopdex.com으로 통으로 갈아 엎었다. 단순 DNS 레코드 수정이 아니라 SEO와 크롤링 관점에서 검색 엔진이 혼동하지 않도록 모든 메타데이터를 동시에 갱신해야 하는 작업이었다.
읽기 → -
광고 플랫폼 인증을 위한 ads.txt 배포
ads.txt 파일을 프로젝트의 public 폴더에 추가하여 AdSense 퍼블리셔 인증을 완료했다. 작은 한 줄짜리 추가처럼 보이지만, 광고 수익 시스템의 첫 신뢰 기반을 다지는 작업이었다.
읽기 → -
사이트 전역 AdSense 광고 로더 추가
Base.astro 레이아웃 파일의 head 영역에 AdSense 로더 스니펫을 삽입했다. 이제 사이트의 모든 페이지에서 광고가 로드되고 노출될 준비가 됐다는 뜻이다.
읽기 → -
표준 정책페이지 풀세트 추가로 준수 기반 정비
이번엔 서비스의 필수 정책페이지들을 한 번에 추가했다. 쿠키 정책, 연락처, 출처 정보, 수정요청 채널 이렇게 네 개 페이지를 만들고, 푸터에서 쉽게 접근할 수 있도록 링크도 연결했다. 간단해 보이지만 생각해볼 게 꽤 많은 작업이었다.
읽기 → -
외부도메인 인벤토리 등록으로 운영 일관성 확보
새로운 외부도메인을 docs 에 인벤토리로 등록했다. 팀이 서로 다른 서비스/도메인들을 다룰 때마다 일관된 설정과 지침을 참고할 수 있도록 하려는 의도였다.
읽기 → -
OAuth 요청 한도, 백필 스크립트로 우회하다
대량 초기 데이터를 로드할 때 OAuth 요청 한도에 자꾸 부딪혀서, 자동화 스크립트로 문제를 우회하는 방식을 택했다.
읽기 → -
관리자 DB 풀에 쌓이던 좀비 연결 정리하기
관리자 DB 연결이 계속 누수되던 문제를 발견하고 고정했다. globalThis에 고정된 커넥션 풀 인스턴스가 idle 타임아웃을 제때 회수하지 못하면서 발생한 메모리 누수였다.
읽기 → -
팀 인수인계 시 함정을 미리 알려주는 문서 작성
새로운 세션(혹은 프로젝트 단계)이 시작될 때 이전 팀이 알던 내용을 어떻게 다음 팀에 효과적으로 넘길 것인가 하는 문제는 생각보다 복잡하다. 특히 개발 팀장이라면 단순히 코드 리뷰만 하는 게 아니라, 팀 구성원의 온보딩, 의사결정의 배경, 그리고 숨어 있는 함정까지 전달할 책임이 있다.
읽기 → -
생일·컴백·신곡을 한눈에
팬들이 자주 놓치는 정보들—생일 축하, 컴백 카운트다운, 최근 발매—을 한곳에서 보도록 /today 페이지를 새로 만들었다. "라이브 레이어"라고 부르는 이 기능은 단순한 정보 나열이 아니라, 자동화 봇이 지속적으로 데이터를 보강하고, 캘린더 구독(.ics)까지 지원하는 통합 대시보드다.
읽기 → -
멤버 활동 보이기, 그룹 찾기 쉽게 하기
이번에 멤버페이지 강화, 검색, SEO 개선을 한꺼번에 손봤다. 한 번의 커밋에 여러 영역이 섞여 있는데, 사실 이건 의도적이었다. 어느 정도 서로 다른 도메인들이지만, 모두 "사용자가 서비스를 어떻게 발견하고 참여하는가"라는 주제로 연결되어 있었기 때문.
읽기 → -
신상 그룹 등록 프로세스 완전 자동화
신상 그룹을 만들 때마다 시스템 여러 곳을 손으로 거쳐야 했다. 초기 데이터 시드부터 스케줄 설정, 소식 발행, 다국어 번역까지 일관성 있게 처리하려면 수작업과 체크리스트가 필수였는데, 이번에 이 전체 흐름을 하나의 스크립트로 자동화했다.
읽기 →