-
유료 버전을 별도로 배포하기 위해 applicationId 분리
Play Store에서 같은 앱의 유료/무료 버전을 독립적으로 배포하려고 Android 앱의 applicationId를 변경했다. 한 줄짜리 설정 변경처럼 보이지만, 사실 아키텍처, 배포, 테스트 전체가 얽혀 있던 결정이었다.
읽기 → -
설정값 변경, 이틀 만에 원상복구
며칠 전 어떤 설정값을 바꿨다가 사용자 피드백을 받고 즉시 되돌렸다. 큰 기능 개발이나 버그 수정은 아니지만, 이런 작은 의사결정과 롤백이 반복되면서 배운 게 많아서 정리해 본다.
읽기 → -
사용자 피드백으로 게시 목표값 빠르게 복구
6월 11일 게시 일일 목표를 4로 낮춘 지 불과 이틀 만에, 13일에 다시 80으로 올렸다. 짧은 기간에 목표값이 두 번이나 변경된 이 커밋은 단순한 설정값 복구를 넘어, 팀이 사용자 피드백을 얼마나 빠르게 수용하는지, 그리고 의사결정을 얼마나 유연하게 취할 수 있는지를 보여주는 사례가 되었다.
읽기 → -
거짓 경보만 계속 울리던 슬롯 발행 타임아웃
슬롯 확인 배경 작업에서 계속 울리던 타임아웃 경보를 결국 때려잡기로 했다. 발행 프로세스의 타임아웃 한계를 15분에서 45분으로 늘렸다.
읽기 → -
새 도메인 LIVE, 팀 모두가 알도록 문서화
두 서비스의 운영 도메인이 변경되면서 팀 공용 문서를 업데이트했다. growthebutton.com과 own1second.com으로 각각 LIVE 되는 서비스들이, 기존 도메인에서 301 리다이렉트로 마이그레이션되면서 발생한 작업이다. 언듯 보면 간단한 문서 수정처럼 보이지만, 이건 사실 팀의 "컨텍스트 동기화"라는 더 큰 작업의 일부였다.
읽기 → -
라이브 시계 시간 불일치 버그 수정
SSR 환경에서 서버와 클라이언트의 시간 표시가 달라지던 문제를 고쳤다. 라이브 시계 컴포넌트가 서버의 KST(한국 표준시)로 렌더링되면서 접속자의 로컬 타임존과 맞지 않던 것. 마운트 직후 클라이언트 로컬시간으로 즉시 보정하는 방식으로 해결했다.
읽기 → -
환경별로 다른 OG URL, 환경 변수로 통일
src/app/layout.tsx 에서 소셜 미디어 공유용 Open Graph 메타데이터를 환경 변수 기반으로 수정하고 metadataBase를 추가했다. 작은 수정처럼 보이지만, 개발/스테이징/프로덕션 환경을 분리해서 운영하는 팀이라면 꽤 자주 마주치는 함정이다.
읽기 → -
에포크 상수 오류로 깨진 시간 표시 수정
시간 계산의 기준점이 되는 epoch constants가 구 기준년도에 맞춰져 있었다. 2026년 환경으로 마이그레이션하면서 이 문제를 일괄 정리했다.
읽기 → -
버튼 UI에 게임스러운 감각을 더해 완성도를 높였다
버튼 비주얼을 아케이드 스타일로 리디자인하고 진행 상황 표시 모티프를 추가했다. package.json, ButtonClient.tsx, globals.css를 손본 이번 작업은 단순 스타일 개선을 넘어, 제품의 시각적 일관성과 사용자 상호작용감을 함께 다루는 작업이었다.
읽기 → -
론칭을 한 문서로 정리하다
LAUNCH.md 문서를 작성했다. Show HN, Reddit, X 같은 커뮤니티 플랫폼별 홍보 전략, 마일스톤 캘린더, 체크리스트를 한곳에 모았다.
읽기 → -
제품 런칭 가이드 문서 체계화
런칭 일정이 확정되면서 팀원들이 각자 다른 버전의 체크리스트를 들고 움직이더라. 누군가는 이메일로 받은 노트를 가지고, 누군가는 Slack 스레드를 파고 있고, 또 누군가는 공유받은 문서의 버전이 다른 거다. 그럼 늘 마지막 단계쯤에서 "어, 이건 누가 책임지지?"라는 혼란이 반복된다. 그래서 LAUNCH.md를 정리하기로 결정했다.
읽기 → -
대기 중인 결제가 중복 처리되던 버그 수정
결제 플랫폼에서 pending 상태의 주문이 새로운 checkout으로 덮어씌워지면서 같은 결제를 두 번 처리하려던 경합 조건을 발견하고 수정했다.
읽기 → -
대시보드에 버튼·응답시간 메트릭 독립 추적 추가
지난주 stats-dashboard 스크립트에 두 가지 새로운 메트릭을 등록했다. 버튼 상호작용과 초 단위 응답시간(seconds)을 추적하는 토이 메트릭인데, 각각 전용 로그를 갖춰서 독립적으로 수집할 수 있게 했다. 단순해 보이지만, 이 작은 변경이 팀의 관측성 기반을 다시 한 번 정리하는 좋은 타이밍이었다.
읽기 → -
인벤토리 항목 확장, 27개 항목으로 문서 정비
사내 설정과 구성 정보를 담는 docs/hedvion-CLAUDE.md 파일의 인벤토리를 정리했다. 27번과 28번 두 개 항목(growthebutton.com, own1second.com)을 신규 등재하고, 전체 카운트를 27개로 업데이트하는 작업이었다.
읽기 → -
구매 도메인 변경으로 개발 환경 설정 최신화
APP_URL을 새 도메인으로 변경하고 .env.example 파일도 함께 업데이트했다.
읽기 → -
환경 설정부터 올바른 도메인으로
.env.example 파일의 APP_URL을 구매 도메인으로 변경하는 작은 작업을 했다. 환경 변수 파일의 한 줄 수정이지만, 새 팀원 온보딩부터 로컬 개발 환경까지 연쇄적으로 영향을 미치는 일이었다.
읽기 → -
결제 주문 데이터가 저장 안 되던 쿼리 분해 버그 수정
결제 처리 로직에서 데이터베이스 INSERT 쿼리 결과를 잘못 다루고 있었다. 쿼리 함수가 반환하는 형태와 코드에서 기대하는 형태가 맞지 않아, 결제 주문 정보가 제대로 저장되지 않는 상황이 발생했고, 이를 수정했다.
읽기 → -
프로젝트 초기화 커밋으로 개발 기초 다지기
The Button (grow-the-button) 프로젝트의 초기 구현이 시작됐다. 새 프로젝트의 첫 커밋이 들어왔는데, 흥미롭게도 실제 기능 구현이 아닌 **환경 설정과 보일러플레이트** 파일들만 들어갔다. 단순히 "프로젝트 만들고 시작했네" 정도로 볼 수도 있지만, 사실 이 커밋이 이후 몇 개월간 팀의 개발 경험과 코드 품질을 좌우하는 기초가 될 거라
읽기 → -
린팅·환경 설정으로 개발 시작 지점 마련
새 프로젝트를 시작하는 첫 커밋은 대개 무심하게 넘어간다. 보일러플레이트를 깔고, 린팅 설정을 넣고, README 작성하고 — 별 거 아닌 일처럼 보인다. 하지만 초기 빌드(initial build)는 앞으로 6개월, 1년 동안의 개발 경험을 좌우하는 기초다. 이번에는 그 경험을 글로 남겨본다.
읽기 → -
별자리 교차 분석 섹션과 공유 잠금 콘텐츠 추가
최근에 점성술 보고서에 새로운 섹션을 추가하고, 그 섹션의 일부 콘텐츠를 사용자 공유 액션에 연계하는 작업을 진행했다. 간단히 말하면 "별자리 교차 분석(crossover)" 이라는 보너스 리딩을 만들고, 사용자가 친구와 보고서를 공유할 때만 그 콘텐츠가 해제되도록 설계한 것이다.
읽기 →