사이드 메뉴
시작하기
로그인
커뮤니케이션
광고
개발 가이드
이 문서는 서비스에 카카오싱크를 연동할 때 실제 개발에 필요한 구현 흐름과 확인 사항을 안내합니다.
카카오싱크는 카카오 로그인을 기반으로 동작합니다. 카카오싱크의 간편가입 기능을 도입하면, 사용자가 동의 화면에서 서비스 약관에 함께 동의할 수 있어, 사용자는 한번의 클릭으로 서비스에 가입할 수 있습니다.
사용자가 카카오 로그인에 성공해도 서비스 데이터베이스에 회원을 생성하거나 기존 회원과 연결하지 않으면 서비스 가입은 완료되지 않습니다. 사용자 정보 조회와 서비스 약관 동의 내역 확인 후, 서비스 정책에 맞게 회원 가입 또는 로그인 처리를 구현해야 합니다.
개발에 어려움이 있는 경우, 쇼핑몰 호스팅 서비스를 이용할 수도 있습니다. 전자상거래 플랫폼을 위한 가이드를 참고합니다.
아래는 REST API 방식으로 카카오싱크 간편 가입의 기본 흐름입니다. 아래 다이어그램과 함께 단계별 설명을 참고합니다.

1. 인가 코드 요청
서비스는 사용자가 [카카오로 시작하기] 버튼을 선택하면 카카오 로그인 인가 코드 요청 API를 호출합니다.
카카오 인증 서버는 사용자에게 카카오계정 인증과 동의 화면을 제공합니다. 카카오싱크 동의 화면에는 앱 설정에 따라 아래 항목이 함께 표시될 수 있습니다.
- 서비스 회원 가입에 필요한 사용자 정보 제공 동의
- 서비스 약관 동의
- 카카오톡 채널 추가 동의
사용자가 동의항목과 서비스 약관에 동의하면 카카오 인증 서버는 설정한 리다이렉트 URI로 인가 코드를 전달합니다.
2. 토큰 발급 요청
서비스 서버는 전달받은 인가 코드로 토큰 요청 API를 호출해 액세스 토큰을 발급받습니다.
인가 코드는 한 번만 사용할 수 있습니다. 토큰 요청에 실패했다면 같은 인가 코드로 재시도하지 말고 사용자가 다시 로그인하도록 처리합니다.
3. 사용자 정보 조회
서비스 서버는 액세스 토큰으로 사용자 정보 조회 API를 호출합니다. 응답의 회원번호(id)는 카카오싱크 사용자를 식별하는 기준값입니다.
서비스는 사용자 정보 조회 응답으로 아래 내용을 확인할 수 있습니다.
- 회원번호(
id) - 사용자가 동의한 항목에 대한 사용자 정보
- 사용자 동의항목 동의 내역
- 카카오싱크 간편가입 시각(
synched_at)
필수 정보가 응답에 없다면 서비스 정책에 따라 가입을 중단하거나, 서비스 화면에서 사용자가 직접 정보를 입력하도록 별도 동선을 제공합니다.
4. 서비스 약관 동의 내역 조회
서비스 서버는 서비스 약관 동의 내역 조회 API를 호출해 사용자가 어떤 서비스 약관에 동의했는지 확인합니다.
서비스 약관은 간편가입 설정 시 지정한 태그로 식별합니다. 서비스는 앱에 등록된 필수 약관 태그와 사용자의 동의 내역을 비교해 가입 완료 여부를 판단합니다.
필요한 필수 약관에 동의하지 않은 사용자는 아래 방법 중 하나로 처리합니다.
- 서비스 약관 선택해 동의 요청 API로 필요한 약관만 다시 동의 요청
- 서비스 자체 약관 동의 화면에서 추가 동의 처리
5. 카카오톡 채널 친구 관계 조회(선택)
카카오싱크 동의 화면에서 사용자가 채널 추가에 동의하더라도, 서비스에서 실제 친구 상태를 기준으로 혜택을 제공하거나 메시지 발송 대상을 관리해야 한다면 카카오톡 채널 관계 조회 API를 사용합니다.
채널 친구 상태는 서비스 앱과 사용자 연결 상태와 별개입니다. 사용자가 서비스와 앱의 연결을 끊어도 카카오톡 채널 친구 상태는 유지될 수 있습니다.
6. 기존 회원 연결 확인 및 서비스 회원 등록
서비스는 사용자 정보와 약관 동의 내역을 확인한 뒤 서비스 데이터베이스에서 회원 가입 또는 로그인 처리를 수행합니다.
- 신규 사용자: 일치하는 서비스 회원이 없으면 카카오 회원번호와 필요한 사용자 정보를 저장하고 서비스 회원을 생성합니다.
- 기존 회원: 서비스 정책에 따라 기존 서비스 회원을 찾고, 사용자 동의를 거쳐 해당 회원과 카카오 회원번호를 매핑해 저장합니다.
- 이미 연결된 사용자: 서비스 데이터베이스에 저장된 카카오 회원번호로 회원을 찾아 로그인 처리합니다.
자세한 내용은 카카오 로그인 > 기존 회원 연동을 참고합니다.
7. 서비스 세션 생성과 로그인 완료
카카오 로그인 또는 카카오싱크 동의가 완료되어도 서비스의 로그인 처리가 자동으로 끝나는 것은 아닙니다.
서비스에서 신규 회원을 생성하거나 기존 회원을 찾은 뒤, 해당 사용자가 로그인한 상태로 서비스를 이용할 수 있도록 서비스 세션을 생성하고 로그인 완료 화면으로 이동시켜야 합니다.
카카오싱크를 사용하려면 앱에 아래 설정이 완료되어 있어야 합니다. 전반적인 설정 과정은 설정하기를 참고합니다.
카페24, 아임웹, 고도몰 등 쇼핑몰 호스팅 서비스를 이용한다면 전자상거래 플랫폼을 위한 가이드를 참고해 개발합니다.
카카오싱크 개발을 시작하기 전에 사용자가 카카오싱크 동의 화면을 거친 뒤 어떤 화면과 처리 과정을 지나 서비스 가입 또는 로그인을 완료하는지 먼저 설계합니다. 카카오싱크는 카카오가 회원 가입에 필요한 동의와 정보를 전달하는 기능이며, 서비스 회원 생성, 기존 회원 확인, 계정 연결, 추가 정보 수집은 서비스에서 구현해야 합니다.
권장하는 기본 동선은 카카오싱크 동의 화면 이후 추가 입력을 최소화해 바로 가입을 완료하는 방식입니다.
- 사용자가 [카카오로 시작하기] 버튼을 선택합니다.
- 서비스는 카카오 로그인 동의화면에서 사용자 정보 제공과 서비스 약관에 동의합니다.
- 서비스는 사용자 정보 조회와 서비스 약관 동의 내역 조회로 가입에 필요한 정보와 약관 동의 상태를 확인합니다.
- 서비스 데이터베이스에서 기존 회원 여부를 확인합니다.
- 신규 회원이면 회원을 생성하고, 기존 회원이면 사용자 동의를 거쳐 기존 회원과 카카오 회원번호를 연결합니다.
- 서비스 세션을 발급해 로그인 처리를 완료합니다.
회원 가입에 꼭 필요하지 않은 정보는 가입 후 필요한 시점에 별도로 수집하는 것을 권장합니다. 카카오싱크 동의 화면 이후 추가 입력 화면이 길어질수록 가입 이탈이 늘어날 수 있습니다.
이미 운영 중인 서비스라면 카카오싱크로 들어온 사용자가 기존 회원일 수 있습니다. 서비스는 기존 회원 여부 확인을 수행한 뒤, 결과에 따라 신규 가입 또는 기존 회원 연동 동선을 제공해야 합니다.
기존 회원 확인은 아래 우선순위로 설계합니다.
| 확인 결과 | 처리 방법 |
|---|---|
| 서비스 데이터베이스에 저장된 회원번호와 일치 | 이미 카카오 로그인 또는 카카오싱크로 연결된 회원이므로 해당 서비스 회원으로 로그인 처리 |
| CI(연계정보), 이메일 등 서비스가 정한 기준을 만족하는 사용자가 1명 존재 | 사용자에게 마스킹된 계정 정보, 가입일, 닉네임 등 단서를 보여주고 연동 의사를 확인한 뒤 기존 회원과 연결 |
| 일부 정보만 일치하거나 여러 계정이 후보로 존재 | 이메일 인증, 기존 계정 로그인 등 추가 확인 절차로 계정 소유자임을 확인한 뒤 연결 |
| 일치하는 정보가 없음 | 신규 회원으로 가입 처리하고, 필요한 경우 가입 후 기존 계정 연결 기능 제공 |
기존 회원과 연결할 때는 사용자가 계정 연결을 원하는지 반드시 확인합니다. 정보가 일치하더라도 실제 계정 소유자가 다르거나 사용자가 새 계정으로 가입하기를 원할 수 있습니다. 자세한 처리 흐름은 회원 등록과 연동을 참고합니다.
- 이메일과 전화번호는 사용자가 변경할 수 있으므로 서비스 회원의 고정 식별자로 사용하지 않습니다.
- 이메일로 동일인 여부를 판단할 때는 메일 소유자 인증을 완료한 뒤 연결하고, 전화번호는 소유자가 바뀔 수 있으므로 단순 문자열 비교만으로 기존 회원과 연결하지 않습니다.
- 자세한 내용은 카카오 로그인으로 기존 회원 매핑 시 주의 사항을 참고합니다.
[필수 동의]로 설정한 동의항목이라도 사용자 정보 조회 응답에 값이 없을 수 있습니다. [필수 동의]는 사용자가 해당 항목 제공에 동의해야 가입을 계속할 수 있다는 의미이며, 카카오계정에 없는 값을 카카오가 생성해 제공한다는 의미는 아닙니다.
사용자 정보 조회 응답에 서비스의 회원가입에 필요한 필수 정보가 없다면, 서비스 정책에 따라 별도 동선을 제공해야 합니다.
- 사용자가 직접 정보를 입력하도록 추가 입력 화면 제공
- 본인확인이 필요한 서비스라면 서비스에서 자체적으로 본인확인 절차 구현해 제공
- 필수 정보가 없으면 가입할 수 없다는 안내 후 가입 중단
사용자 정보를 받을 수 없는 대표적인 경우와 권장 조치는 아래와 같습니다.
| 경우 | 권장 조치 방법 |
|---|---|
| 사용자의 카카오계정에 해당 정보가 없음 | 해당 동의항목이 카카오계정으로 수집 후 제공을 지원하는지 확인하고, 지원하는 경우 해당 옵션을 사용합니다. 지원하지 않거나 사용자가 정보를 입력하지 않으면 서비스에서 추가 입력 화면을 제공해야 합니다. |
| 선택 동의항목에 사용자가 동의하지 않음 | 사용자 정보 조회 API 응답의 사용자 동의 시 정보 제공 가능 여부 값을 확인합니다. xxx_needs_agreement 값이 true이면 동의항목 추가 동의 요청으로 다시 동의를 요청하고, 사용자가 동의하지 않으면 서비스 정책에 따라 추가 입력 또는 기능 제한을 안내합니다. |
| 앱에 특정 사용자 정보에 대한 동의항목 또는 동의 단계가 설정되어 있지 않음 | 설정 가능한 동의 단계을 확인한 후, 필요한 설정 권한이 없다면 개인정보 동의항목 추가 기능을 신청합니다. 심사 승인 후, 동의항목을 설정할 수 있습니다. 승인 전에는 해당 정보를 카카오로부터 제공받을 수 없으므로 서비스에서 직접 수집하거나 가입 조건을 조정해야 합니다. |
| 카카오톡에 연결되지 않은 카카오계정이라 전화번호를 제공할 수 없음 | 전화번호가 반드시 필요하다면 서비스에서 전화번호 입력 및 인증 절차를 별도로 제공합니다. |
| 이름 또는 CI(연계정보)를 제공할 수 없음 | 이름 또는 CI(연계정보)가 반드시 필요하다면 서비스에서 자체 본인확인 절차를 제공합니다. |
사용자 정보 항목별 제공 조건은 사용자 정보를 참고합니다. 자세한 원인과 해결 방법은 사용자 정보 누락을 참고합니다.
카카오싱크 간편가입의 장점은 사용자가 별도 가입 페이지를 거치지 않고 서비스에 가입할 수 있다는 점입니다. 하지만 카카오싱크에서 제공받을 수 없는 정보까지 가입 단계에서 모두 입력받도록 만들면 가입 이탈이 커질 수 있습니다. 서비스 이용 중 실제로 필요한 시점에 추가 수집할 수 있는 정보인지 먼저 검토합니다.
카카오싱크 간편가입 과정을 참고해 API를 연동합니다.
| 구분 | API 및 기능 | 호출 및 사용 시점 |
|---|---|---|
| 필수 | 인가 코드 요청 | 사용자가 카카오로 시작하기 버튼 선택 시 |
| 필수 | 토큰 요청 | 리다이렉트 URI로 인가 코드를 받은 뒤 |
| 필수 | 사용자 정보 조회 | 액세스 토큰 발급 후 회원번호와 사용자 정보 조회 시 |
| 필수 | 서비스 약관 동의 내역 조회 | 사용자가 가입에 필요한 약관에 동의했는지 조회 시 |
| 선택 | 서비스 약관 선택해 동의 요청 | 특정 필수 약관에 대한 추가 동의 필요 시 |
| 선택 | 배송지 조회 | 사용자의 배송지 정보가 필요할 때 |
| 선택 | 카카오톡 채널 관계 조회 | 사용자가 서비스의 카카오톡 채널을 추가했는지 확인해야 할 때 |
| 선택 | 싱크 플러그인 | 사용자가 챗봇과 대화하다가 채팅방 안에서 나타나는 하프뷰(Half-View) 동의화면으로 빠르게 회원 가입 및 로그인하고 싶을 때 |
| 선택 | 톡에서 자동 로그인 | 사용자가 카카오톡 인앱브라우저에서 서비스에 접근한 경우 자동으로 카카오톡 계정으로 로그인되기를 원할 때 |
| 권장 | 연결 해제 | 사용자가 서비스에서 회원 탈퇴 시 중요: 연결 해제 웹훅이나 계정 상태 변경 웹훅을 사용하면, 사용자가 서비스에서 탈퇴하거나 앱과 연결 해제 시, 서비스에서 인지하여 처리할 수 있습니다. 이벤트 발생 시 서비스 데이터베이스에서 회원 정보를 삭제하고, 연결 해제 API를 호출해 앱과 사용자의 연결 해제해야 합니다. |
플랫폼별 API 개발 문서는 아래를 참고합니다.
연동 개발을 마친 뒤 운영 서비스에 적용하기 전에 아래 항목을 최종 확인합니다.
개발 완료 후 실제 계정으로 아래 시나리오를 확인합니다.
| 시나리오 | 확인할 내용 |
|---|---|
| 신규 사용자 가입 | 동의 화면 표시, 사용자 정보 조회, 서비스 약관 동의 내역, 서비스 회원 생성 |
| 기존 카카오 로그인 사용자 | 같은 앱의 회원번호로 기존 회원과 연결되는지, 필요한 추가 동의 화면이 표시되는지 |
| 필수 정보가 없는 사용자 | 가입 실패로 끝나지 않고 추가 입력 또는 안내 동선이 제공되는지 |
| 선택 동의 거부 사용자 | 선택 정보 없이도 서비스 정책에 맞게 가입 또는 로그인되는지 |
| 이미 채널 친구인 사용자 | 채널 추가 항목이 보이지 않아도 가입이 정상 처리되는지 |
| 카카오톡 미사용 계정 | 전화번호와 채널 추가 항목이 기대와 다르게 보일 수 있음을 처리하는지 |
| 탈퇴 후 재가입 | 서비스 DB 정보 삭제, 연결 해제, 같은 카카오 회원번호 재사용 정책 확인 |
세부 설정 방법은 각 참고 문서에서 확인합니다.
| 구분 | 확인할 내용 | 참고 문서 |
|---|---|---|
| 앱 설정 | 카카오 로그인, 리다이렉트 URI, 간편가입, 동의항목, 서비스 약관 설정이 실제 서비스 앱에 적용되어 있는지 확인합니다. | 설정하기, 리다이렉트 URI |
| 테스트 앱 | 테스트 앱에서 개발했다면 원본 앱에 같은 설정을 반영하고, 서비스 코드의 앱 키를 원본 앱 키로 교체했는지 확인합니다. | 테스트 앱 설정을 원본 앱에 반영하기 |
| 가입 처리 | 로그인 성공 후 사용자 정보 조회, 서비스 약관 동의 내역 확인, 회원 생성 또는 기존 회원 연결, 세션 발급까지 이어지는지 확인합니다. | 기본 동선, API 연동 |
| 기존 회원 | 기존 카카오 로그인 사용자나 기존 서비스 회원이 중복 가입되지 않도록 같은 회원으로 연결되는지 확인합니다. | 기존 회원 확인과 연결, FAQ |
| 사용자 정보 | 필수 정보가 없거나 선택 동의항목에 동의하지 않은 사용자도 서비스 정책에 맞는 예외 동선으로 처리되는지 확인합니다. | 사용자 정보 처리 |
| 카카오톡 채널 | 카카오톡 채널을 활용한다면 앱과 채널 연결, 대표 채널 설정, 채널 친구 상태 확인 방식이 준비되어 있는지 확인합니다. | 카카오톡 채널, 카카오톡 채널 관계 조회 |
| 탈퇴와 연결 해제 | 사용자가 서비스에서 탈퇴할 때 사용자 정보 처리와 연결 해제를 함께 수행하는지 확인합니다. | 탈퇴와 연결 해제 |
| 랜딩 | QR 코드나 광고에서 유입된 사용자가 카카오싱크 동의 화면 호출부터 가입 처리까지 완료할 수 있는지 확인합니다. | QR과 광고 랜딩 개발 |
| 호스팅사 | 카페24, 아임웹, 고도몰 등 호스팅사를 사용한다면 호스팅사 관리자 화면의 카카오싱크 설정과 서비스 정보가 최신인지 확인합니다. | 전자상거래 플랫폼을 위한 가이드, 호스팅사 설정 |
활용하기에서 안내한 오프라인 QR 코드, 카카오 비즈보드 애드뷰에서 바로 카카오싱크 동의 화면으로 사용자를 보내야 하는 경우, 랜딩 페이지를 추가 개발해야 합니다.
QR 코드 또는 애드뷰 버튼의 랜딩 URL에는 사용자가 접근했을 때 카카오싱크 동의 화면을 호출할 수 있는 서비스 URL을 설정합니다. 운영 중인 로그인 페이지가 카카오싱크 동의 화면을 바로 호출하지 않는다면, QR 또는 광고용 랜딩 페이지를 별도로 준비합니다.
QR 코드용 카카오싱크 퍼머링크 생성이 필요한 경우 카카오싱크 퍼머링크 발급 요청하기를 참고합니다.
REST API 키로 카카오 로그인을 구현한 서비스는 QR 코드나 애드뷰 버튼의 랜딩 URL에 카카오 로그인 인가 코드 요청을 시작하는 서비스 URL을 입력합니다. 보통 서비스의 [카카오로 시작하기] 버튼이 호출하는 URL입니다.
예제: 서비스 로그인 URL
https://a.com/login/kakao
서비스 로그인 URL을 별도로 제공하기 어렵다면 https://kauth.kakao.com/oauth/authorize로 시작하는 카카오 로그인 인가 코드 요청 URL을 사용할 수 있습니다. 이 경우 client_id에는 REST API 키를, redirect_uri에는 앱에 등록된 리다이렉트 URI와 동일한 값을 전달합니다.
예제: 인가 코드 요청 URL
https://kauth.kakao.com/oauth/authorize?client_id=${REST_API_KEY}&redirect_uri=${REDIRECT_URI}&response_type=code
매장, 캠페인, 광고 소재별 유입 경로를 구분해야 한다면 인가 코드 요청의 state 파라미터에 트래킹 값을 포함할 수 있습니다. state는 CSRF 방지 용도로도 사용되므로 서비스에서 발급한 값과 응답으로 돌아온 값이 일치하는지 검증합니다.
JavaScript SDK를 사용해 카카오 로그인을 구현한 서비스는 QR 코드나 애드뷰 버튼의 랜딩 URL에서 JavaScript SDK를 초기화한 뒤 카카오 로그인을 호출해 카카오싱크 동의 화면을 호출합니다.
사용자 경험을 위해서는 빈 랜딩 페이지에서 바로 카카오싱크 동의 화면을 호출하는 방식을 권장합니다.
Kakao.init("${JAVASCRIPT_KEY}")Kakao.Auth.authorize({redirectUri: "${REDIRECT_URI}",})
카카오톡 인앱브라우저에서만 자동으로 동의 화면을 호출하고 싶다면 사용자 에이전트를 확인해 분기할 수 있습니다.
Kakao.init("${JAVASCRIPT_KEY}")if (/KAKAOTALK/i.test(navigator.userAgent)) {Kakao.Auth.authorize({redirectUri: "${REDIRECT_URI}",})}
| 점검 항목 | 확인할 내용 |
|---|---|
| 앱 키 | 랜딩 URL이 사용하는 키가 실제 서비스 앱의 REST API 키 또는 JavaScript 키와 일치하는지 확인 |
| 리다이렉트 URI | 요청에 사용한 redirect_uri가 앱에 등록된 리다이렉트 URI와 정확히 일치하는지 확인 |
| 가입 처리 | 동의 완료 후 사용자 정보 조회, 약관 동의 내역 조회, 회원 생성 또는 기존 회원 연결까지 이어지는지 확인 |
| 유입 추적 | QR 코드, 매장, 광고 소재별 구분이 필요하면 state 또는 서비스 자체 파라미터로 추적값을 관리 |
| 모바일 동작 | 카카오톡 인앱브라우저, 기본 카메라 QR 스캔, 일반 모바일 브라우저에서 모두 기대한 화면으로 이동하는지 확인 |