본문 바로가기
1인 개발 노트

카카오 API 처음 연동하다가 막힌 것들

by 사장J 2026. 6. 8.

매일 정해진 시간에 카카오톡 메시지를 자동으로 보내는 작은 프로그램을 만들었어요.
원리는 단순합니다. Vercel cron으로 매일 오전 10시에 함수를 실행하고, 그 안에서 카카오 API를 호출해서 "나에게 보내기"로 메시지를 쏘는 것.

생각보다 막히는 데가 있었고, 같은 상황에서 헤맸던 분들이 있을 것 같아서 정리해봤어요.


막힌 것 ① 환경변수를 등록했는데 API가 계속 인증 실패

Vercel 대시보드에서 KAKAO_REST_API_KEY를 등록하고 배포했는데, API 호출할 때마다 인증 오류가 났어요.

로컬에서 vercel env pull로 확인해보면 값이 있어 보이는데 실제로는 없는 것처럼 동작하는 상황.

원인: vercel env pull은 암호화된 환경변수를 빈 문자열("")로 마스킹해서 내려줘요. 실제로 등록이 됐는지 확인하려면 vercel env ls에서 해당 키가 "Encrypted" 로 표시되는지 봐야 합니다.

해결: 환경변수를 다시 정확히 설정하고, vercel deploy --prod로 재배포해야 새 값이 적용돼요. 환경변수 바꿨다고 끝이 아니라 재배포가 필요하다는 것, 처음엔 몰랐어요.


막힌 것 ② KOE010 Bad client credentials

환경변수 문제 해결하고 나서 다시 호출했더니 이번엔 KOE010 Bad client credentials 에러가 나왔어요.

키가 맞는 것 같은데 왜 자격증명 오류가 나는 건지 한참 찾았습니다.

원인: 카카오 개발자 콘솔에서 클라이언트 시크릿이 "사용함"으로 설정되어 있으면, API 요청할 때 REST API 키뿐만 아니라 client_secret 값도 같이 보내야 해요. 저는 키만 보내고 있었던 거예요.

해결: 별도로 시크릿 값을 관리할 생각이 없다면, 콘솔에서 클라이언트 시크릿을 "사용 안 함"으로 끄면 바로 해결됩니다.

참고로 연동이 제대로 됐는지 확인하는 방법:

curl -X POST https://kauth.kakao.com/oauth/token \
  -d grant_type=refresh_token \
  -d client_id=<키> \
  -d refresh_token=dummy

응답이 KOE010이면 키·시크릿 문제, KOE322면 자격증명은 통과된 거예요.


결국 어떻게 됐냐면

두 가지 막힌 지점을 넘고 나서, 지금은 매일 오전 10시에 카카오톡 메시지가 정확하게 오고 있어요.

카카오 API 자체는 문서도 잘 돼 있고 연동 구조도 단순한 편인데, 처음 셋업할 때 이 두 가지에서 예상보다 시간을 많이 썼어요. 비슷한 상황에서 막히신 분들한테 조금이라도 도움이 됐으면 합니다.