[PMB W7D3] 카카오 OPEN API 탐색하기

유예리·2023년 1월 27일
0

PMB

목록 보기
30/35

Short Review⏰

Day33

[TIL]

오늘은 PM으로서 개발팀과 어떻게 소통해야하는지 이론적인 내용을 습득했다. 그 일환으로 PM과 개발팀이 소통할 때, 빠지면 안되는 요소인 API를 공부했다. API란 Application Programming Interface의 줄임말로 '애플리케이션'을 ‘프로그래밍’ 하는데 필요한 ‘인터페이스’를 말한다. 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

Lesson Insight🪄

오픈 API는 나에게 소셜 로그인 API로 익숙하다. 구글, 애플 로그인을 구현하기 위해서는 해당 기업이 제공하는 API를 호출해 로그인, 탈퇴 등의 기능을 구현할 수 있기 때문이다.
사실 PM이 API 시트를 보거나, 코드를 볼 일은 잘 없겠지만 우리 프로덕트가 어떤 API를 사용해야하는지 이해한다면 기획단계에서 서버 개발자가 명확한 스키마를 작성할 수 있도록 도울 수 있다.
한마디로 기획단에서 부터 개발을 고려할 수 있게 된다는 말이다.

그래서 오늘은 개발팀과의 소통에서 빠질 수 없는 API를 오픈 API를 통해 이해하고, 분석해보고자 한다.


오픈 API?

오픈API란 누구나 사용할 수 있도록 공개된 API를 말한다. 데이터를 표준화하고 프로그래밍해 외부 소프트웨어 개발자나 사용자가 바로 개발에 활용할 수 있는 형태의 개방 형식이다. 개방된 오픈API를 이용해 다양하고 재미있는 서비스나 애플리케이션, 다양한 형태의 플랫폼을 개발할 수 있다.

나는 오픈 API중에서도 카카오가 제공하고 있는 API를 분석하고자 한다.

카카오 디벨로퍼에서는 카카오, 카카오페이 등 카카오에서 운영하고 있는 서비스와 연동하여 사용할 수 있는 다양한 API를 제공하고 있다.

나는 이 중 카카오톡을 통해 콘텐츠를 공유할 수 있는 메시지 API에 집중하여 살펴보기로 했다. 이유는 우리가 실생활에서 공유할 때 주로 카카오톡을 많이 이용하기 때문이다. 이때 공유되는 탬플릿이 공유 컨텐츠에 따라 유동적으로 바뀌는게 재밌어 어떤 방식으로 구현되는지 궁금했다.

카카오톡 메시지/공유 API

메시지 API는 사용자가 카카오톡 친구에게 카카오톡 메시지를 보내는 기능을 제공합니다. 이 API는 메시지를 통한 정보 공유 및 서비스 재방문 효과에 초점을 두고 만들어졌습니다. 메시지 API로 보낸 메시지는 카카오디벨로퍼스에 등록된 애플리케이션 정보를 담고 있어, 사용자가 메시지를 통해 서비스 웹사이트나 앱을 방문할 수 있습니다. 메시지 오픈 API

위 설명에서도 볼 수 있듯 메시지 API는 사용자가 친구에게 공유할 수 있도록 구현하여 웹/앱 재방문률을 높이는 하나의 마케팅 요소로 사용할 수 있는 기능이다.

메시지 API는 크게 두 가지 방법으로 지원되고 있다. 카카오톡 공유 API를 사용하는 방법과 카카오톡 메시지 API를 사용하는 방법이다.

두 API의 차이점을 살펴보면 다음과 같다.

카카오톡 공유 API는 카카오톡 앱으로 이동해 콘텐츠를 공유할 수 있는 방법이다. 그렇기에, 친구 목록 정보를 가져오지 않아도 구현이 가능하다. 하지만, 사용자 측면에서 카카오톡 앱으로 접근해야한다는 번거로움이 있다. 개발적인 측면에서 보면, 공유가 완료된 이후에 사용자가 앱 화면으로 돌아오기 때문에 공유가 성공적으로 이루어졌는지 확인할 수 있는 기능을 자체적으로 제작해야한다.

