Indie Hackers

I renamed my first product a week before launch. Then I found out checkout had been broken for six days.

첫 제품 출시 일주일 전 이름을 바꿨습니다. 결제 기능이 6일간 멈춘 사실도 알게 됐습니다

Pocket 종료 뒤 저장한 글을 다시 찾으려는 문제를 풀기 위해 만든 읽기 저장 앱 Textivore의 출시 준비 과정을 공유합니다. Paddle API 키 만료로 결제가 6일간 실패했고, Pocket 자료 가져오기는 글 본문 없이 링크만 제공돼 전환 과정에 남은 과제도 드러났습니다.

에디터 노트

이번 장애에서 가장 설득력 있는 교훈은 결제 경로를 실제로 끝까지 시험하는 일입니다. 코드 테스트만으로는 만료된 Paddle 키를 발견하기 어렵고, 방문자와 결제가 적으면 실패도 주문 감소로만 나타납니다. 개발자는 실물 카드로 직접 구매한 뒤에야 문제를 찾았고, 댓글에서 제안한 정기 점검은 이를 일회성 출시 절차에서 지속적인 감시로 바꿉니다. Textivore의 전환 과제는 결제보다 자료 가져오기에 더 오래 남을 수 있습니다. Pocket 파일에 본문이 없다는 제약은 앱이 해결할 수 있는 문제가 아니며, 서버가 본문을 가져오지 못하는 사이트도 있습니다. 여기에 가져오기 자료까지 무료 50개 한도에 포함돼 대량 보관 사용자는 첫 화면에서 일부 자료만 보게 됩니다. 개발자는 한도 적용 방식을 바꾸는 방안을 검토 중이지만, 전체 가져오기 뒤 신규 저장에 한도를 두는 방식이 사용자에게 어떻게 보일지는 아직 확인되지 않았습니다. 요금제 안내와 내보내기 파일의 다른 앱 호환성도 자료 복구를 내세우는 제품의 신뢰와 직접 맞닿아 있습니다.

AI 요약

Textivore는 저장한 글의 본문을 보관하고 제목뿐 아니라 글 내용까지 검색하는 읽기 저장 앱입니다. Pocket이 종료되면서 사용자 자료를 가져갈 수 없었던 일을 계기로 개발을 시작했습니다. 처음 이름은 Gleamr였지만 앱의 용도를 설명하기 어렵고 자주 잘못 표기돼 출시 일주일 전 Textivore로 바꿨습니다. 우크라이나에서 백엔드 개발자로 일하며 저녁 시간을 들여 이름 변경을 진행했습니다.

출시 직전 발견한 결제 오류

출시 전 직접 결제해 보다가 Paddle API 키가 이름 변경 작업 당일 만료된 사실을 확인했습니다. 그 뒤 6일 동안 결제를 시도한 사람이 없어 구매 버튼이 작동하지 않는 상황을 알아채지 못했습니다. 개발자는 결제 기능을 마지막에 실제 카드로 시험하라고 권합니다. 댓글에서는 매일 실제 키로 API를 확인해 실패 시 알리는 작업이나 전체 결제 흐름을 점검하는 정기 테스트를 제안했습니다. 개발자는 대시보드에서 만료 경고를 알아채지 못했고, 실제 키를 사용하는 일일 확인 작업을 추가하겠다고 답했습니다.

Pocket 가져오기와 요금제

Pocket 내보내기 파일에는 링크만 들어 있어 Textivore로 가져와도 글 본문은 복구되지 않습니다. 제목과 태그, 링크는 가져올 수 있으며 본문은 브라우저 확장 프로그램으로 다시 저장해야 합니다. 서버에서 자동으로 본문을 가져오는 기능을 개발 중이지만 Medium처럼 서버 요청을 막는 사이트는 확장 프로그램이 필요합니다.

무료 계정은 글 50개까지 저장하고, 이후 요금은 월 3.99달러 또는 연 36달러입니다. 처음 연간 구독자 50명은 계속 구독하는 동안 연 24달러를 냅니다. 현재 가입자는 약 30명이고 유료 사용자는 없습니다. Pocket 자료를 가져올 때도 무료 한도에 포함돼 50개를 넘는 글은 건너뜁니다. 개발자는 같은 파일을 유료 전환 뒤 다시 올리면 중복 자료를 건너뛰고 나머지를 가져온다고 설명했습니다. 대량 자료를 가져오려는 사용자에게 첫인상이 나빠질 수 있다는 지적을 받고 전체 가져오기를 허용하고 신규 저장만 제한하는 방안을 검토 중입니다.

