카카오 로그인 RESTful API 방식의 [사용자 정보 가져오기] 실행 시 반환받는 id 값의 고유성 여부

카카오 로그인 API 를 RESTful API 방식으로 사용하여 팀 프로젝트를 구현하고 있습니다.

MySQL 안에 SnsTokens 라는 테이블을 만들고 향후에도 동일한 유저가 로그인 시에 식별 가능한 고유키 를 하나 지정해주고 싶습니다. 해당 값은 클라이언트에게는 전달 되지 않고 오직 서버 내부에서만 사용하도록 구현하고 있습니다.

인가 코드 받기 > 토큰 발급 이후 해당 토큰을 사용하여 [사용자 정보 가져오기] 를 실행하니 다음과 같은 값이 나왔었습니다.

  • id
  • connected_at : 연결 시간
  • properties : { 닉네임이 들어있음 }
  • kakao_account : 유저 개인 정보

그 중에서 id 항목이 마치 고유키 처럼 느껴지는데 혹시 해당 값이 변경 사항이 일어나지 않는 고유키로써 사용할 수 있는지 여쭤보고자 합니다.

안녕하세요.
id는 고유한 회원번호 입니다.
단, 디벨로퍼스 앱 내에서만 고유하며 앱이 변경된 경우 새로운 회원번호로 전달됩니다.

카카오 디벨로퍼스 앱 이라고 하는 것이 카카오에서 제공 해주는 API 서비스 등 이라고 이해하였는데 맞을까요?

앱이 변경될 경우 새로운 회원번호로 변경 된다는 부분이 조금 의아한데,
KAKAO API 가 혹시 업데이트 가 되는 경우에 새로운 회원가입으로 바뀌는 것일까요?

디벨로퍼스에서 생성하신 앱을 말합니다.
회원번호는 유일하지만, 앱 마다 새로 발급 됩니다.

예를 들어 디벨로퍼스에서 앱 A와 B를 만들 경우
A에서는 회원번호가 1, B에서는 2로 각각 발급됩니다.
즉, 회원번호는 유일성을 보장하고, 앱별 유일성도 보장됩니다.

(API 업데이트와는 관련 없습니다.)

너무 친절한 답변 감사합니다!
덕분에 의문이 해결 되었습니다.

하나 더 궁금한 것 여쭤보고 싶은게, Kakao Login 의 Step 2 토큰 받기 절차가 궁금합니다.
Kakao Login - Step 2. 토큰 받기

에서 Parameter 란에 적혀있는 것이 axios 기준으로 body 항목에 넣어야 한다고 이해했습니다. 그런데, axios 는 자동으로 js 객체를 json 객체로 변환해주는데, 해당 방식으로 API 호출을 하면 status 0 이 나오고 Axios Error 가 나옵니다.

await axios.post("http://kauth.kakao.com/oauth/token", {
   grant_type: "authorization_code",
   client_id: "[앱키]-RESTful API",
   redirect_uri: "localhost:3000/signin", // 리액트 주소
   code: `${code}`
}, {
   headers: {
      'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'
   }
});
// https://www.notion.so/4-eda17399e108494da9bdacf415910bca

위 코드가 자꾸 status 0 이 뜨고 있어서 다음과 같이 변경하니 작동이 되었습니다.

const data = {
			grant_type: "authorization_code",
			client_id: "[앱 정보]-[요약 정보]-[RESTful API 앱키]",
			redirect_uri: "http://localhost:3000/signin",
			code: code,
		};

    // 포인트 1, body 를 queryString 방식으로 파싱해야함
		const queryString = Object.keys(data)
			.map((k) => encodeURIComponent(k) + "=" + encodeURIComponent(data[k]))
			.join("&");
		
    // https 로 보내야함
		const response = await axios.post(
			"https://kauth.kakao.com/oauth/token",
			queryString,
			{
				headers: {
					"Content-Type": "application/x-www-form-urlencoded;charset=utf-8",
				},
			}
		);
// https://www.notion.so/5-508f081c9e9049ae84b8bfdd8eede7a6

사용자 정보 받기 API 같은 경우는 그냥 JSON 객체가 받아지는데 토큰 받기 API 에서만 이렇게 QueryString 으로 파싱해서 body 에 담는 특별한 이유가 있을까요?

무언가 보안상의 이유가 있는 것일까요?

안녕하세요.

카카오 로그인은 OAuth2.0 기반의 소셜 로그인 서비스 입니다.
OAuth2.0 스팩에서 파라미터 유형은 x-www-form-urlencoded 형식으로 하도록 정의하고 있습니다.

때문에 일반적인 방식으로 axios 를 사용하면 json 형식으로 파라미터가 전달되기에 문의 주신 코드처럼 파라미터 형식을 변경해야만 합니다.


사용자 정보 가저요기 API의 경우에는 사용자 인가정보인 접근토큰만 필요하면 되기 때문에 다른 파라미터를 요구하지 않았을 뿐, 파라미터가 필요한 다른 API의 경우 위와 동일한 형식으로 동작하고 있습니다.