대부분의 서비스는 로그인이 필요하다.
과거에는 해당 서비스 자체에 가입하는 절차가 필요했지만 지금은 간편하게 SNS나 타 서비스 계정을 연동해 로그인하는 방법으로 바뀌고 있다.
이제는 없으면 어색한 간편 로그인,
이 간편로그인 서비스는 어떻게 가져오는 것일까?
카카오에서는 Open API를 공개하여 타 서비스에서 카카오의 로그인 서비스를 활용할 수 있도록 하고 있다.
회사에서 자신의 앱에 카카오의 간편로그인을 활용하기 위해 이 Open API를 활용한다.
API는 무엇인가?
API(Application Programming Interface) : 앱을 프로그래밍하는데 필요한 인터페이스
*인터페이스란, 상호 정보 소통을 돕기 위해 경계에 존재하는 시스템이다.
예를 들어, 기상청의 소프트웨어 시스템에는 일일 기상 데이터가 들어 있다.
유저 스마트폰의 날씨 앱은 API를 통해 이 시스템과 소통하여 스마트폰에 매일 최신 날씨 정보를 표시한다.
이처럼 앱을 실행하여 뭔가 기능을 수행할 때도 서버와 클라이언트(기기)간에 데이터를 주고받는다.
API는 이를 어떻게 할지 정의한 것이다.
회사에서 개발 업무를 한다고 했을 때, 서버와 클라이언트가 서로 어떤 방식으로 주고받을지에 대해 정의하며 API를 바탕으로 개발을 진행하는 경우가 일반적이다.
RESTful API
API를 잘 설계했지만, 각자 자신의 방식에 따라 다양하게 설계한다면 어떨까?
유지보수에 어려움이 있을 수 있다.
이런 문제를 해결하기 위해 대표적으로 사용되는 것이 RESTful API이다.
RESTful (Representational State Transfer) API
: 다수의 편의성을 위해 일정한 제약 조건을 준수하는 API를 만들어 사용하기로 한 대표적인 방식
*REST는 클라이언트가 서버 데이터에 액세스하는 데 사용할 수 있는 GET, PUT, DELETE 등의 함수 집합을 정의한다. 클라이언트와 서버는 HTTP를 사용하여 데이터를 교환한다.
* RESTful API의 명령 종류
- Create(생성) : POST
- Read(읽어오기) : GET
- Update(변경) : PUT(전체)/PATCH(일부)
- Delete(삭제) : DELETE
PM은 직접 API를 만들거나 설계하는 경우는 거의 없지만, API의 구조가 제품의 정보 교환의 구조이기 때문에 제품 기능을 이해하고 관리하는 목적에서 제품의 API를 파악하고 분석할 수준의 능력을 갖추는 것이 중요하다고 한다.
오픈 API
오픈 API란 말 그대로 활용할 수 있도록 공개되어 있는 API이다.
대표적으로 네이버나 카카오, 구글, 마이크로소프트, 공공 데이터 포털 등에서 오픈 API를 제공하고 있다.
나는 카카오 개발자 홈페이지에 들어가서, 카카오 로그인 API를 살펴보았다.
카카오 로그인 API의 기능과 구조
카카오 로그인은 카카오 플랫폼에서 제공하는 핵심 기능 중 하나로, 카카오계정으로 다양한 서비스에 로그인할 수 있도록 하는 소셜 로그인 서비스이다. 카카오톡 사용자는 카카오 로그인을 통해 서비스에 쉽고 빠르게 로그인할 수 있고, 이를 통해 타 서비스는 더 많은 고객을 확보할 수 있다. 카카오 로그인을 도입하면 카카오톡의 닉네임과 프로필 사진, 이메일, 성별, 연령대 등 사용자의 동의 하에 얻는 사용자 정보를 활용하여 개인화된 서비스를 제공할 수 있다.
제공 기능
이름 | 설명 |
로그인 | 카카오계정을 통한 빠르고 간편한 사용자 로그인 기능 |
로그아웃 | 사용자 토큰을 만료시켜 로그인 상태를 해제 |
연결 끊기 | 카카오 플랫폼에서 사용자와 앱의 연결을 해제 |
토큰 정보 보기 | 액세스 토큰(Access token)의 정보와 토큰의 유효기간을 제공 |
사용자 정보 가져오기 | 사용자 고유 식별자 및 인증 정보, 기본적인 사용자 정보인 프로필과 이메일 데이터 제공 |
사용자 정보 저장하기 | 사용자 카카오계정에 사용자 정의(Custom)한 서비스 데이터를 저장 |
동의 내역 확인하기 | 서비스에서 현재 사용 중이거나 사용자가 동의한 동의 항목을 확인 |
동의 철회하기 | 불필요한 동의 항목에 대해 사용자 동의를 철회 |
사용자 로그인 시 서비스의 카카오톡 채널 추가 유도 |
카카오 로그인 API 구조 - 인증과 인가 처리
카카오 로그인은 Kakao SDK for Android, iOS, JavaScript와 REST API로 제공되는 OAuth 2.0 기반의 서비스이다.
서비스는 서비스 ID 및 비밀번호를 입력받고 검증하는 과정을 직접 구현하지 않고도 사용자에 대한 인증과 인가를 간편하고 안전하게 처리할 수 있다.
따라서 카카오 로그인 API에는 Service Server와 함께 인증을 위한 Kakao Auth Server가 있다.
서비스는 카카오 로그인 완료 시 발급받은 토큰으로 회원 가입이나 정보 갱신에 필요한 사용자 정보를 제공받을 수 있다.
여기서 토큰이라는 개념이 등장한다.
토큰은 사용자의 카카오 로그인 인증 및 인가 정보를 담은 권한 증명으로, 카카오 API 호출에 사용된다. 카카오 로그인은 OAuth 2.0 표준 규격에 따라 액세스 토큰(Access token), 리프레시 토큰(Refresh token) 두 종류의 토큰을 발급한다. 각 토큰의 역할과 만료 시간을 표로 정리하면 다음과 같다.
* Kakao SDK는 토큰 관리 기능 내장, REST API 사용 시 필요에 따라 토큰 정보 확인하기 또는 토큰 갱신하기 요청 필요
카카오 로그인 REST API
Step 1.인가 코드 받기
1. 서비스 서버가 카카오 인증 서버로 인가 코드 받기를 요청(GET)한다.
2. 카카오 인증 서버가 사용자에게 카카오계정 로그인을 통한 인증을 요청한다.
- 클라이언트에 유효한 카카오계정 세션이 있거나, 카카오톡 인앱 브라우저에서의 요청인 경우 4단계로 넘어간다.
3. 사용자가 카카오계정으로 로그인한다.
4. 카카오 인증 서버가 사용자에게 동의 화면을 출력하여 인가를 위한 사용자 동의를 요청한다.
- 동의 화면은 서비스 애플리케이션(이하 앱)의 동의 항목 설정에 따라 구성된다.
5. 사용자가 필수 동의 항목, 이 외 원하는 동의 항목에 동의한 뒤 [동의하고 계속하기] 버튼을 누른다.
6. 카카오 인증 서버는 서비스 서버의 Redirect URI로 인가 코드를 전달한다.
Step 2.토큰 받기
- 서비스 서버가 Redirect URI로 전달받은 인가 코드로 토큰 받기를 요청(POST)한다.
- 카카오 인증 서버가 토큰을 발급해 서비스 서버에 전달한다.
Step 3.사용자 로그인 처리
- 서비스 서버가 발급받은 액세스 토큰으로 사용자 정보 가져오기를 요청해 사용자의 회원번호 및 정보를 조회하여 서비스 회원인지 확인한다.
- 서비스 회원 정보 확인 결과에 따라 서비스 로그인 또는 회원 가입 과정을 진행한다.
- 이 외 서비스에서 필요한 로그인 절차를 수행한 후, 카카오 로그인한 사용자의 서비스 로그인 처리를 완료한다.
카카오로그인 REST API는 인가코드받기와 토큰받기 두 단계를 거친다.
- 인가 코드 받기 - URL : /oauth/authorize, METHOD : GET
- 토큰 받기 - URL : /oauth/token, METHOD : POST
해당 오픈 API를 실제 제품 개발에 활용하기 위한 방안
앞서 첨부한 이미지에서 왓챠, 티빙, 오늘의 집 등 많은 서비스에서 간편로그인을 활용하고 있다. 마찬가지로 서비스에 사람들이 회원가입 시 편리한 경험을 할 수 있도록 카카오톡 로그인 API를 활용하여 이탈률을 낮추고, 회원가입 시 얻은 정보를 바탕으로 좀 더 서비스를 분석하여 개선해가려고 노력할 것이다.
오픈 API의 범위와 한계
카카오톡 API 주의사항 참고 : 서비스의 사용자 로그인 처리와 서비스 데이터베이스(Database)의 가입, 탈퇴 등 회원 정보 처리는 서비스에서 자체 구현해야 한다. 카카오는 서비스 데이터에 접근하지 않으므로 회원 정보를 대신 저장하거나 삭제할 수 없다.
오픈 API를 제품개발에 활용하면 그 부분을 별도로 개발할 필요가 없어 편리하게 사용하고 시간을 절약할 수 있다. 또한 고객에게 친숙한 환경을 제공할 수 있다. 그러나 카카오의 규칙에 따라 기존 서비스에서 자체 구현해야 하는 기능은 존재한다. 이에 카카오와 서비스가 잘 호환하기 위해 기능을 잘 구현해내야 할 것이라는 생각이 든다.
'PMB_15기 > Daily' 카테고리의 다른 글
[코드스테이츠 PMB 15기_W8D1,3] 카카오톡 멀티프로필 유저스토리 (0) | 2022.12.05 |
---|---|
[코드스테이츠 PMB 15기_W7D4] W7D1회고_닥터나우 (0) | 2022.12.03 |
[코드스테이츠 PMB 15기_W7D2] 눈으로 보며 듣는 음성 기록, 클로바노트 (0) | 2022.11.29 |
[코드스테이츠 PMB 15기_W7D1] 티스토리 프론트엔드 탐색하기 (0) | 2022.11.28 |
[코드스테이츠 PMB 15기_W6D3,4] 지역별 전기차 충전소 데이터 분석하기 (0) | 2022.11.23 |