코드스테이츠 PMB 17 W7D3
문과 성향의 디자이너 출신의 PM 지망생에게는 개발이라는 분야는 정말 낯선 나라의 외국어를 보는 듯한 느낌이다. 그리고 이번주는 몸의 컨디션이 정말 최악인 상태이다. 그동안 쌓인 피로가 이번주에 폭발하는 것 같다. 하지만 어쩌겠나.. 해야지..
오늘은 봐도 봐도 낯설고 어려운 개발의 세계에서 중요한 요소인 API에 대해 알아보려고 한다.
API는 Application Programming Interface(애플리케이션 프로그램 인터페이스)의 줄임말로, 두 소프트웨어 구성 요소가 서로 통신할 수 있게 하는 메커니즘이다.
예를 들어, 점원이 가져다준 메뉴판에서 손님이 스테이크를 고르면, 점원이 주문을 받아 요리사에게 요리를 요청을 한다. 요리사는 주문대로 스테이크를 만들어 점원에게 주고, 손님은 점원이 서빙한 스테이크를 먹을 수 있게 된다. 여기에서 점원이 하는 역할이 API이다.
점원 = API = 손님과 요리사 사이의 상호작용을 도와주는 역할
즉 서버와 클라이언트가 서로 정보를 어떻게 주고받을지 상호작용하는 것을 돕는 매개체를 API라 정의하고 개발을 진행하는 것이다. 보통 웹서비스는 웹 주소형식(url)을 통해 정보를 요청하고 전달받는 방식을 사용한다. 여기서 API는 3가지의 역할을 한다.
1. API는 서버와 데이터베이스에 대한 출입구 역할을 한다.
2. API는 애플리케이션과 기기가 원활하게 통신할 수 있도록 한다.
3. API는 모든 접속을 표준화한다.
API는 어떤 프로그램, 어떤 개발자가 사용하더라도 공통으로 쓸 수 있는 규칙이 있다. 이런 API는 아키텍처 제약조건 지키는데, RESTful API가 대표적이다. RESTful API의 요청 종류에는 크게 4가지가 있다.(CRUD)
C : Create
R : Read
U : Update
D : Delete
이 네 가지 요청은 API 정보를 주고받을 때 사용하지만, 이를 바탕으로 프로덕트가 구현되는 만큼 기획단계에서도 고려해야 할 부분이다. RESTful API의 명령 종류는 요청 종류와 이어진다. 각각의 요청에 대응하는 매소드가 존재한다.
Create(생성) : POST
Read(읽어오기) : GET
Update(변경) : PUT(전체)/PATCH(일부)
Delete(삭제) : DELETE
오픈 API란 누구나 사용할 수 있도록 공개된 API를 말하는데, 데이터를 표준화하고 프로그래밍해 외부 소프트웨어 개발자나 사용자가 바로 개발에 활용할 수 있는 형태의 개방 형식이다. 개방된 오픈 API를 이용해 다양하고 재미있는 서비스나 애플리케이션, 다양한 형태의 플랫폼을 개발할 수 있다.
오늘은 Open API를 공개하고 있는 대표적인 서비스 중, 카카오를 통해 API를 분석해보고자 한다.
카카오 디벨로퍼에서는 카카오, 카카오 맵, 카카오톡 채널 등 카카오에서 운영 중인 서비스와 연동하여 사용할 수 있는 여러 API 정보를 제공하고 있다. 그중에서 카카오의 모든 서비스의 시작이자 중심인 카카오 로그인 API 기능과 구조에 대해 알아보도록 하겠다.
카카오 로그인은 카카오가 제공하고 있는 서비스 중 핵심 기능이다. 카카오톡의 사용자는 카카오 로그인을 통해 서비스에 로그인할 수 있으며, 카카오가 제공하는 서비스 이외에도 다른 기업의 서비스 로그인과 회원 가입에도 이용할 수 있다. 아래 이미지에서 보듯이 카카오톡의 프로필 사진, 닉네임, 성별 등 사용자가 동의하는 정보를 기반으로 하여 개인화된 서비스를 제공할 수 있다.
카카오 로그인은 카카오계정으로 다양한 서비스에 로그인할 수 있도록 하는 소셜 로그인 서비스다. 카카오싱크는 서비스 간편 가입 등 카카오 로그인에 더 다양한 확장 기능을 제공하는 비즈니스 솔루션이다. 카카오 로그인과 카카오싱크가 제공하는 핵심 기능은 아래와 같다.
카카오 측에서 설명하는 순서에 따르면 다음과 같다.
Step 1. 카카오 로그인
사용자가 서비스에서 카카오 로그인 버튼을 클릭. 서비스는 카카오 인증 서버로 인가 코드 발급을 요청.
카카오 인증 서버는 사용자에게 인증을 요청
카카오톡으로 로그인: 카카오톡 실행, 카카오톡에 연결된 카카오계정의 자격정보(Credentials)로 사용자 인증
카카오계정으로 로그인: 계정 정보를 입력해 로그인하는 화면 출력, 해당 카카오계정의 자격정보로 사용자 인증
카카오 인증 서버는 사용자 인증 성공 시, 서비스 앱의 동의 항목 설정을 바탕으로 사용자에게 동의 화면을 출력
사용자가 필수 동의 항목에 동의하고 로그인을 요청하면, 카카오 인증 서버는 인가 코드(Authorization Code)를 발급해 서비스 앱에 등록된 Redirect URI로 전달
서비스는 전달받은 인가 코드로 토큰을 요청하여 제공받음
Step 2. 회원 확인 및 가입
서비스는 카카오 로그인을 완료하여 발급받은 토큰으로 사용자 정보 가져오기를 요청합니다.
OpenID Connect 사용 시: OIDC: 사용자 정보 가져오기 API로 대체 가능
카카오 API 서버는 요청 시 사용된 토큰의 유효성을 검증하고, 요청을 처리하고 서비스에 응답
서비스 서버는 카카오로부터 제공받은 사용자 정보로 해당 사용자가 서비스에 회원 가입되어 있는지 확인합니다. 이미 회원 가입된 사용자: Step 3의 서비스 로그인 단계 수행 아직 회원 가입되지 않은 사용자: 카카오에서 제공받은 사용자 정보로 서비스 데이터베이스에 회원 가입 처리
Step 3. 서비스 로그인
서비스 서버는 서비스 클라이언트에 해당 사용자의 로그인에 대한 세션을 발급
서비스 클라이언트는 서비스 세션을 전달받아 로그인 완료 처리하고, 사용자를 로그인된 서비스 화면으로 이동.
Step 1. 인가 코드 받기
서비스 서버가 카카오 인증 서버로 인가 코드 받기를 요청
카카오 인증 서버가 사용자에게 카카오계정 로그인을 통한 인증 요청
클라이언트에 유효한 카카오계정 세션이 있거나 카카오톡 인앱 브라우저에서의 요청인 경우 4단계로 진행
사용자가 카카오계정으로 로그인
카카오 인증 서버가 사용자에게 동의 화면을 출력하여 인가를 위한 사용자 동의를 요청
동의 화면은 서비스 애플리케이션(이하 앱)의 동의 항목 설정에 따라 구성
사용자가 필수 동의 항목, 이 외 원하는 동의 항목에 동의한 뒤 [동의하고 계속하기] 버튼을 클릭
카카오 인증 서버는 서비스 서버의 Redirect URI로 인가 코드를 전달
카카오 로그인 동의 화면을 호출하고, 사용자 동의를 거쳐 인가 코드를 발급받는다. 동의 화면은 앱에 설정된 동의항목에 대해 사용자에게 인가(동의)를 구한다. 인가 코드는 동의 화면을 통해 인가받은 동의 항목 정보를 갖고 있으며, 인가 코드를 사용해 토큰 받기를 요청할 수 있는 구조이다. OpenID Connect를 사용하는 앱일 경우, 앱 설정에 따라 ID 토큰을 함께 발급받을 수 있는 인가 코드를 발급한다.
Step 2. 토큰 받기
서비스 서버가 Redirect URI로 전달받은 인가 코드로 <토근 받기> 요청.
카카오 인증 서버가 토큰을 발급해 서비스 서버에 전달.
Step 3. 사용자 로그인 처리
서비스 서버가 발급받은 액세스 토큰으로 <사용자 정보 가져오기>를 요청, 사용자의 회원번호 및 정보를 조회하여 서비스 회원인지 확인
서비스 회원 정보 확인 결과에 따라 서비스 로그인 또는 회원 가입 과정을 진행
이 외 서비스에서 필요한 로그인 절차를 수행한 후, 카카오 로그인한 사용자의 서비스 로그인 처리를 완료
PM을 준비하며 한 개념에 Deep하게 파고들기보다 '아 이런게 있구나' 정도로 큰 흐름을 이해하면 된다고 생각했다. 이전 디자인 실무를 할 떄에도 회사마다, 프로젝트마다, 팀마다 쓰는 용어가 방법이 다 조금씩 달랐기 떄문이다.
하지만 개발은 나에게 있어 '까만건 글씨요, 하얀건 모니터 배경색이요' 정도로 난해하고 어려운 분야이다. 다른 분들이 UXUI 공부하실 때 이런 느낌이지 않았을까 하는 생각을 하며 공감하게 되었다. 우선은 이번주 컨디션을 어떻게든 끌어올린 뒤, 개발에 대해 다시 한번 살펴보고 보완하도록 하겠다.