본문 바로가기
PM 부트캠프 17기 기록/Daily 탐구 과제

[코드스테이츠 PMB 17기_W7D3] Open API 분석_카카오 로그인

by 홍지똥이 2023. 3. 23.

API란 무엇일까?

API는 Application Programming Interface의 약자로, AWS에서는 API를 다음과 같이 정의하고 있다.

"API는 정의 및 프로토콜 집합을 사용하여 두 소프트웨어 구성 요소가 서로 통신할 수 있게 하는 메커니즘입니다. 예를 들어, 기상청의 소프트웨어 시스템에는 일일 기상 데이터가 들어 있습니다. 휴대폰의 날씨 앱은 API를 통해 이 시스템과 ‘대화’하여 휴대폰에 매일 최신 날씨 정보를 표시합니다.

API는 Application Programming Interface(애플리케이션 프로그램 인터페이스)의 줄임말입니다. API의 맥락에서 애플리케이션이라는 단어는 고유한 기능을 가진 모든 소프트웨어를 나타냅니다. 인터페이스는 두 애플리케이션 간의 서비스 계약이라고 할 수 있습니다. 이 계약은 요청과 응답을 사용하여 두 애플리케이션이 서로 통신하는 방법을 정의합니다. API 문서에는 개발자가 이러한 요청과 응답을 구성하는 방법에 대한 정보가 들어 있습니다."

API는 일반적으로 클라이언트와 서버가 서로 데이터를 주고 받을 때 작동한다. 위 날씨 앱의 예시에서 기상청의 날씨 데이터는 서버이고 모바일 앱은 클라이언트에 해당한다. 클라이언트가 요청을 보내면 API를 통해 서버에서 응답을 보내는 방식인 것으로 이해할 수 있다.

 

다양한 기업에서 개발자라면 모두 사용할 수 있도록 공개 API를 제공하고 있는데, 이는 Open API라고 부른다. 오늘은 API에 대해 더 자세히 이해하기위해 카카오의 Open API '카카오 로그인'을 분석해보고자 한다.


ᅵ카카오 로그인

요즘 다양한 앱에서 로그인 방식으로 '카카오로 로그인하기', '네이버로 로그인하기'를 제공하고 있다. 이렇게 소셜 ID로 로그인하는 시스템 자체가 하나의 Open API인 것이다. Kakao develop에서 소개한 '카카오 로그인' 문서를 토대로 다음과 같이 내용을 정리하였다.

1. 카카오 로그인과 카카오 싱크

이미지 출처: Kakao developers

 

 

'카카오 로그인'을 통해 카카오톡 사용자는 서비스에 쉽고 빠르게 로그인할 수 있다. 이를 사용하는 프로덕트는 이와 같은 편리한 로그인 시스템으로 더 많은 고객을 확보할 수 있다. 또한, 카카오톡의 닉네임과 프로필 사진, 이메일, 성별, 연령대 등 사용자의 동의 하에 얻는 사용자 정보를 활용하여 개인화된 서비스를 제공할 수도 있다. 이렇게 카카오 로그인에 더하여 확장된 기능을 제공하는 것은 '카카오 싱크'라고 정의하고 있다. 즉, 카카오 로그인과 함께 사용자의 정보를 함께 얻는 것이 '카카오 싱크'인 것이다. 각 서비스의 주요 기능은 다음과 같다.

 

2. 카카오 로그인 구조 

카카오 로그인의 구조는 다음과 같다.

이미 서비스에 가입한 사용자가 클라이언트로 서비스에 카카오 로그인을 요청하면, 서비스는 카카오 플랫폼에 인가 코드 받기를 요청한다. 사용자가 카카오 플랫폼에서 사용자 인증 및 동의를 하면, 서비스는 응답으로 받은 인가 코드로 토큰 받기를 요청해 카카오 로그인 및 서비스 로그인 완료 처리를 하게 된다. 그리고 클라이언트에 로그인된 상태의 서비스 페이지를 출력한다.

여기서 인가 코드에 대해 좀 더 자세히 설명해보자면, 사용자가 동의 화면에서 동의한 내역의 코드이다. 다음 예시를 통해 더 구체적으로 알아보자.

사용자가 카카오 로그인을 요청하면 위와같은 동의 화면이 출력된다. 해당 화면에서 사용자는 🅐 개인정보 제공 안내를 확인하고, 🅑 서비스 이용에 필요한 동의 항목에 동의할 수 있다. 사용자가 이 화면에서 동의 항목에 동의하면, 카카오 로그인은 사용자의 동의 내역을 인가 코드에 담아 서비스에 전달한다. 그리고 서비스가 인가 코드로 토큰을 발급을 요청하면  카카오 로그인이 완료되는 것이다.


ᅵ참고) '토큰'이란? 

카카오 로그인 API를 정리하다보니 토큰의 개념이 어려워 추가적인 조사를 실시하였다. 다음 두 문서를 참고하여 내용을 정리하였다.

토큰은 SQL의 기본 구문 단위이며, 하나 이상의 문자의 시퀀스이다. 즉 SQL언어로 이루어진 하나의 코드라고 이해할 수 있다. 인증 기반 시스템에서 '토큰'을 사용하는 이유는 서버 기반 인증의 문제점 때문이다.

유저가 인증을 할 때, 서버는 이 기록을 서버에 저장을 해야하는데, 이를 '세션' 이라고 부른다. 대부분의 경우엔 메모리에 이를 저장하는데, 로그인 중인 유저의 수가 늘어난다면 서버의 램이 과부화될 수 있다. 이를 피하기 위해서, 세션을 데이터베이스에 시스템에 저장하는 방식도 있지만, 이 또한 유저의 수가 많으면 데이터베이스의 성능에 무리를 줄 수 있다. 또한, 세션을 사용하면 서버를 확장하는 것이 어려워지는데 여기서 서버 확장은 서버 컴퓨터를 추가 하는 것을 의미한다. 

 

하지만, 토큰을 이용하면 시스템에 유저의 인증 정보를 서버나 세션에 담아둘 필요가 없다. 토큰 기반 로그인 시스템의 구현 방식은 다음과 같다.

  1. 유저가 아이디와 비밀번호로 로그인 요청
  2. 서버측에서 해당 계정정보를 검증
  3. 계정정보가 정확하다면, 서버측에서 유저에게 signed* 토큰을 발급
    *signed: 해당 토큰이 서버에서 정상적으로 발급된 토큰임을 증명하는 signature 를 지니고 있다는 것을 의미
  4. 클라이언트 측에서 전달받은 토큰을 저장해두고, 서버에 요청을 할 때 마다, 해당 토큰을 함께 서버에 전달
  5. 서버는 토큰을 검증하고, 요청에 응답