개발
코드 / 아키텍처 / 디버깅
-
에이전트 설정의 산재를 단일 진실로 정리하다
여러 에이전트가 각자 AGENT.md를 들고 있었고, 메인 설정과 동기화가 안 되어 있던 상황을 정리했다. 이 작업 통해 "단일진실 공급원"이라는 원칙이 얼마나 중요한지 다시 한번 체감했다.
읽기 → -
자체 모니터링 트래픽으로 부풀려진 PV 집계 정확화
지난주 통계 대시보드의 일일 PV 데이터에서 약 254개의 중복 집계를 발견하고 제거했다. 원인은 생각보다 흔한 패턴이었다 — 시스템 자체가 모니터링 목적으로 띄우는 uptime 체크 요청들이 사용자 PV로 잘못 섞여 들어간 거다.
읽기 → -
내부 모니터 트래픽으로 부풀려진 PV 수치 정정
자체 uptime 모니터링 시스템(hedvion-uptime)이 매일 약 254번의 HTTP 요청을 날리고 있었는데, 이 요청들이 전체 PV 집계에 그대로 포함되고 있었다. 한 달이면 약 7,600, 일 년이면 93,000 건대의 정체불명의 트래픽이 쌓여 있었던 셈이다. 비즈니스 대시보드에 띄우는 "전체 사이트 일일 PV"가 실제보다 계속 높게 나타나고 있
읽기 → -
콘텐츠 요청 폼이 잘못된 언어로 나오던 버그 수정
k-pop 관련 콘텐츠 서비스를 운영하다 보니 다국어 지원이 필수다. 여러 지역 사용자들이 각각의 모국어나 영어로 접근하는데, 콘텐츠 요청 위젯이 특정 마켓(영어권)에서 올바른 언어로 렌더링되지 않는 버그를 발견했다. 사용자들이 제출한 피드백을 통해 문제를 특정할 수 있었고, 컴포넌트 레벨과 API 응답 레벨의 언어 설정이 동기화되지 않았던 게 원인이었다.
읽기 → -
로그 포맷 파싱 버그로 일부 사이트 적재 실패 문제 수정
여러 사이트의 로그를 한데 모아 집계하는 시스템에서, 특정 로그 포맷이 제대로 파싱되지 않아 일부 사이트(kpopdex, vtuberprofile)의 페이지뷰 데이터가 0으로 기록되는 버그를 마주했다. 요청이 들어올 때마다 데이터가 적재되지 않는 상황이 반복되다 보니 원인을 추적해서 파싱 로직과 문서화를 함께 정리했다.
읽기 → -
favicon 404 에러, 인라인 SVG로 깔끔하게
vtuber 프로필 페이지 배포 후 개발자 도구를 열면 favicon 요청이 계속 404를 던지고 있었다. 외부 파일 참조 방식에서 인라인 SVG favicon으로 전환해서 이 문제를 제거했다.
읽기 → -
탤런트 검색은 빠르게, 즐겨찾기는 간단하게
지난주에 탤런트 프로필 서비스의 검색과 즐겨찾기 기능을 손봤다. 클라이언트 사이드에서 검색을 처리하고, 즐겨찾기는 localStorage에 저장하는 방식으로 구현했는데, 이 결정이 꽤 흥미로운 트레이드오프를 포함하고 있었다.
읽기 → -
로스터 145명 규모 확대와 운영 정책 문서화
프로필 데이터 로스터에 신규 11명을 추가하면서 145명 규모까지 확대했다. 단순한 데이터 추가가 아니라, 이 규모에서 팀이 안정적으로 유지보수할 수 있도록 운영 기준과 쿼터 한도를 문서에 명시한 작업이다.
읽기 → -
커뮤니티 제보로 데이터 품질 관리하기
기존엔 서비스 내 캐릭터 정보를 팀에서만 일방적으로 관리했다. 몇십 명의 로스터를 직접 조사·유지하는 방식인데, 규모가 커질수록 오류가 생기기 쉽고, 사용자가 발견한 정보 오류를 반영할 채널이 없었다. 이번 작업은 사용자가 직접 정보 오류를 신고하고 수정을 제안할 수 있도록 위젯을 추가한 것이다. 동시에 글로벌 사용자를 고려해 다국어 지원을 기본 설계로 잡
읽기 → -
프로필 섹션 라벨 8개국어 지원으로 글로벌 UX 강화
국제화(i18n) 작업으로 프로필의 깊이 있는 정보 섹션 라벨을 8개국어로 완성했다. src/i18n/ui.ts 파일에 today, milestones, embed, upcoming, generations, awaiting_data 라벨들을 여러 언어로 번역·적용한 작업인데, 단순해 보이는 번역 작업 하나가 글로벌 서비스의 사용성에 미치는 영향을 개발팀장
읽기 → -
주년 알림 범위 45일로 확대, 빈 화면 문제 해결
vtuberprofile 서비스의 'Today 주년 윈도우' 기능 범위를 14일에서 45일로 확대했다. 이전엔 기념일이 임박했을 때만 표시돼 빈 페이지가 자주 나타났는데, 다가오는 마일스톤을 미리 보여줌으로써 사용자 참여도를 높이고 콘텐츠 가용성도 개선할 수 있게 됐다.
읽기 → -
21일 임박 윈도우로 스케줄 표시 정리
vtuber 프로필의 업커밍 스케줄 목록에서 의미 없는 데이터들이 노출되는 문제를 정리했다. 영구 프리챗, 이미 지난 프레임 같은 항목들이 섞여 있어서 사용자가 실제 참여할 수 있는 다가올 일정을 한눈에 파악하기 어려웠다.
읽기 → -
로스터 확장하며 채널 자동 연동 엔진 구축
vtuber 프로필 데이터 규모가 크게 늘어나면서, 그동안 수동으로 관리하던 로스터와 채널 매핑을 자동화해야 할 시점이 왔다. 이번 작업은 단순 데이터 추가를 넘어 시스템 전체의 확장성을 갖추는 과정이었다.
읽기 → -
영문 리딩 결과 출력 형식 고도화
영문 사주 리딩 기능을 개발하면서 핵심 로직과 표현 계층을 명확하게 분리하고 연결하는 작업을 마쳤다. reading.ts와 humanizer.ts를 1층과 2층으로 구조화하면서 생긴 변화와, 팀 차원에서 배운 점을 정리해본다.
읽기 → -
정제 로직 계층화로 여러 서비스 수렴
금액 포맷팅(money 패턴)에서 성공한 '1층 enrichment + 2층 presentation' 구조를 텍스트 정제(humanizer) 전반으로 확대했다. 블로그, 정부 데이터, ssul 세 서비스에 동일한 패턴을 적용하는 작업이었다.
읽기 → -
라이브러리의 ESM 포트로 모듈 시스템 현대화
한 프로젝트에서 기존 텍스트 처리 라이브러리를 Node.js 및 ESM 환경에서 사용하려면서, humanizer.mjs 형태의 ESM 포트를 추가했다. 단순한 파일명 변경처럼 보이지만, 그 안에는 모듈 시스템 현대화와 팀 호환성 사이의 여러 선택지가 들어 있었다.
읽기 → -
메타 태그 생성 중 변수 선언 순서 버그 수정
이번엔 꽤 흔하지만 놓치기 쉬운 버그를 잡았다. Astro 레이아웃 파일에서 origin 변수를 나중에 선언했는데, canonical URL이나 OG 이미지를 생성할 때 이미 그 변수를 참조하고 있었던 것. 결국 ReferenceError가 터지면서 페이지 빌드가 실패하는 상황이 생겼다.
읽기 → -
사이트맵에 잘못된 도메인 URL이 박혀 있던 문제 수정
Astro 설정 파일에서 발견한 실수를 고쳤다. astro.config.mjs의 site 옵션이 잘못 설정되어 있어서 sitemap이 잘못된 도메인 URL을 생성하고 있었는데, 이번에 올바른 도메인으로 교정했다.
읽기 → -
여러 서비스 코드, 이제 정리했다
지난 시간 발행 파이프라인은 여러 서비스의 코드가 한곳에 얽혀 있었다. 단일 리포지토리에서 운영하면서 서비스가 늘어나자 점점 더 복잡해졌고, 결국 이번엔 정리를 할 수밖에 없었다. 아울러 검색 최적화 메타데이터도 함께 추가하면서 두 가지 목표를 동시에 달성했다.
읽기 → -
신규 서비스의 디스코드 채널 연동을 표준 패턴으로 추가
vtuber 프로필 서비스를 위한 디스코드 채널 연동 설정을 추가했다. 핵심은 기존에 kpopdex에서 정립된 설정 패턴을 그대로 따라가기로 결정한 것. 단순히 JSON 한 줄 추가가 아니라, 이미 검증된 구조를 신규 서비스에 적용함으로써 설정 일관성을 유지하고 향후 확장성을 확보하는 작업이었다.
읽기 →