
July 15, 2026
일기 서비스에 “비슷한 기록 보여주기”를 넣으려 했다. 같은 단어가 있는 글이 아니라 문맥과 감정이 닮은 과거 일기를 찾는 기능이다. 텍스트를 임베딩으로 바꾸고, 벡터를 저장한 뒤 가까운 기록을 찾는 흐름이 필요했다. 처음에는 SQLite는 그대로 두고 벡터 데이터베이스만 따로 붙이는 방법을 검토했다. 그런데 원문은 한 저장소, 임베딩은 다른 저장소에 두…

July 07, 2026
Place2Page에서 localization을 생성하다가 버튼이 오래 돌고 실패하는 문제 가 있었다. 처음에는 번역 모델이 실패했거나 backend에서 예외가 난 것처럼 보였다. 그런데 에러 파일을 열어보니 앱이 만든 JSON 에러가 아니었다. Cloudflare가 내려준 HTML 페이지였다. 가볍게 풀어 쓰면 이렇다. 브라우저에서 Cloudflare까…

July 07, 2026
Place2Page 공개 랜딩 몇 개가 갑자기 느려졌다. 로그만 보면 데이터베이스가 전반적으로 무거워진 것처럼 보였다. 같은 시각에 하나가 24-27초씩 걸렸고 slow query warning은 0.8-2.1초 단위로 여러 번 찍혔다. 처음에는 인덱스부터 봤다. 그런데 로그를 다시 보니 row를 찾는 과정만으로는 설명이 부족했다. locale 목록만…

June 30, 2026
제품 지표를 보기 시작하면 가장 먼저 부딪히는 문제가 있다. 숫자는 찍히는데, 그 숫자가 고객 행동인지 테스트 행동인지 헷갈린다. Place2Page의 분석 환경을 정리하면서 GA4, Mixpanel, Search Console도 같이 정리했다. 이때 제품 분석에 넣을 트래픽과 제외할 트래픽을 먼저 나눠야 했다. 특히 초기 제품에서는 트래픽 모수가 작아…

June 24, 2026
이번 구현에서 가장 먼저 분리한 것은 사용자에게 보여주는 궁합 점수와 실제 추천 순서를 정하는 내부 랭킹 점수였다. 소개팅 앱의 라운지에서는 궁합 점수가 높다고 무조건 먼저 보여주면 안 된다. 사용자가 그 사람을 마음에 들어 할 가능성도 중요하지만, 상대가 다시 반응할 가능성도 함께 봐야 하기 때문이다. 예를 들어 거리가 멀면 추천 순서는 낮출 수 있다.…

June 14, 2026
Sentry에는 저장 화면에서 발생한 unresolved issue가 남아 있었다. 저장 중 가 global unhandled rejection으로 잡힌 케이스였다. 처음에는 단순히 "저장 API가 실패했다"처럼 보였다. 하지만 문제의 핵심은 API validation 자체가 아니었다. 사용자가 복구할 수 있는 저장 실패가 UI에서 toast로 처리된 뒤…