카카오톡 메시지 API는 안드로이드, iOS가 지원하는 익스텐션을 사용해 콘텐츠를 공유할 수 있는 방법이다. 그렇기 때문에 공유 API 보다는 좀더 자연스러운 UX로 콘텐츠를 공유할 수 있도록 유도할 수있다.
다만, 개발 과정에서 고려해야할 부분이 많아진다. 먼저 친구 목록 페이지, 전송 가능 친구 범위를 친구 목록 가져오기 API를 통해 별개로 구현해야한다. 쉽게 말하면 API가 하다 더 추가된다.
하지만 장점도 있다. 메시지 전송 성공 여부에 대한 확인이 간단하다. 우리가 AOS, iOS에서 항상 접하는 *인스텐션을 사용하기 때문에 지원하는 방식대로 구현하기만 하면된다.

*익스텐션 예시

카카오톡 공유 API, 카카오톡 메시지 API 각각의 방법을 플로우로 나타내면 다음과 같다.


카카오톡 공유 API 플로우에서는 위 표의 설명처럼 목록화면이 앱에 표시되는 걸 볼 수 있다.


카카오톡 메시지 API도 마찬가지로 서비스 자체의 익스텐션 화면이 표시되는 과정이 있음을 볼 수 있다.


카카오톡 메시지 API

카카오톡 공유는 Kakao SDK for JavaScript, Android, iOS로만 제공되며, REST API로는 제공되지 않고있다. 이 기능은 최대한 간편하게 카카오톡으로 메시지를 보내 정보를 공유하는 기능을 구현할 수 있도록 만들어졌기 때문에, 카카오톡을 거치지 않고 메시지를 보내는 REST API 방식은 카카오톡 공유가 아닌 카카오톡 메시지 API로만 사용할 수 있다고 한다.

그래서 카카오톡 메시지 API를 중심적으로 REST API가 어떻게 구성되어 있는지 살펴보겠다.

카카오톡 메시지 API로 사용자의 카카오톡 친구에게 카카오톡 메시지를 보내는 과정은 3단계로 나뉜다. 카카오톡 친구가 아닌 사용자 자신에게 메시지를 보낼 때는 2~3번 과정만 수행하게 된다.

  1. 친구 목록 가져오기 API로 카카오톡 친구 정보를 받아 서비스 UI로 보여주고, 메시지를 보낼 친구 선택하게 하기
  2. 메시지 템플릿을 참고하여 보낼 메시지 내용 구성하기
  3. 구성한 메시지의 타입과 전송 대상에 맞는 카카오톡 메시지 보내기 API 호출하기

카카오톡 메시지 API가 제공하는 기능 및 가이드는 다음과 같다.

나는 이중에서 카카오톡이 기본적으로 제공하는 템플릿으로 친구에게 콘텐츠를 메시지로 공유할 때 API는 어떻게 구현되는지 알아보도록 하겠다.


API 기본정보

우선 친구에게 메시지로 콘텐츠를 공유하기 위해서는, 사전 설정이 필요하다. 앱 키 값으로 카카오톡에 플랫폼을 등록해야한다. 카카오는 이 앱 키를 통해 올바른 API요청인지, 아닌지 판단한다. 또 카카오 로그인을 활성화 해야한다. 기본적으로 메시지를 통해 콘텐츠를 공유할 때는 카카오 로그인이 되어 있어야하기 때문이다. 또한 카카오 API를 통한 사용자 정보 제공에 필요하기 때문에 사용자 동의 이후 해당 기능을 사용할 수 있다.

API Parameter

