TechFeedTechFeed
Frontend

redirect_uri_mismatch, 카카오 콜백, REST 키 | 로컬은 되고 프리뷰만 실패하면?

redirect_uri_mismatch와 카카오 KOE006은 코드가 틀린 게 아니라 요청에 실은 콜백 주소가 콘솔 등록 문자열과 한 글자라도 다른 줄입니다. http와 https, 끝 슬래시, REST 키와 JS 키, 프리뷰 호스트. 카카오, 구글, Next.js, 한국 1인 개발자 기준. 2026년 9월 카카오 로그인 REST·구글 OAuth 문서.

by

redirect_uri_mismatch와 카카오 KOE006은 코드가 틀린 게 아니라, 요청에 실은 콜백 주소가 콘솔에 등록한 문자열과 한 글자라도 다른 줄입니다. 로컬만 되고 프리뷰만 실패하면 그 주소부터 대조하세요.


카카오 로그인은 되는데 버셀 프리뷰만 에러 화면으로 떨어지는 일, REST 키와 자바스크립트 키를 나눠 쓰면서 한 번은 만납니다. 키를 바꾸기 전에 URI를 나란히 보세요.


http와 https, 끝 슬래시, www, 키 종류가 칸입니다. 근거는 카카오 로그인 REST API구글 OAuth 리다이렉트 오류에 있습니다.


등록 문자열과 요청 문자열이 같아야 한다

카카오는 인가 코드 요청의 redirect_uri가 REST 키에 등록한 값과 같아야 합니다. 다르면 KOE006입니다. 구글도 콘솔에 없는 URI면 redirect_uri_mismatch를 줍니다. 둘 다 문자열 완전 일치입니다.


카카오 문서도 REST API 키의 Redirect URI와 요청 파라미터가 일치하지 않으면 KOE006이라고 못 박습니다. 자바스크립트 SDK를 쓰면 그 키 아래 URI를 따로 등록해야 합니다. 앱 전체에 한 칸이 아닙니다.


로그인 후 화면이 돌며 루프가 되는 줄은 리다이렉트 루프입니다. 여기 줄은 카카오, 구글이 콜백을 거절한 경우입니다. 쿠키 SameSite로 세션이 끊기는 줄은 SameSite 글입니다.


요청 URI콘솔 등록결과
http://localhost:3000/api/auth/callback같은 문자열통과
https://preview.vercel.app/api/auth/callbacklocalhost만 있음KOE006, mismatch
끝 슬래시 있음끝 슬래시 없음거절
httpshttp거절

두 문자열을 복사해 붙여 보세요 | 코드의 redirect_uri와 콘솔 입력란을 메모장에 나란히 둡니다. 공백, 슬래시, http, 포트 3000과 3001이 가장 많이 갈립니다.


카카오 디벨로퍼스에 등록한 콜백 URI와 실제 요청 주소가 다른 개념 이미지
콘솔에 없는 콜백 주소는 한 글자만 달라도 거절된다

http, 슬래시, www가 다른 칸이다

카카오는 http와 https를 따로 등록합니다. 로컬은 http://localhost:3000, 프리뷰는 https://....vercel.app입니다. 로컬 URI만 있으면 배포 콜백은 거절됩니다. 포트가 3001로 바뀌어도 다른 주소입니다.


끝 슬래시가 있으면 없는 값과 다릅니다. 넥스트 trailingSlash가 콜백 경로에 슬래시를 붙이면 콘솔 값과 어긋납니다. 구글 콘솔도 슬래시까지 포함해 등록해야 합니다.


www와 apex, 커스텀 도메인과 버셀 기본 도메인도 각각 한 줄입니다. 와일드카드는 카카오가 도메인 단위로 허용하는 경우가 있어 문서 기준으로 확인하세요. 쿼리스트링을 경로에 넣으면 저장 시 잘리거나 거절됩니다. state 파라미터로 넘기세요.


로컬과 프리뷰를 둘 다 등록
# 카카오 REST API 키 > Redirect URI 예시 http://localhost:3000/api/auth/callback/kakao https://내사이트.vercel.app/api/auth/callback/kakao https://내사이트-git-브랜치-팀.vercel.app/api/auth/callback/kakao # 코드의 redirect_uri는 위 문자열과 완전 일치

REST 키와 자바스크립트 키가 섞이면

카카오는 플랫폼 키마다 Redirect URI를 둡니다. 서버에서 REST로 인가 URL을 만들면 REST 키 칸에 등록해야 합니다. 프론트 SDK면 자바스크립트 키 칸입니다. 한쪽만 고치면 다른 호출은 그대로 실패합니다.


client_id에 REST 키를 넣고 URI는 자바스크립트 키에만 있으면 KOE006입니다. 네이버, 구글도 클라이언트 ID와 등록 URI가 한 세트입니다. 환경 변수에 키는 맞는데 URI만 로컬인 구성이 프리뷰에서 자주 납니다.


로그인 버튼에서 쿠키를 읽다 서버 전용 API 경고가 나는 줄은 콜백 등록과 무관합니다. 헤더와 쿠키는 서버에서 읽고, 콜백 주소는 콘솔과 맞추세요. CORS로 토큰 교환이 막히면 CORS 글입니다.