출시 홍보와 제품 약속

개발자는 Show HN에 제품을 올렸지만 새 계정에 카르마가 거의 없고 글이 마케팅 문구처럼 보여 몇 분 만에 게시물이 사라졌다고 전했습니다. 다음에는 제품을 만든 과정과 문제, 다음 계획을 담은 개발 기록 형식으로 다시 올릴 생각입니다. 제품은 JSON으로 전체 라이브러리를 내보내며, 개발자는 파일에 본문과 태그, 날짜가 들어 있는지 확인했지만 다른 앱으로 가져오는 검증은 아직 하지 않았다고 답했습니다.

Indie Hackers 반응

  • @Amanda Pruitt — 만료된 API 키는 제품 코드가 바뀌지 않아도 결제를 끊을 수 있어 단위 테스트로 잡기 어렵습니다. 실제 결제나 테스트 결제를 매일 시도하고 실패하면 이메일을 보내는 작은 점검 작업이 6일간의 조용한 장애를 알림 한 번으로 바꿔 줍니다. Pocket 쪽에서는 가져온 뒤 본문이 없는 글이 몇 개인지 보여주면 빠진 부분을 처음부터 분명히 알 수 있습니다.
  • @Evan_Liu — 가져오기 직후 "1,380개 중 412개에는 본문이 없습니다"처럼 누락 수를 보여주면 검색할 때 뒤늦게 알아차리지 않아도 됩니다. 본문 가져오기 작업을 대기열에 넣는 버튼도 있으면 좋겠습니다.
  • @Ofek Ponte — 일일 결제 확인 작업을 추가하면 만료된 키를 6일이 아니라 하루 만에 발견할 수 있습니다. Paddle에서 키 만료 신호를 보냈나요?
    • @yevhen_builds — 일일 작업을 추가하겠습니다. Paddle 대시보드에서는 경고가 눈에 띄지 않았습니다. 놓친 이메일이 있었을 수는 있습니다.
  • @hitensethiya — Pocket 사용자에게는 예전 자료를 가져오는 과정이 중요합니다. 가져온 자료도 무료 50개 한도에 포함된다면 그 지점에서 이탈할 것 같습니다.
    • @yevhen_builds — 지금은 가져오기도 50개 한도에 포함됩니다. 무료 계정은 처음 50개만 가져오고 나머지는 건너뜁니다. 유료로 바꾼 뒤 같은 파일을 올리면 이미 가져온 자료는 건너뛰고 나머지를 가져옵니다. 3,000개를 저장한 사람이 50개만 보는 첫인상은 좋지 않을 수 있습니다. 전체 자료를 가져오게 하고 새로 저장하는 글에 한도를 두는 방법을 생각 중입니다.
  • @Youssef — JSON으로 전체 라이브러리를 내보낸다는 약속도 실제로 시험해야 합니다. 내보낸 자료를 새 앱에 가져와 본문이 남는지 확인해 보세요. Pocket 때문에 신뢰를 잃은 사용자를 겨냥한 제품이라면 이 약속도 결제처럼 점검할 만합니다.
    • @yevhen_builds — 내보내기 파일에 구조화된 본문과 HTML, 태그, 날짜가 들어 있는 것은 확인했습니다. 다른 앱으로 가져오는 시험은 하지 않았습니다. 직접 해보고 문제가 있으면 고치겠습니다.
  • @Raveroll — 요금제 페이지에서 무료 플랜의 가격과 검색 기능 포함 여부를 바로 알기 어려웠습니다. 가져오기도 50개 한도에 포함된다는 점을 페이지에 적어야 합니다.
    • @yevhen_builds — 무료 플랜에 0달러와 전문 검색을 표시했지만 충분히 분명하지 않았던 것 같습니다. 이름을 Preview 대신 Free로 바꾸고 가져오기 규칙도 표시하는 방안을 검토하겠습니다.

원문: Indie Hackers / 번역·요약: Trawling