API에 전달해아하는 매개변수는 다음과 같다.
첫번째 변수는 사용자 uuid 값이다. 쉽게 사용자 정보라고 생각하면 된다. 메시지 API는 서비스 자체의 친구 목록 화면을 쓰기 때문에 화면에서 사용자가 선택한 친구가 누구인지 정보를 전달해주는 과정이 필요하다. String[] 타입으로 전달하게 되며, 최대 5명까지 가능하기 때문에 배열의 형태를 가진다.
두번째 변수는 템플릿 값이다. 공유하는 메시지에 구성 요소를 담은 Object 타입으로 전달한다. 카카오에서 제공하는 템플릿과 사용자 정의 템플릿의 구성 요소가 다르기 때문에 각각의 타입이 정해져 있다. 이 부분은 아래쪽에서 다시 살펴보겠다.

이렇게 API에 매개변수를 전달한 이후, 메시지 공유과정이 성공하게 되면 Response를 받을 수 있다. 성공했을 때는 String[] 타입으로 메시지 전송이 성공한 사용자 아이디 값을 받을 수 있다.
만약 실패했다면, failure info를 전달받을 수 있다. failure info의 리스트는 다음과 같다.

카카오톡 메시지 API Sample

위와 같은 규칙을 지켜 API를 구현하면 다음과 같다.
카카오톡 메시지 API는 POST 매소드를 사용한다. (공유 메시지라는 새로운 리소스를 생성하는 과정이기 때문) 아래의 코드와 같이 API에 Request를 보낼 수 있다. 여기서 'receiver_uuids=["abcdefg0001","abcdefg0002","abcdefg0003"]'는 위에서 설명한 uuid 값이다. 3명에 사용자에게 메시지를 보낼 것이라는 사실을 알 수 있다.

'template_object={
        "object_type": "text",
        "text": "텍스트 영역입니다. 최대 200자 표시 가능합니다.",
        "link": {
            "web_url": "https://developers.kakao.com",
            "mobile_web_url": "https://developers.kakao.com"
        },
        "button_title": "바로 확인"
    }'

더불어 위 부분은 카카오톡이 제공하는 템플릿 중 텍스트 메시지에 필요한 구성요소를 담은 Object 타입이다. 코드를 보면 text(최대 200자), 웹/앱으로 넘어갈 수 있는 url, 버튼이 필요한 것을 볼 수 있다.

Request

curl -v -X POST "https://kapi.kakao.com/v1/api/talk/friends/message/default/send" \
    -H "Content-Type: application/x-www-form-urlencoded" \
    -H "Authorization: Bearer ${ACCESS_TOKEN}" \
    --data-urlencode 'receiver_uuids=["abcdefg0001","abcdefg0002","abcdefg0003"]' \
    --data-urlencode 'template_object={
        "object_type": "text",
        "text": "텍스트 영역입니다. 최대 200자 표시 가능합니다.",
        "link": {
            "web_url": "https://developers.kakao.com",
            "mobile_web_url": "https://developers.kakao.com"
        },
        "button_title": "바로 확인"
    }'
   

Response: 친구에게 보내기 성공

HTTP/1.1 200 OK
{
  "successful_receiver_uuids": ["abcdefg0001","abcdefg0002","abcdefg0003"]
}

Response: 일부 친구에게만 전송 성공

HTTP/1.1 200 OK
{
  "successful_receiver_uuids": ["abcdefg0001","abcdefg0002"],
  "failure_info":[{
      "code": -532,
      "msg": "daily message limit per sender has been exceeded.",
      "receiver_uuids": ["abcdefg0003"]
  }]
}

위의 Request가 성공하면, 경우에 따라 Response를 받을 수 있다. 일부 친구에게 전송/ 다수의 친구에게 전송된 경우의 Response 값이 다르나, 성공했을 경우 전송에 성공한 사용자의 uuid 값을 받을 수 있다는 점을 볼 수 있다.

profile
건축학도의 PM 도전기

0개의 댓글