호출 방식등록 칸client_id
서버 RESTREST API 키 Redirect URIREST 키
카카오 JS SDKJavaScript 키 Redirect URIJS 키
구글 웹해당 클라이언트 ID의 URI그 클라이언트 ID

카카오 REST 키와 자바스크립트 키에 콜백 URI를 각각 등록하는 개념 이미지
호출에 쓰는 키 아래에 URI를 넣어야 한다

프리뷰 URL은 배포마다 달라진다

버셀 프리뷰 호스트는 브랜치 이름에 따라 바뀝니다. 콘솔에 프로덕션 도메인만 있으면 프리뷰 로그인은 매번 거절됩니다. 카카오는 URI를 최대 10개까지 넣는다고 안내하므로, 고정 프리뷰 도메인이나 스테이징 도메인을 따로 두는 편이 낫습니다.


환경 변수 NEXTAUTH_URL이나 공개 사이트 URL이 로컬로 남아 있으면, 코드가 localhost 콜백을 만들어 배포에서 mismatch가 납니다. 프리뷰 환경 값에 그 배포 원점을 넣으세요. 클라이언트에 안 박히는 키는 NEXT_PUBLIC 글과 칸이 다릅니다. 여기 문제는 서버가 만드는 콜백 문자열입니다.


와일드카드 도메인을 허용하는 콘솔이면 문서 범위만 쓰세요. 임의 경로를 열어 두면 열린 리다이렉트가 됩니다. 필요한 콜백 경로만 적습니다.


  • [ ] 요청 redirect_uri와 콘솔 값을 복사해 비교했다
  • [ ] http, https, 포트, 끝 슬래시를 확인했다
  • [ ] REST 키와 JS 키 중 실제 호출 키 칸에 등록했다
  • [ ] 프리뷰 호스트를 콘솔에 넣거나 고정 스테이징을 썼다
  • [ ] 코드가 만드는 콜백이 배포 원점을 쓰는지 봤다

실전에서 고르는 순서

에러 화면에 적힌 redirect URI를 복사합니다. 콘솔 목록에 그 문자열이 있는지 찾고, 없으면 추가합니다. 있으면 코드가 다른 키나 다른 슬래시로 보내고 있는지 봅니다.


로컬이 되면 콘솔과 코드의 로컬 값은 맞습니다. 배포만 실패면 배포 원점이 빠진 겁니다. 키를 재발급하기 전에 URI 한 줄을 맞추는 편이 빠릅니다.


한국에서 카카오 로그인을 넥스트 라우트 핸들러로 받는 구성이면, 콜백 경로를 /api/auth/callback/kakao처럼 고정하고 로컬, 스테이징, 프로덕션 세 줄을 콘솔에 넣어둡니다. 브랜치마다 호스트가 바뀌는 프리뷰는 스테이징으로 우회하는 편이 안전합니다.


로컬과 프리뷰 콜백 URI를 콘솔에 함께 등록하는 순서 이미지
에러에 찍힌 URI를 콘솔에 그대로 추가하면 대부분 풀린다

참고 자료


내부 연계: 리다이렉트 루프, 쿠키 SameSite, CORS, NEXT_PUBLIC


인용한 동작은 2026년 9월 공개 문서 기준입니다.


자주 묻는 질문

로컬은 되고 프리뷰만 KOE006입니다.

콘솔에 localhost만 있는 상태입니다. 프리뷰 https 호스트와 콜백 경로를 REST 키 칸에 추가하세요. 코드가 만드는 URI와 한 글자도 같아야 합니다.


콘솔에 주소를 넣었는데도 거절됩니다.

끝 슬래시, http와 https, 포트, REST 키와 JS 키 칸이 갈렸을 가능성이 큽니다. 에러에 찍힌 URI를 복사해 콘솔 값과 붙여 넣기 비교하세요.


REST 키에 넣었는데 SDK 로그인이 실패합니다.

자바스크립트 SDK는 JavaScript 키 아래 URI를 봅니다. 서버 REST 호출은 REST 키 칸입니다. 쓰는 키 아래에 같은 콜백을 넣으세요.


프리뷰 주소가 배포마다 바뀝니다.

카카오 URI 개수 한도가 있어 모든 브랜치를 넣기 어렵습니다. 고정 스테이징 도메인을 두고 그 주소만 등록하는 편이 낫습니다.


구글과 카카오가 동시에 실패합니다.

코드가 만드는 콜백 원점이 둘 다 잘못됐을 수 있습니다. 사이트 URL 환경 변수가 로컬로 남아 있는지 보세요. 콘솔은 서비스마다 따로 등록합니다.


키가 유출된 건 아닌가요?

mismatch는 등록 URI 불일치입니다. 키 유출 증상이 아닙니다. 키를 재발급하기 전에 콜백 문자열부터 맞추세요.


KOE006과 redirect_uri_mismatch는 콘솔에 없는 콜백 주소를 보냈다는 뜻입니다. 에러에 찍힌 URI를 그 키 칸에 그대로 넣으세요. 관련 글: 리다이렉트 루프, SameSite, CORS.


redirect_uri_mismatch카카오콜백REST 키KOE006OAuth넥스트버셀프론트엔드로그인개발자
EXPLORE / Frontend

이어서 읽어보기

전체 토픽 둘러보기