시리즈: 비개발자의 바이브코딩 도전기 (5/10)
v1.0을 배포하고 뿌듯해하고 있었는데, 다음 날 아침에 문제가 터졌습니다. 자동 발행이 안 된 겁니다. 아침 9시에 발행되어야 할 글이 그대로 있었습니다.
일단 뭐가 문제인지 파악해야 했습니다. Claude한테 물어봤습니다.
"자동 발행이 안 됐어. 어떻게 확인해봐야 해?"
Claude가 로그를 확인해보자고 했습니다. 로그란 프로그램이 실행되면서 남기는 기록입니다. "몇 시에 뭘 했다"는 식으로 기록이 남습니다. 문제가 생기면 로그를 보고 어디서 잘못됐는지 추적합니다.
저는 Vercel이라는 서비스에 배포했는데, Vercel 대시보드에서 로그를 볼 수 있었습니다. 배포란 내 컴퓨터에서만 돌아가던 프로그램을 인터넷에 올려서 누구나 접속할 수 있게 만드는 겁니다. Vercel은 이걸 쉽게 해주는 서비스입니다.
로그를 봤더니 QStash가 우리 서비스를 호출하긴 했는데, 401 에러가 나고 있었습니다.
401 에러는 "인증 실패"를 뜻합니다. 쉽게 말해 "너 누군지 모르겠으니까 안 돼"라는 거죠.
QStash가 우리 서비스를 호출할 때, 우리 서비스가 "이 요청이 진짜 QStash에서 온 게 맞나?" 확인하는 과정이 있습니다. 이걸 인증이라고 합니다. 아무나 호출하면 안 되니까요.
근데 이 인증 과정에서 뭔가 잘못되고 있었습니다.
Claude한테 상황을 설명했습니다.
"QStash에서 오는 요청이 401 에러가 나. 인증이 실패하는 것 같아."
Claude가 코드를 확인해봤습니다. 인증 로직에서 문제를 찾았습니다. QStash는 요청을 보낼 때 특별한 서명(signature)을 함께 보내는데, 우리가 이 서명을 검증하는 과정에서 URL이 잘못 설정되어 있었습니다.
서명이란 "이 요청이 진짜 내가 보낸 거야"라는 증명입니다. 편지에 서명하는 것과 비슷합니다. QStash가 보낸 서명을 우리가 확인해서, 진짜 QStash에서 온 요청인지 검증합니다.
문제는 이 검증에 사용하는 URL이 localhost로 되어 있었던 겁니다. 개발할 때는 localhost였는데, 실제 배포 환경에서는 실제 도메인을 써야 했습니다.
Claude가 코드를 수정했습니다. 환경변수에서 실제 URL을 가져오도록 바꿨습니다.
환경변수란 코드 밖에서 설정하는 값입니다. 예를 들어 비밀번호 같은 건 코드에 직접 쓰면 안 되니까, 환경변수로 따로 설정합니다. 개발 환경과 실제 환경에서 다른 값을 쓸 때도 유용합니다.
수정한 코드를 다시 배포했습니다. git이라는 도구로 코드를 올리면 Vercel이 자동으로 새 버전을 배포합니다.
git은 코드 버전을 관리하는 도구입니다. 파일을 수정할 때마다 기록을 남겨서, 나중에 "어제 버전으로 돌아가고 싶어"할 때 돌아갈 수 있습니다. 협업할 때도 필수입니다.
배포하고 테스트해봤더니, 이번엔 다른 문제가 생겼습니다. 인증은 통과하는데, 발행 함수가 너무 오래 걸려서 타임아웃이 나고 있었습니다.
타임아웃이란 "너무 오래 걸려서 포기"하는 겁니다. Vercel 무료 플랜에서는 함수가 10초 안에 끝나야 합니다. 근데 Threads API 호출이 느려서 10초를 넘기고 있었습니다.
Claude한테 물어봤습니다.
"Vercel에서 타임아웃이 나. 시간을 늘릴 수 있어?"
Claude가 방법을 알려줬습니다. API 라우트 파일에 특별한 설정을 추가하면 됩니다.
export const maxDuration = 60;
이렇게 하면 최대 60초까지 기다립니다. 물론 유료 플랜이어야 합니다. 무료 플랜은 10초가 최대입니다.
다행히 저는 유료 플랜을 쓰고 있어서, 이 설정을 추가하고 다시 배포했습니다.
배포 후에 다음 정시를 기다렸습니다. 10분, 20분... 정시가 되자 QStash가 호출됐고, 이번엔 성공했습니다. Threads에 글이 자동으로 올라갔습니다.
그 순간의 쾌감은 말로 표현하기 어렵습니다. 문제를 찾고, 원인을 파악하고, 해결하는 과정이 힘들었지만, 결국 되니까 성취감이 엄청났습니다.
이 경험에서 배운 게 있습니다.
첫째, 에러 메시지를 잘 읽어야 합니다. 401이 뜨면 인증 문제, 500이 뜨면 서버 문제. 숫자마다 의미가 있습니다.
둘째, 로그를 확인해야 합니다. 뭐가 잘못됐는지 로그에 다 나옵니다. 개발자들이 로그를 중요하게 생각하는 이유를 알겠습니다.
셋째, 환경이 다르면 동작도 다를 수 있습니다. 내 컴퓨터에서 됐다고 실제 서버에서도 되는 게 아닙니다. 배포 후에 반드시 테스트해야 합니다.
다음 편에서는 기능적인 개선을 다룹니다. AI가 생성하는 글의 톤앤매너를 조정한 이야기입니다.
다음 편: "너무 AI스럽잖아" AI한테 내 말투 가르치는 법
댓글을 작성하려면 로그인이 필요합니다.
시리즈: 비개발자의 바이브코딩 도전기 (5/10)
v1.0을 배포하고 뿌듯해하고 있었는데, 다음 날 아침에 문제가 터졌습니다. 자동 발행이 안 된 겁니다. 아침 9시에 발행되어야 할 글이 그대로 있었습니다.
일단 뭐가 문제인지 파악해야 했습니다. Claude한테 물어봤습니다.
"자동 발행이 안 됐어. 어떻게 확인해봐야 해?"
Claude가 로그를 확인해보자고 했습니다. 로그란 프로그램이 실행되면서 남기는 기록입니다. "몇 시에 뭘 했다"는 식으로 기록이 남습니다. 문제가 생기면 로그를 보고 어디서 잘못됐는지 추적합니다.
저는 Vercel이라는 서비스에 배포했는데, Vercel 대시보드에서 로그를 볼 수 있었습니다. 배포란 내 컴퓨터에서만 돌아가던 프로그램을 인터넷에 올려서 누구나 접속할 수 있게 만드는 겁니다. Vercel은 이걸 쉽게 해주는 서비스입니다.
로그를 봤더니 QStash가 우리 서비스를 호출하긴 했는데, 401 에러가 나고 있었습니다.
401 에러는 "인증 실패"를 뜻합니다. 쉽게 말해 "너 누군지 모르겠으니까 안 돼"라는 거죠.
QStash가 우리 서비스를 호출할 때, 우리 서비스가 "이 요청이 진짜 QStash에서 온 게 맞나?" 확인하는 과정이 있습니다. 이걸 인증이라고 합니다. 아무나 호출하면 안 되니까요.
근데 이 인증 과정에서 뭔가 잘못되고 있었습니다.
Claude한테 상황을 설명했습니다.
"QStash에서 오는 요청이 401 에러가 나. 인증이 실패하는 것 같아."
Claude가 코드를 확인해봤습니다. 인증 로직에서 문제를 찾았습니다. QStash는 요청을 보낼 때 특별한 서명(signature)을 함께 보내는데, 우리가 이 서명을 검증하는 과정에서 URL이 잘못 설정되어 있었습니다.
서명이란 "이 요청이 진짜 내가 보낸 거야"라는 증명입니다. 편지에 서명하는 것과 비슷합니다. QStash가 보낸 서명을 우리가 확인해서, 진짜 QStash에서 온 요청인지 검증합니다.
문제는 이 검증에 사용하는 URL이 localhost로 되어 있었던 겁니다. 개발할 때는 localhost였는데, 실제 배포 환경에서는 실제 도메인을 써야 했습니다.
Claude가 코드를 수정했습니다. 환경변수에서 실제 URL을 가져오도록 바꿨습니다.
환경변수란 코드 밖에서 설정하는 값입니다. 예를 들어 비밀번호 같은 건 코드에 직접 쓰면 안 되니까, 환경변수로 따로 설정합니다. 개발 환경과 실제 환경에서 다른 값을 쓸 때도 유용합니다.
수정한 코드를 다시 배포했습니다. git이라는 도구로 코드를 올리면 Vercel이 자동으로 새 버전을 배포합니다.
git은 코드 버전을 관리하는 도구입니다. 파일을 수정할 때마다 기록을 남겨서, 나중에 "어제 버전으로 돌아가고 싶어"할 때 돌아갈 수 있습니다. 협업할 때도 필수입니다.
배포하고 테스트해봤더니, 이번엔 다른 문제가 생겼습니다. 인증은 통과하는데, 발행 함수가 너무 오래 걸려서 타임아웃이 나고 있었습니다.
타임아웃이란 "너무 오래 걸려서 포기"하는 겁니다. Vercel 무료 플랜에서는 함수가 10초 안에 끝나야 합니다. 근데 Threads API 호출이 느려서 10초를 넘기고 있었습니다.
Claude한테 물어봤습니다.
"Vercel에서 타임아웃이 나. 시간을 늘릴 수 있어?"
Claude가 방법을 알려줬습니다. API 라우트 파일에 특별한 설정을 추가하면 됩니다.
export const maxDuration = 60;
이렇게 하면 최대 60초까지 기다립니다. 물론 유료 플랜이어야 합니다. 무료 플랜은 10초가 최대입니다.
다행히 저는 유료 플랜을 쓰고 있어서, 이 설정을 추가하고 다시 배포했습니다.
배포 후에 다음 정시를 기다렸습니다. 10분, 20분... 정시가 되자 QStash가 호출됐고, 이번엔 성공했습니다. Threads에 글이 자동으로 올라갔습니다.
그 순간의 쾌감은 말로 표현하기 어렵습니다. 문제를 찾고, 원인을 파악하고, 해결하는 과정이 힘들었지만, 결국 되니까 성취감이 엄청났습니다.
이 경험에서 배운 게 있습니다.
첫째, 에러 메시지를 잘 읽어야 합니다. 401이 뜨면 인증 문제, 500이 뜨면 서버 문제. 숫자마다 의미가 있습니다.
둘째, 로그를 확인해야 합니다. 뭐가 잘못됐는지 로그에 다 나옵니다. 개발자들이 로그를 중요하게 생각하는 이유를 알겠습니다.
셋째, 환경이 다르면 동작도 다를 수 있습니다. 내 컴퓨터에서 됐다고 실제 서버에서도 되는 게 아닙니다. 배포 후에 반드시 테스트해야 합니다.
다음 편에서는 기능적인 개선을 다룹니다. AI가 생성하는 글의 톤앤매너를 조정한 이야기입니다.
다음 편: "너무 AI스럽잖아" AI한테 내 말투 가르치는 법
댓글을 작성하려면 로그인이 필요합니다.