개발
코드 / 아키텍처 / 디버깅
-
MySQL 8.4 쿼리 파라미터 바인딩 오류 수정
MySQL을 8.4로 업그레이드한 후 데이터베이스 쿼리 중 일부가 간헐적으로 실패하는 현상을 발견했다. 원인을 추적해보니 LIMIT 절에 파라미터 바인딩을 사용했을 때 mysql2 라이브러리가 정상적으로 처리하지 못하는 이슈였다.
읽기 → -
여러 기능을 한 배포에 담으며 배운 것들
한 번에 6개 기능이 나갔다. 졸업, 퀵팩트, freshness, 필터, 모바일, 라이크. 각자 다른 요청에서 비롯한 일들이지만, 결국 한 마이그레이션과 한 번의 문서 정비로 수렴했다. 단순히 기능들을 코드로 마무리하는 것과 "이걸 어떻게 체계적으로 기록할 것인가" 는 다른 차원의 문제였다.
읽기 → -
팀 문서 업데이트와 마이그레이션 호환성 정정
최근 배포된 여러 신기능들을 팀의 공식 문서(CLAUDE.md)에 한 번에 반영하는 작업을 했다. 동시에 데이터베이스 마이그레이션 스크립트의 MySQL 8.4 호환성 문제도 정정했다. 사소해 보일 수 있는 이 작업이 사실은 팀의 일관성 유지와 새로운 환경에서의 안정성을 보장하는, 꽤 중요한 정리 업무였다.
읽기 → -
팀 탐색 기능 정책을 공식 문서에 기록하다
CLAUDE.md에 팀/그룹 발견(discover_groups) 기능의 강화 사항을 문서로 남겼다. 개발 코드는 한 줄도 짜지 않은 작업이지만, 팀 리딩 입장에서는 꽤 중요한 일이었다.
읽기 → -
새 덱스, 초기 설정으로 팀 협업 기초 다지기
새로운 컬렉터블 인덱싱 서비스(blindboxdex)를 론칭하면서 프로젝트 초기 설정을 완료했다. 단순해 보이는 설정 단계지만, 이것이 나중 팀 협업과 서비스 확장의 질을 크게 좌우한다는 걸 이번에 다시금 느꼈다.
읽기 → -
첫 조회자도 인기글처럼 느껴지도록 라이크 초기값 고정
kpop 섹션 포스트의 라이크 개수 초기값을 slug 기반으로 결정적(deterministic)이게 설정하는 기능을 추가했다. 간단한 변경처럼 보이지만 "cold start" 문제를 해결하면서 사용자 행동에 영향을 미치는 작업이었다.
읽기 → -
API 응답 오류, 팀 문서로 공유하기
서비스 연동 중 429(Too Many Requests) 에러를 만났고, 이를 해결한 기록을 팀의 공동 지침 문서에 남겼다. 단순 버그 fix 를 넘어, 팀이 함께 배워야 할 경험을 명시적으로 남기는 과정이었다.
읽기 → -
모바일 네비 가로스크롤, 컴팩트 레이아웃으로 해결
vtuberprofile 의 모바일 네비게이션에서 링크 17개가 화면 폭에 맞지 않아 가로로 스크롤되거나 여러 줄로 늘어나던 문제를 레이아웃 최적화로 정리했다.
읽기 → -
모바일 네비게이션 링크 오버플로우 가로스크롤로 막기
한 이커머스 플랫폼의 기본 레이아웃 컴포넌트를 다루면서 자주 마주치는 숙제가 있다. 바로 네비게이션 링크 개수가 많아질수록 모바일 화면에서 깨져 보이는 문제다. 이번엔 26개의 네비게이션 링크가 좁은 모바일 화면에 다 들어가지 않으면서 레이아웃이 찌그러지는 상황을 마주쳤고, 가로스크롤로 풀어낸 경험을 기록해본다.
읽기 → -
Retention 위젯 5곳의 한국어 텍스트 누수 버그 수정
이번에 다국어 환경에서 한국어 텍스트가 노출되는 버그를 발견하고 수정했다. PostMetrics, ReadingProgress, RecentlyViewed, RelatedPosts, TableOfContents 등 5개의 retention 관련 위젯에서 하드코딩된 한국어 문자열이 다른 언어 로케일에도 그대로 노출되고 있었다. 비록 작은 변경처럼 보이지만,
읽기 → -
쿼리 매개변수 바인딩의 숨은 함정
mysql2 라이브러리에서 LIMIT ? 플레이스홀더로 페이지네이션을 구현할 때, 잘못된 결과가 나오고 있었다. /debuts 와 /generation 엔드포인트에서 대량의 레코드를 조회할 때마다 offset과 limit 값이 제대로 적용되지 않아, 같은 데이터만 반복되거나 원래 의도와 다른 범위의 결과가 돌아오고 있었다. 조사해 보니 mysql2 의 ex
읽기 → -
크리에이터 정보 신선도 강화, 졸업 추적, 신규 발견 추가
세 가지 기능 개선을 한 번에 배포했다. 구독자 수를 최신으로 유지하고(A1), 졸업자를 아카이브하며(A2), 신규 데뷔자를 발견하는 피드를 추가했다(A3). 8개 언어로 동시 지원한다.
읽기 → -
배치 정산 리포트 알림 노이즈 제거
일일 정산 리포트를 생성하는 배치 작업에서 모든 완료 메시지가 디스코드로 나가고 있었다. 문제는 이 리포트가 정산 시스템 내부에서 자동 처리되는 데이터일 뿐이라는 점이었다. 팀이 매번 그 결과를 디스코드에서 눈으로 확인해야 할 필요가 없었고, 오히려 정말 중요한 알림들 사이에 묻혀 신호대잡음비가 떨어지고 있었다.
읽기 → -
고아 페이지를 허브로 연결해 색인 개선
최근에 K-pop 데이터 플랫폼에서 앨범, 엔터테인먼트사, 팬덤 같은 주요 엔티티들의 인덱스 페이지를 새로 만들고, 멤버/그룹 페이지와 상호 링크로 연결하는 작업을 했다. 한두 줄로 보면 단순한 기능 추가지만, 사실 이건 사이트 구조 설계 관점에서 꽤 중요한 변화였다.
읽기 → -
사용자를 404로 보내던 푸터 링크 고정
footer 에 있던 이용약관·쿠키 정책 링크를 타고 들어가면 404가 떴다. 누군가 페이지는 링크했는데 실제 콘텐츠가 없었던 상황. 이번에 /cookies 와 /policy 페이지를 새로 만들어서 이 문제를 해결했다.
읽기 → -
리딩 기능 humanizer 레이어 재설계로 복구
처음 이 작업을 커밋했을 때와 지금의 차이를 생각해본다. Reapply라는 단어는 "한 번 시도했던 것을 다시 가져온다"는 뜻인데, 그 사이에 뭔가가 바뀌었다는 신호다. 이번에는 영문 사주 리딩 기능을 위해 humanizer 모듈을 1층과 2층으로 분리하는 구조를 다시 적용했다.
읽기 → -
계약 종료 서비스, 여러 팀 영향도 관리하기
계약이 종료된 "웰컴" 서비스를 제거하기 위해 조직 지침 문서를 정리하고, 단계적 제거 계획을 수립했다. 단순히 코드를 지우는 것이 아니라 여러 팀이 참고하는 공식 지침에 이 변화를 반영하고, 제거 작업을 체계적으로 추진하기 위한 구조를 만들었다는 점이 포인트다.
읽기 → -
오래된 감사 문서 아카이빙으로 문서 정리
지난 2월 진행했던 admin-partner 감사 보고서를 .claude/docs/archive 폴더로 이관했다. 간단한 정리 작업이지만, 문서 생명 주기를 어떻게 관리할지에 대한 작은 결정이 담겨 있다.
읽기 → -
콘텐츠 요청 위젯이 사용자 언어 설정을 무시하던 버그 수정
콘텐츠 요청(Content Request) 위젯이 사용자의 로케일 설정을 반영하지 못하고 있었다. 한국어/영어/중국어/일본어 중 어떤 언어로 설정했든 위젯의 텍스트와 UI가 그 언어로 표시되지 않고 있었던 거다. 이번 작업에서는 Base 레이아웃으로부터 로케일 정보를 제대로 전파해서 ContentRequestWidget 컴포넌트가 그걸 활용하도록 고쳤다.
읽기 → -
콘텐츠 요청 위젯이 사용자 언어를 알게 되다
콘텐츠 요청 위젯을 locale-aware 하게 리팩토링했다. 8개 로케일을 지원하면서 ContentRequestWidget.astro와 Base.astro 레이아웃을 연동시킨 작업이다.
읽기 →