시리즈: 비개발자의 바이브코딩 도전기 (9/10)
한가지 더 남았습니다. Thread API 토큰은 60일이 유효기간이 있다는 겁니다. 그러면, 언제 만료될지 모르니까, 구글캘린더에 저장해두고 토큰갱신을 해줘야 하는 일이 있었습니다.
토큰은 "나 이 서비스 쓸 권한 있어"를 증명하는 열쇠 같은 겁니다. Threads API를 쓰려면 Meta에서 토큰을 발급받아야 합니다. 이 토큰을 API 요청에 포함시키면 "얘는 허가된 사용자야"라고 인정받습니다.
문제는 토큰에 유효기간이 있다는 겁니다. Threads 토큰은 60일 후에 만료됩니다. 만료되면 새 토큰을 발급받아야 합니다.
처음에는 토큰을 환경변수에 저장해뒀습니다. 환경변수는 코드 밖에서 설정하는 값이라고 전에 설명했죠. 토큰을 환경변수에 넣어두면, 코드에서 그 값을 읽어서 사용합니다.
근데 환경변수를 바꾸려면 Vercel 대시보드에 들어가서 수동으로 업데이트하고, 다시 배포해야 합니다. 60일마다 이걸 수동으로 해야 한다고요? 귀찮은 건 둘째고, 깜빡 잊으면 서비스가 멈춥니다.
Claude한테 물어봤습니다.
"토큰이 만료되기 전에 자동으로 갱신할 수 없을까?"
Claude가 방법을 알려줬습니다. Threads API에는 토큰을 갱신하는 API가 있습니다. 현재 토큰으로 갱신 API를 호출하면, 새 토큰을 받을 수 있습니다. 이걸 주기적으로 하면 토큰이 영원히 안 만료됩니다.
근데 문제가 있습니다. 새 토큰을 받으면 어디에 저장하죠? 환경변수에 저장하면 결국 수동으로 업데이트해야 합니다.
해결책은 데이터베이스에 저장하는 겁니다. 토큰을 DB에 저장하고, API 호출할 때 DB에서 토큰을 읽어옵니다. 갱신하면 DB에 새 토큰을 저장합니다. 이러면 코드를 재배포할 필요가 없습니다.
Claude가 코드를 짜줬습니다. 구조는 이렇습니다.
매주 한 번 갱신하면 60일 만료 전에 항상 새 토큰으로 바뀝니다.
그런데 한 가지 더 고려할 게 있었습니다. 만약 DB에 토큰이 없으면 어떻게 하죠? 처음 서비스를 시작할 때는 DB가 비어있으니까요.
그래서 폴백(fallback) 로직을 넣었습니다. 폴백은 "원래 방법이 안 되면 대신 쓰는 방법"입니다.
토큰 조회 순서:
이러면 처음에는 환경변수에 토큰을 넣어두고, 나중에 자동 갱신이 되면 DB에 저장되니까 자연스럽게 전환됩니다.
토큰 갱신도 QStash로 스케줄링했습니다. 매주 월요일 새벽 3시에 갱신 API를 호출하게 설정했습니다. 새벽 3시인 이유는 사용자가 거의 없는 시간이라 문제가 생겨도 영향이 적기 때문입니다.
갱신 API가 하는 일:
수동으로 갱신 API를 호출해봤습니다. 기존 토큰으로 갱신 요청을 보내니까, Meta에서 새 토큰을 줬습니다. 새 토큰으로 발행 테스트를 해보니 잘 됐습니다.
DB를 확인해보니 새 토큰이 저장되어 있었습니다. 환경변수는 건드리지 않았는데도 새 토큰을 쓰고 있었습니다.
이 기능을 추가하면서 마케팅 자동화 툴이 정말 "자동화"가 됐습니다.
사람이 할 일이 거의 없어졌습니다. 가끔 로그 확인하고, 새로운 주제 등록하는 정도. 나머지는 알아서 돌아갑니다.
물론 완벽하진 않습니다. 가끔 에러도 나고, 예상치 못한 문제도 생깁니다. 다음 편에서 이런 문제들과 10일간의 경험을 정리하겠습니다.
다음 편: 비개발자가 10일 바이브코딩 해보고 느낀 솔직한 후기
댓글을 작성하려면 로그인이 필요합니다.
시리즈: 비개발자의 바이브코딩 도전기 (9/10)
한가지 더 남았습니다. Thread API 토큰은 60일이 유효기간이 있다는 겁니다. 그러면, 언제 만료될지 모르니까, 구글캘린더에 저장해두고 토큰갱신을 해줘야 하는 일이 있었습니다.
토큰은 "나 이 서비스 쓸 권한 있어"를 증명하는 열쇠 같은 겁니다. Threads API를 쓰려면 Meta에서 토큰을 발급받아야 합니다. 이 토큰을 API 요청에 포함시키면 "얘는 허가된 사용자야"라고 인정받습니다.
문제는 토큰에 유효기간이 있다는 겁니다. Threads 토큰은 60일 후에 만료됩니다. 만료되면 새 토큰을 발급받아야 합니다.
처음에는 토큰을 환경변수에 저장해뒀습니다. 환경변수는 코드 밖에서 설정하는 값이라고 전에 설명했죠. 토큰을 환경변수에 넣어두면, 코드에서 그 값을 읽어서 사용합니다.
근데 환경변수를 바꾸려면 Vercel 대시보드에 들어가서 수동으로 업데이트하고, 다시 배포해야 합니다. 60일마다 이걸 수동으로 해야 한다고요? 귀찮은 건 둘째고, 깜빡 잊으면 서비스가 멈춥니다.
Claude한테 물어봤습니다.
"토큰이 만료되기 전에 자동으로 갱신할 수 없을까?"
Claude가 방법을 알려줬습니다. Threads API에는 토큰을 갱신하는 API가 있습니다. 현재 토큰으로 갱신 API를 호출하면, 새 토큰을 받을 수 있습니다. 이걸 주기적으로 하면 토큰이 영원히 안 만료됩니다.
근데 문제가 있습니다. 새 토큰을 받으면 어디에 저장하죠? 환경변수에 저장하면 결국 수동으로 업데이트해야 합니다.
해결책은 데이터베이스에 저장하는 겁니다. 토큰을 DB에 저장하고, API 호출할 때 DB에서 토큰을 읽어옵니다. 갱신하면 DB에 새 토큰을 저장합니다. 이러면 코드를 재배포할 필요가 없습니다.
Claude가 코드를 짜줬습니다. 구조는 이렇습니다.
매주 한 번 갱신하면 60일 만료 전에 항상 새 토큰으로 바뀝니다.
그런데 한 가지 더 고려할 게 있었습니다. 만약 DB에 토큰이 없으면 어떻게 하죠? 처음 서비스를 시작할 때는 DB가 비어있으니까요.
그래서 폴백(fallback) 로직을 넣었습니다. 폴백은 "원래 방법이 안 되면 대신 쓰는 방법"입니다.
토큰 조회 순서:
이러면 처음에는 환경변수에 토큰을 넣어두고, 나중에 자동 갱신이 되면 DB에 저장되니까 자연스럽게 전환됩니다.
토큰 갱신도 QStash로 스케줄링했습니다. 매주 월요일 새벽 3시에 갱신 API를 호출하게 설정했습니다. 새벽 3시인 이유는 사용자가 거의 없는 시간이라 문제가 생겨도 영향이 적기 때문입니다.
갱신 API가 하는 일:
수동으로 갱신 API를 호출해봤습니다. 기존 토큰으로 갱신 요청을 보내니까, Meta에서 새 토큰을 줬습니다. 새 토큰으로 발행 테스트를 해보니 잘 됐습니다.
DB를 확인해보니 새 토큰이 저장되어 있었습니다. 환경변수는 건드리지 않았는데도 새 토큰을 쓰고 있었습니다.
이 기능을 추가하면서 마케팅 자동화 툴이 정말 "자동화"가 됐습니다.
사람이 할 일이 거의 없어졌습니다. 가끔 로그 확인하고, 새로운 주제 등록하는 정도. 나머지는 알아서 돌아갑니다.
물론 완벽하진 않습니다. 가끔 에러도 나고, 예상치 못한 문제도 생깁니다. 다음 편에서 이런 문제들과 10일간의 경험을 정리하겠습니다.
다음 편: 비개발자가 10일 바이브코딩 해보고 느낀 솔직한 후기
댓글을 작성하려면 로그인이 필요합니다.