[카테고리:] famavia

famavia 서비스 관련 글 — 기능 소개·업데이트·운영 기록

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

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

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

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

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

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

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

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

    그럼 오전엔 왜 됐을까? 🍀

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

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

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

    어떻게 고쳤을까? 🔧

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

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

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

    배운 것 💡

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

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

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