Category: 개발자의 서비스 운영기

손님 0명에서 시작해 매일 무엇을 고쳤는지. 안 된 것도 그대로 적습니다.

  • [파마비아] 손님이 0명일 때 뭘 만들어야 하나 — 마케팅 책 20권을 서비스에 적용했습니다

    📊 먼저 우리 숫자부터 직시했습니다

    마케팅 책을 읽기 전, 제일 먼저 한 일은 현재 상황을 정직하게 보는 거였어요. famavia의 숫자는 이랬습니다.

    • 가입자: 3명
    • 채널 연결: 1명
    • 실제 발행: 1명

    리드가 0인 단계예요. 이 상황에서 가격 전략이나 업셀을 고민하는 건 순서가 틀렸다는 걸 깨달았습니다. 지금 필요한 건 딱 하나, ‘사람을 데려오는 것’뿐이었어요.

    📚 호르모지 $100M 3부작과 자료 20종을 읽고 나서

    마케팅 서적들을 정리하면서 계속 나온 말이 있었어요. “리드 마그넷은 세 가지뿐이다 — 문제를 드러내기 / 샘플 / 한 단계 무료.” 그중에서도 진단형은 ‘기다릴수록 나빠지는 문제’에 특히 강하다고 했습니다.

    방치된 블로그가 정확히 그런 문제예요. 한 달, 두 달 안 쓰면 검색도 안 되고 방문자도 줄어들죠. 그래서 만든 게 첫 번째 장치였습니다.

    ✅ 만든 것 1: 무료 블로그 진단

    famavia.com/check 페이지를 만들었어요. 로그인 없이 블로그 주소만 넣으면 바로 확인할 수 있는 것들:

    • 마지막 발행일
    • 최근 30일/90일 발행 수
    • 평균 발행 간격
    • 제목 길이 평균

    여기에 더해서, 그 블로그의 기존 글을 읽고 같은 말투로 새 글 1편을 무료로 써드립니다. 광고 없이, 로그인 없이요.

    왜냐하면 ‘샘플’이 가장 강한 설득이거든요. 말로 설명하는 것보다 한 번 써보는 게 빠르니까요.

    🎁 만든 것 2: 친구 초대 크레딧

    초대 링크로 가입하면 친구가 바로 크레딧을 받고, 그 친구가 첫 글을 발행하면 초대한 사람도 크레딧을 받는 구조로 만들었습니다.

    여기서 중요한 건 ‘가입’이 아니라 ‘첫 발행’을 기준으로 뒀다는 점이에요. 가입만 하고 안 쓰는 계정으로 크레딧을 캐는 걸 막기 위해서요. 실제로 쓰는 사람만 보상받게요.

    📈 만든 것 3: 발행 기록 공개

    famavia.com/proof 페이지를 만들어서, famavia 계정이 famavia로 올린 글과 조회수를 그대로 공개했습니다. 좋은 것만 고르지 않았어요. 전부 다요.

    만든 사람이 안 쓰는 도구는 믿기 어렵잖아요. 그래서 우리가 직접 쓰는 모습을 보여주기로 했습니다. 실패한 글도, 조회수 낮은 글도 그대로요.

    🔤 만든 것 4: 랜딩 첫 문구 A/B 실험

    “헤드라인을 다 쓰면 광고비의 80%를 쓴 것”이라는 말이 책에 나왔어요. 그래서 감으로 고르지 않고, 실제 클릭 데이터로 고르기로 했습니다.

    여러 버전의 첫 문구를 번갈아 보여주고, 어떤 게 더 많이 클릭되는지 측정 중이에요. 아직 결과는 나오지 않았지만, 최소한 감이 아니라 숫자로 판단할 수 있게 됐습니다.

    ❌ 안 한 것도 기록해둡니다

    책에는 이런 것들도 나와 있었어요:

    • 가격 3안 제시
    • 조건부 보장
    • 업셀·다운셀 시퀀스

    다 좋은 방법이에요. 하지만 지금은 아니에요. 고객이 생긴 다음 일이거든요. 순서를 건너뛰면 없는 명단에 대고 이메일 시퀀스를 짜는 꼴이 됩니다.

    손님이 0명일 때 해야 할 일은 명확했어요. 일단 오게 만드는 것. 그게 전부였습니다.

    🧭 지금은 이 네 가지를 돌리는 중입니다

    무료 진단, 친구 초대, 발행 기록 공개, 랜딩 A/B. 이 네 가지가 실제로 사람을 데려오는지 확인하는 게 이번 달 목표예요.

    책은 방향을 알려줬지만, 결국 우리 숫자로 증명해야 하니까요. 다음 글에서는 이 네 가지 중 뭐가 먹혔고 뭐가 안 먹혔는지 솔직하게 공유하겠습니다.

  • [파마비아] 커뮤니티 게시판을 열었습니다 — 팁은 검색에, 회원 글은 앱에서

    왜 게시판을 만들었나

    famavia를 쓰시는 분들이 가끔 물어보세요. “이런 기능 있으면 좋겠어요”, “이런 경우엔 어떻게 하나요?” 같은 질문들. 일대일로 답하다 보니 같은 내용을 여러 번 설명하게 되더라고요.

    그래서 처음엔 ‘마케팅 팁’ 페이지를 만들었어요. 자주 묻는 질문이나 운영 노하우를 정리해서 올리는 공간이었죠. 그런데 쓰다 보니 또 다른 필요가 보였습니다. 회원분들끼리 서로 경험을 나누는 공간이요.

    단순히 게시판 하나 추가하면 안 되나?

    처음엔 그냥 게시판 하나 만들면 되겠지 싶었어요. 근데 곰곰이 생각해보니 두 가지 목적이 섞여 있더라고요.

    첫째, 검색으로 들어올 새 손님을 위한 공간. 네이버나 구글에서 “SNS 예약 팁” 같은 걸 찾다가 우리 글을 보고 들어오는 경로요. 이건 로그인 없이도 읽을 수 있어야 하고, 검색엔진이 잘 찾을 수 있게 만들어야 했어요.

    둘째, 실제로 서비스를 쓰는 분들끼리 대화하는 공간. “저는 이렇게 써봤는데 괜찮더라고요”, “이 기능 추가되면 좋겠어요” 같은 이야기들. 이건 앱 안에서 바로 쓰고 댓글 달 수 있어야 편하죠.

    한 게시판에 다 때려넣으면 뭔가 어정쩡해질 것 같았어요. 그래서 나눴습니다.

    어떻게 나눴나

    운영자가 쓰는 마케팅 팁: famavia.com/guide/ 주소로 누구나 볼 수 있는 공개 페이지입니다. 정적 HTML로 만들어서 검색엔진이 잘 찾아가고, sitemap에도 등록했어요. 새로 들어오시는 분들이 여기서 먼저 훑어보시면 좋겠다 싶었거든요.

    회원들이 쓰는 커뮤니티 글: 앱의 ‘팁 · 커뮤니티’ 메뉴에서 두 탭으로 나눠서 볼 수 있어요. 운영자 팁 탭, 커뮤니티 탭. 앱에서 바로 글 쓰고 댓글 달 수 있게 만들었습니다.

    회원이 쓴 글도 공개 커뮤니티 페이지에 함께 보여요. 검색으로 들어온 분들이 “아, 실제로 쓰는 사람들이 이런 이야기를 하는구나” 느낄 수 있게요.

    웹 콘솔은 일하는 화면이니까 팁만 보이게 하고, 커뮤니티는 링크로 연결했어요. 콘솔에서 수다 떨 일은 별로 없으니까요.

    안전장치도 몇 가지

    회원 글은 HTML을 통째로 받지 않고 줄바꿈만 문단으로 처리해서 올립니다. 이상한 스크립트나 스타일이 섞여 들어오는 걸 막으려고요.

    그리고 운영자 팁을 회원이 사칭해서 쓸 수 없게 권한을 확실히 막아뒀어요. 나중에 “이거 공식 답변 아니었어요?” 같은 혼란 생기면 곤란하니까요.

    써보니 어떤가

    아직 글이 많이 쌓이진 않았지만, 구조는 생각대로 작동하고 있어요. 팁 페이지는 검색에 조금씩 잡히기 시작했고, 회원분들이 앱에서 댓글 다는 모습도 보이더라고요.

    완벽하진 않아요. 나중에 글이 많아지면 검색 기능도 넣어야 할 것 같고, 카테고리 분류도 고민 중이에요. 그래도 일단은 ‘왜 나눴는지’가 분명하니까 다음 단계도 보이는 것 같습니다.

    혹시 famavia 쓰고 계시다면, 한 번 들어가서 글 남겨주세요. 경험 공유해주시면 다른 분들한테도 큰 도움이 됩니다 😊

  • [파마비아] AI한테 ‘주제 추천해줘’ 했더니 블로그 운영 팁 10가지가 나온 이유

    블로그를 못 쓰는 진짜 이유는 글쓰기가 아니다

    재활용 기능을 만들어서 예전에 쓴 글을 다시 꺼내 쓸 수 있게 됐어요. 쌓여만 가던 글들이 다시 빛을 보게 된 건 좋았는데, 문제가 하나 남았습니다.

    새로 쓸 주제는 여전히 제 머릿속에서 나와야 한다는 거예요.

    블로그를 꾸준히 못 하는 이유가 ‘글쓰기가 어려워서’라고 생각하기 쉬운데, 실제로는 아니더라고요. 진짜 벽은 ‘오늘 뭘 쓰지?’에서 막히는 겁니다. 주제만 정해지면 쓰는 건 의외로 술술 나가거든요.

    AI한테 물어봤더니 ‘블로그 운영 팁 10가지’

    그래서 AI한테 물어봤어요. “주제 추천해줘.”

    결과는… 뻔했습니다. ‘블로그 운영 팁 10가지’, ‘SNS 마케팅 전략 5가지’, ‘초보자를 위한 콘텐츠 작성법’ 같은 거요. 틀린 말은 아닌데, 아무도 안 쓸 것 같은 주제들이었어요.

    왜 이렇게 나올까 생각해봤는데, AI는 제 블로그를 모르니까요. 그냥 ‘블로그 운영자’라는 일반적인 정보만 갖고 추천하니까 누구한테나 통할 법한, 그러니까 특색 없는 주제가 나오는 거죠.

    그럴 거면 차라리 없는 게 낫겠더라고요.

    마침 며칠 전에 조회수 데이터를 모아뒀다

    그런데 마침 며칠 전에 성과 데이터를 수집하는 기능을 붙여뒀어요. 제 글 중에서 뭐가 잘 됐는지 숫자로 남아 있었습니다.

    363회 읽힌 글, 317회 읽힌 글, 그리고 8회에 그친 글. 뭐가 반응이 좋았는지 명확하게 보였어요.

    그래서 생각했습니다. 이 데이터를 추천에 같이 넣으면 어떨까?

    잘 됐던 글의 결을 이어가되, 소재는 겹치지 않게

    추천 기능을 다시 만들 때 이렇게 바꿨어요.

    • 내 글 중에서 조회수가 높은 글의 내용을 AI한테 같이 보냄
    • “이 사람 글 중 이런 게 반응이 좋았다. 그 결을 이어가되 소재는 겹치지 않게 추천해줘”

    결과가 확 달라졌습니다.

    8개 뽑았는데 8개 다 제 글에서 이어진 주제가 나왔어요. 뻔한 일반론이 아니라, 제가 실제로 쓸 법한 소재들이었습니다. 화면에도 ‘참고한 내 글 · 363회 조회’처럼 근거를 같이 보여줬어요.

    왜냐면 추천을 믿을지 말지는 사용자가 판단할 수 있어야 하니까요. 근거 없는 추천은 아무리 그럴듯해도 그냥 넘기게 되거든요.

    버그도 하나 잡았다

    만들다가 버그를 하나 발견했어요. AI 응답에서 코드 표시를 걷어내는 코드가 ‘json’ 이라는 글자를 못 지우고 있었습니다. 그래서 결과 해석이 깨지고 있었어요.

    다른 기능에도 영향이 있을 수 있어서 바로 고쳤습니다. 이런 게 쌓이면 나중에 원인 찾기 어려워지거든요.

    배운 것: 근거가 보여야 추천이 쓰인다

    이번에 확실히 느낀 건, 추천은 ‘정확도’보다 ‘왜 이걸 추천했는지’가 보여야 쓰인다는 거예요.

    AI가 아무리 똑똑해도, 근거 없이 “이거 써보세요!” 하면 안 믿게 됩니다. 하지만 “당신 글 중에 이게 363회 읽혔고, 이런 결로 가면 좋을 것 같아요”라고 하면 귀 기울이게 되더라고요.

    서비스 만들 때도 마찬가지인 것 같아요. 기능이 뭘 하는지보다, 왜 그렇게 판단했는지를 보여주는 게 신뢰를 만드는 것 같습니다.

  • [파마비아] 내 글이 몇 번 읽혔는지 이제야 알았다

    글을 올리고 나면 그게 끝이었다

    발행 도구를 만들어놓고 한참을 썼어요. 버튼 하나로 여러 SNS에 글이 올라가니까 편하긴 했는데, 뭔가 이상했어요. 글을 올리면 그걸로 끝이더라고요.

    몇 명이 봤는지, 반응이 있었는지 알 방법이 없으니까 다시 콘솔에 들어올 이유가 없었어요. 그냥 올리고 끝. 그러다 보니 ‘이거 진짜 쓰는 사람 있나?’ 싶더라고요. 저조차도요.

    화면부터 만들지 않았다

    그래서 발행한 글이 얼마나 읽혔는지 모아서 보여주는 ‘성과 보기’ 기능을 만들기로 했어요. 근데 이번엔 순서를 바꿨어요.

    보통은 화면부터 만들잖아요. 예쁘게 그래프 그리고, 숫자 넣고. 그런데 그렇게 하면 나중에 ‘왜 숫자가 안 나오지?’ 하면서 헤매게 돼요. 그게 제일 허무하거든요.

    그래서 이번엔 각 SNS에서 실제로 어떤 숫자를 받을 수 있는지 먼저 찔러봤어요. 될지 안 될지 확인하고 만드는 거죠.

    SNS별로 확인한 것들

    • 스레드: 조회수·좋아요·답글까지 다 받을 수 있었어요. 생각보다 잘 줬어요.
    • 인스타그램: 조회·도달·저장까지 가능했어요. 도달이랑 조회가 다르다는 것도 처음 알았네요.
    • 페이스북: 인사이트를 보려면 별도 승인이 필요해서 지금은 안 돼요. 신청하면 되긴 한데, 일단은 보류했어요.
    • 네이버·워드프레스: 조회수를 주는 통로가 아예 없어요. 각 사이트 통계를 직접 봐야 해요.

    안 되는 건 안 되는 거라서, 화면에 그대로 ‘페이스북은 아직 지원 안 돼요’라고 적었어요. 감추는 것보다 낫더라고요.

    8월 21일 글이 363번 읽혔더라

    확인해보니 8월 21일에 올린 글이 363번 읽혔더라고요. 그동안 모르고 있었어요. 전체로는 840회.

    숫자가 크진 않아요. 솔직히 작아요. 근데 안 보이던 게 보이니까 다음에 뭘 쓸지 감이 잡히더라고요. ‘아, 이런 글은 좀 읽히는구나’ ‘이건 반응이 없네’ 이런 게 보여요.

    6시간마다 자동으로 갱신되고, 콘솔에서 기간별로(7일·30일·90일) 볼 수 있게 만들었어요. 매번 새로고침할 필요 없이 알아서 업데이트되니까 편해요.

    배운 것

    되는 걸 먼저 확인하고 만드는 게 순서예요. 화면을 예쁘게 만들어놓고 ‘데이터가 안 와요’라고 하면 의미가 없거든요.

    그리고 안 되는 걸 감추지 말고 왜 안 되는지 적는 것도 중요해요. 사용자는 ‘왜 안 돼?’ 하면서 헤매는 것보다, ‘아 이건 원래 안 되는구나’ 하고 넘어가는 게 낫거든요.

    작은 숫자지만 이제 내 글이 얼마나 읽혔는지 알아요. 그것만으로도 다시 콘솔에 들어올 이유가 생겼어요. 📊

  • [파마비아] 블로그에 쌓인 글, 그냥 두면 아깝잖아요

    블로그를 꾸준히 한다는 건

    블로그를 꾸준히 쓰려고 하는 분들의 진짜 고민은 ‘글 쓰는 시간’이 아니더라고요. 오히려 ‘오늘 뭘 쓰지?’가 훨씬 큰 병목이었어요. 소재가 떨어지는 거죠.

    그런데 막상 제 블로그를 돌아보니까 예전에 쓴 글이 수십 개씩 쌓여 있더라고요. 한 번 올리고 나면 그냥 잊히는 글들. 검색으로 들어오는 분들 말고는 아무도 다시 보지 않는 글들이요.

    이게 너무 아까웠어요. 한 글자 한 글자 공들여 쓴 건데, 한 번 발행하고 끝이라니.

    그래서 만든 ‘글 재활용’ 기능

    그래서 이미 올린 블로그 글을 SNS용으로 다시 쓰는 기능을 붙였어요. 아이디어는 간단했어요.

    • 블로그에서 예전 글 목록을 불러온다
    • 하나 고르면 채널별로 다시 써준다
    • 제가 평소 쓰던 말투를 학습해서 트위터는 짧게, 인스타는 카드 느낌으로

    핵심은 글 끝에 원문 주소가 자동으로 붙는다는 거예요. 이 기능을 만든 목적 자체가 ‘블로그로 다시 데려오기’니까요. SNS에 글만 뿌리고 돌아올 길이 없으면 의미가 없잖아요.

    콘텐츠를 더 만드는 것보다

    이걸 만들면서 든 생각이 있어요. 콘텐츠를 더 만드는 것보다 이미 만든 걸 더 쓰는 게 먼저다라는 거.

    블로그 글 하나를 쓰는 데 보통 한두 시간이 들어요. 주제 정하고, 자료 찾고, 문장 다듬고. 그렇게 공들여 쓴 글을 한 번만 쓰고 버리는 건 너무 아까운 일이더라고요.

    새로 쓰지 않아도 올릴 게 생긴다는 것

    이 기능을 쓰면서 제일 좋았던 건, 새로 쓰지 않아도 올릴 게 생긴다는 거예요. 예전에 쓴 글 중에 하나 골라서 몇 번 클릭하면, SNS에 올릴 글이 뚝딱 나와요.

    블로그 글 쓰는 게 부담스러운 날도 있잖아요. 그럴 때 이미 쓴 글 하나를 꺼내서 다시 손보는 거. 이게 생각보다 훨씬 편하더라고요. 😊

    그리고 또 하나. 옛날 글을 다시 보다 보면 ‘아, 이 주제로 또 써볼까?’ 하는 아이디어도 생겨요. 소재가 없어서 고민이었는데, 정작 소재는 제 블로그 안에 있었던 거죠.

    그게 이 기능의 전부예요

    거창한 건 아니에요. 그냥 이미 쓴 글을 한 번 더 쓸 수 있게 만든 거. 그게 이 기능의 전부예요.

    하지만 이게 생각보다 도움이 많이 됐어요. 블로그 꾸준히 하시는 분들한테도 분명 필요한 기능일 거라고 생각해요. 글은 한 번만 쓰고 버리기엔 너무 아까우니까요. 🙂

  • [파마비아] 가입은 했는데 아무도 안 돌아왔다 — 이유는 스크롤이었다

    서비스를 만들고 있으면 매일이 배움의 연속이에요. 오늘은 특히 허무하면서도 중요한 걸 배웠어요. 가입자가 늘어나는데 아무도 돌아오지 않는 이유, 알고 보니 정말 단순했거든요.

    📊 데이터가 보여준 이상한 패턴

    가입자 데이터를 들여다봤어요. ‘가입 시각’과 ‘마지막 접속 시각’이 똑같은 분들이 대부분이었어요. 글도 안 만들고, 채널도 연결 안 하고, 무료 크레딧만 받아가신 거죠. 첫 세션에서 아무것도 못 하고 나간 겁니다.

    직접 화면을 처음 온 사람처럼 밟아봤어요. 그랬더니 원인이 보이더라고요. 구글 로그인 버튼을 누르면 새 창이 열렸다가 돌아오는데, 돌아온 화면이 페이지 맨 위였어요. 정작 작업 화면(콘솔)은 한참 아래에 있었고요. 로그인이 됐는지 안 됐는지도 모르고 그냥 나간 거예요. 💦

    해결은 한 줄이었다

    고친 건 간단했어요. 로그인하면 자동으로 작업 화면으로 데려가는 거. 기능이 부족한 게 아니라 눈에 안 보였던 거였어요. 처음 오신 분들을 위해 3단계 안내도 추가했어요.

    • 채널 연결하기
    • 채널 없어도 일단 글 만들어보기
    • 네이버 블로그는 앱 필요하다는 안내

    ♻️ 블로그에 쌓인 글을 다시 쓰는 기능

    매일 막히는 건 ‘오늘 뭐 쓰지’잖아요. 그런데 블로그엔 이미 글이 쌓여 있어요. 예전 글을 SNS용으로 다시 쓸 수 있게 만들었어요.

    작동 방식은 이래요. 블로그에서 예전 글을 불러와 고르면, 제가 학습한 말투로 채널별로 다시 써드려요. 글 끝엔 원문 주소가 자동으로 붙고요. 목적 자체가 ‘블로그로 다시 보내기’니까요. 새로 쓰지 않아도 올릴 게 생기는 셈이에요.

    🔔 나만의 텔레그램 알림

    발행이 성공했는지, 실패했는지, 예약이 안 나갔는지 알려주는 알림을 각자 텔레그램으로 받을 수 있게 했어요. 봇 토큰만 넣으면 나머지는 자동이에요.

    그런데 만들다가 실수를 발견했어요. 봇을 등록 안 한 분들의 알림이 저한테 오고 있었더라고요. 😅 남의 글 제목이 제 채팅에 뜨는 거라 바로 막았습니다.

    👀 예약한 글, 미리 보기

    예전엔 예약 목록에 제목이랑 시각만 보였어요. 정작 어떤 내용이 나갈지는 발행되기 전까진 몰랐죠. 이제 눌러보면 최종 제목, 본문, 함께 올라갈 사진, SNS 글 원문까지 그대로 보여요.

    ✨ 오늘의 깨달음

    오늘은 ‘없던 걸 만든 날’이라기보다 ‘있는데 닿지 않던 걸 잇는 날’이었어요. 기능은 충분했는데 사용자가 그걸 못 봤던 거죠. 서비스를 만드는 건 결국 사람이 쓰는 길을 깔아주는 일이구나 싶었어요.

    1인으로 서비스 운영하면서 매일 배우고 고치고 있어요. 완벽하지 않아도 조금씩 나아지는 게 보이니까 재미있더라고요. 🙂

  • [파마비아] 잘 되던 기능이 사실은 운이었다 — SNS 자동 발행이 실패한 날

    오전엔 됐는데 오후엔 안 됐다 🤔

    오늘 오전에 SNS 자동 발행 기능 테스트를 했어요. 스레드랑 인스타그램에 예약 발행이 잘 되더라고요. ‘오, 완벽하네!’라고 생각하면서 다른 일을 했죠.

    그런데 오후에 똑같은 코드로 다시 발행을 시도했는데 갑자기 둘 다 실패했어요. 스레드는 ‘요청한 자원이 없다’는 에러를, 인스타그램은 ‘미디어 ID를 쓸 수 없다’는 메시지를 보냈죠. 뭐가 달라진 걸까요? 코드는 그대로인데요.

    문제는 ‘2단계 발행 구조’였다 📝

    원인을 찾아보니까 스레드와 인스타그램은 글을 올릴 때 두 단계를 거친다는 걸 제대로 이해 못 하고 있었더라고요.

    • 1단계: 먼저 ‘컨테이너’라는 걸 만들어요. 글 내용이랑 사진을 업로드하고 준비하는 단계죠.
    • 2단계: 컨테이너가 준비되면 그걸 실제로 게시해요.

    저는 1단계를 시작한 직후에 바로 2단계를 눌러버린 거예요. 그러니까 컨테이너가 아직 준비도 안 됐는데 ‘게시해!’라고 명령한 셈이죠. 당연히 실패할 수밖에요.

    그럼 오전엔 왜 됐을까? 🍀

    이게 핵심이에요. 오전에 성공한 건 제 실력이 아니라 그냥 타이밍이 좋았던 거였어요.

    스레드는 아예 대기 로직이 없었고, 인스타그램은 대기는 했지만 ‘준비 완료’ 직후에도 가끔 실패할 수 있다는 걸 몰라서 재시도 기능이 없었어요. 그러니까 서버가 빨리 처리해주면 성공하고, 조금만 느려도 실패하는 구조였던 거죠.

    성공률이 100%가 아니라 ‘대체로 성공’ 정도였던 건데, 사용자 입장에선 실패해도 모르니까 저도 문제를 몰랐던 거예요. 무서운 일이죠.

    어떻게 고쳤을까? 🔧

    이제 제대로 고쳤어요. 방법은 간단했어요.

    • 컨테이너를 만든 뒤 상태를 계속 확인해요.
    • 준비될 때까지 기다린 다음에 게시 버튼을 누르죠.
    • 그래도 실패하면? 몇 초 간격으로 최대 세 번까지 재시도해요.

    단, 토큰이 잘못됐거나 권한이 없는 것 같은 ‘진짜 실패’는 재시도하지 않아요. 그런 건 계속 시도해봤자 똑같이 실패하니까 바로 알림을 보내는 게 낫더라고요. 무의미한 재시도는 문제를 숨길 뿐이에요.

    배운 것 💡

    ‘되는 걸 봤다’와 ‘항상 된다’는 완전히 다른 말이에요. 특히 남의 서버를 거치는 기능은 성공하는 걸 한두 번 본 것만으로 검증했다고 착각하기 쉬워요.

    오늘처럼 타이밍 운으로 성공하는 경우도 있고, 서버 상태에 따라 결과가 달라지는 경우도 있죠. 한 번 성공했다고 안심하지 말고, 실패 상황도 꼭 가정해보고 대비해야 한다는 걸 다시 한번 느꼈어요.

    1인 개발자로 서비스 운영하다 보면 이런 일이 종종 생기더라고요. 여러분도 혹시 ‘잘 되고 있다고 믿는’ 기능이 있다면 한 번쯤 의심해보세요. 저처럼 운이 좋아서 된 건 아닌지요 😅

  • 자동 업데이트가 자동이 아니었다 — 하루 동안 메운 빈 곳들

    오늘은 새로운 기능을 만들기보다, 이미 ‘된다’고 생각했던 것들의 빈 곳을 메운 하루였습니다. 서비스를 운영하다 보면 이런 날이 꼭 필요하더라고요. 겉으로는 잘 돌아가는 것 같아도, 막상 들여다보면 ‘어? 이게 왜 이렇게 되어 있지?’ 싶은 부분들이 보이거든요.

    1. 자동 업데이트가 사실은 반자동이었다 🔄

    가장 먼저 손본 건 자동 업데이트였습니다. 사용자분들께 ‘자동 업데이트’라고 안내했는데, 알고 보니 새 버전이 나와도 사용자가 직접 배너를 눌러야 적용되는 구조였어요. 이건 반자동이지, 자동이 아니잖아요.

    왜 문제였나요?
    사용자 입장에서는 배너를 놓치거나 무시하면 계속 구버전을 쓰게 됩니다. 버그 수정이나 개선 사항이 반영 안 되는 거죠.

    어떻게 고쳤나요?
    앱을 켜는 순간 자동으로 업데이트를 받아서 교체하고 재시작하도록 바꿨습니다. 다만 작업 중에 갑자기 재시작되면 곤란하니까, 앱을 켠 직후에만 자동으로 진행하도록 했어요. 그리고 한 가지 더—교체가 실패한 버전은 기록해뒀다가, 다음에 켤 때 다시 시도하지 않게 했습니다. 무한 루프에 빠지는 걸 막기 위해서요.

    2. SNS에 블로그 링크가 안 들어가고 있었다 🔗

    두 번째는 SNS 자동 발행 문제였습니다. 스레드, 페이스북, 인스타그램에는 글이 잘 나가는데, 정작 원문 블로그 링크가 빠져 있었어요. 유입 경로가 아예 없던 셈이죠.

    왜 문제였나요?
    SNS 글만 보고 끝나면 블로그 방문자는 늘지 않습니다. 더 자세한 내용이 궁금한 사람도 찾아올 방법이 없고요.

    어떻게 고쳤나요?
    블로그를 먼저 발행해서 주소를 받은 다음, 그 주소를 스레드·페이스북·인스타 글 끝에 자동으로 붙이도록 순서를 바꿨습니다. 예약 발행도 마찬가지인데요, 블로그가 아직 안 올라간 상태면 실패시키지 않고 1분 뒤에 다시 시도하도록 했어요.

    3. 발행 직전에 잡은 버그 🐛

    발행 테스트 중에 아찔한 걸 하나 발견했습니다. 링크가 없을 때 ‘자세한 내용은 여기 👉 {link}’ 같은 자리표시자가 그대로 올라갈 뻔했어요. 실제 계정에 나가기 전에 잡아서 정말 다행이었습니다.

    4. 비용 새는 구멍을 막았다 💸

    네 번째는 비용 관리였습니다. AI 글 생성 기능이 있는데, 데스크톱 앱과 예약 발행에서는 사용량 차감이 안 되고 있었어요.

    왜 문제였나요?
    사용자는 무료로 쓰고, 저는 API 비용만 계속 나가는 구조였습니다. 이건 지속 가능하지 않죠.

    어떻게 고쳤나요?
    두 곳 모두 크레딧 차감 로직을 붙였고, 잔액이 없으면 AI를 부르기 전에 미리 막도록 했습니다. 다만 예약 발행은 AI 없이도 기본 변환으로라도 나가게 해뒀어요.

    5. 앱에서 스레드·인스타 등록이 안 됐다 📱

    다섯 번째, 웹에서는 스레드와 인스타그램 계정을 등록할 수 있는데 앱에는 ‘준비 중’이라는 표시가 그대로 남아 있었습니다. 기능은 이미 다 만들어졌는데 문만 안 열어둔 셈이었어요. 오늘 열어뒀습니다.

    6. 크레딧 사용 로그를 만들었다 📊

    마지막으로 관리자 화면에 크레딧 사용 로그를 추가했습니다. 누가 언제 무엇으로 얼마를 썼는지 안 보이면, 정산도 문의 대응도 제대로 할 수 없거든요. 사용자 화면에도 본인 사용 내역을 볼 수 있게 붙여뒀습니다.

    마무리 ✨

    오늘 하루는 화려한 신기능보다, 이미 ‘된다’고 생각했던 것들의 빈 곳을 메운 날이었습니다. 자동 업데이트는 진짜 자동이 되었고, SNS 글에는 블로그 링크가 붙었고, 비용 누수는 막았고, 숨겨뒀던 기능은 열었고, 사용 내역은 보이게 만들었어요.

    서비스 운영이란 게 이런 거구나 싶습니다. 새로운 걸 계속 만드는 것도 중요하지만, 이미 만든 것들이 제대로 돌아가는지 점검하고 다듬는 시간도 꼭 필요하더라고요. 오늘 같은 날이 쌓여야 서비스가 탄탄해지는 것 같습니다 😊