brunch

You can make anything
by writing

C.S.Lewis

by 감자윤 Nov 13. 2021

문과생도 쉽게 이해하는
API와 REST API


적어도 '소귀의 경 읽기'가 되지 말아야겠다


이미지 출처 : 니즈폼



이는 개발이라는 세계에 이제 막 발을 담가보면서 스스로 느끼고 결심 한 부분이다.



개발 공부를 하다 보니 모르는 게 많아 작은 것에 걸려 깊게 파고드는 스스로를 발견했다. 결국 오늘 알고 넘어갈 부분보다 더 적은 부분만을 이해한 채 '목표와 목적'을 잊고 혼돈의 카오스 속에 머물길 반복했다.


여기서 말하는 '목표와 목적'은 주니어 프로덕트 매니저로서의 개발 학습의 목적이다.


주니어 PM이 개발 지식을 습득하는 가장 큰 이유는 '개발자와의 소통'에 있다고 생각한다.

개발팀에서 하는 이야기를 이해하고 Next를 생각하며 고민하는 것이 PM에게는 필요하기 때문이다.


이에 지금은 위 목적을 잊지 않고 개발 개념들을 자신의 언어로 이해해가는 것이 필요한 자세라 본다.

그리고 그 이해 속에서 프로덕트 매니저가 생각해야 할 것과 할 일이 무엇인지를 고민하는 자세가 필요하다.


적어도 추후 현업에서 일을 할 때  '소귀의 경 읽기'가 되지 않기 위해서 말이다. 






개발 공부를 하기 전부터 의미는 모르지만 자주 들었던 단어가 'API'다.


그래서 오늘은 'API'와 비슷하게 생긴 'REST API'에 대해 차근차근 알아보았다.

생각보다 양이 많고 개념들을 이해하기 어려웠지만, 많은 자료들을 찾아보며 '나의 언어로' 풀어나가 봤다.




IT 내부의 원활한 소통(데이터 전달)을 돕기 위한 규칙/매뉴얼

API



API는 Application programming Inerface의 약자이다. 

이를 해석하면 애플리케이션을 프로그래밍하는데 쓰이는 인터페이스다.


'인터페이스'는 쉽게 말해 우리가 노트북을 하기 위해 만지고 보게 되는 화면, 키보드, 마우스 등 모든 것을 이야기한다. 즉 사용자와 기기를 연결해 주기 위한 중간 역할을 하는 지점을 의미한다.


이를 더 쉽게 이야기하면 식당의 '점원'이라 보면 된다.


손님은 음식을 직접 주방장에게 주문하는 것이 아니라 중간 역할을 하는 '점원'에게 요청하게 되고, '점원'은 이를 주방장에게 전달하게 된다. 그리고 음식이 완성되었을 때도 주방장에게 음식을 받아 '점원'이 손님에게 가져다주게 되는 것이다. 이러한 '점원'이 인터페이스인 것이다.


출처 : https://moonspam.github.io/



단 여기서 이야기하려는 API는 눈에 보이지 않는 소프트웨어 인터페이스를 의미한다. 

API는 위에서 설명한 것과 같이 중간 역할을 하지만, 우리 눈에 보이지 않는 IT 세계 속에서 하는 것이다.


우리는 앱을 사용할 때 회원가입부터 로그인, 동영상 재생 등 어떠한 정보 실행을 계속 요청하게 된다.


그때 그 요청사항을 받고 처리해주는 것이 컴퓨터 '서버'이다. 그런데 사용자인 우리가 같은 내용의 요청을 하는데도 각자 다른 스타일의 언어와 말로 요청하게 되면 서버는 그 뜻을 해석한 후 데이터를 처리해야 하는 비효율적인 과정을 거칠 수밖에 없게 된다. 


이미지 (일부) 출처 : 워드프레스


그것을 방지하고자 API가 중간에 끼어들어 '대화의 규칙'을 정하면서 효율적으로 정보가 오고 갈 수 있도록 만드는 것이다. 결국 API는 데이터(정보)를 원활하게 주고받기 위한 방법이자, 주고받을 수 있는 데이터의 형식을 정하는 규격(매뉴얼)이라고 볼 수 있다. 





API를 작성하는 가장 트렌디한 방법

REST API



그런데 API를 사용하다 보니 문제가 발생했다. '대화의 규칙'을 만들어 더 효과적으로 데이터를 주고받을 수는 있었지만, 문제는 그 규칙과 규격이 개발자마다 달랐던 것이다. 


예를 들어 A라는 개발자가 API를 만들어 놓고 '퇴사'를 하게 되면, 다음 후임자인 개발자 B는 해당 API를 온전히 이해할 수 없게 된다. 


이에 API에도 체계가 필요하다는 관점에서 나온 방법이 'REST API(Representational State Transfer)'다.

API를 다양한 사람들이 사용하는 만큼 규칙과 내용을 더 '간단하고, 쉽게' 만든 것이다.


그래서 REST API는 "Represent"가 "표현하다"는 뜻인 것처럼 요청하는 내용만 보면 무엇을 요청하는 것인지 직관적으로 이해할 수 있다.






REST API는 기본적으로 HTTP(HyperText Transfer Protocol)를 사용해 

1) 정보의 자원(리소스)과 2) 명령할 행위(행동)를 표현한다.

출처 : https://velog.io/@cjy0029



우리에게 낯설지 않은 위 이미지의 인터넷 주소를 URI(URL보다 큰 개념)이라 부른다. 

보다 정확히는 HTTP URI이며, 이는 해당 서버의 정체성을 나타내는 이름과도 같다.

REST API는 데이터를 불러올 때 HTTP URI로 '어떤 자원'을 통해 데이터를 얻을 것인지 표시해 주어야 한다.


그리고 HTTP Method을 통해 해당 자원에 대해 행위(명령어)를 정해야 한다. 

대표적인 명령어는 4~5가지다.


POST - Create(생성하기) - ex. 웹페이지에 사진을 올리는 요청

GET - Read(읽어오기) - ex. 웹페이지에서 사진을 불러오는 요청

PUT(전체) / PATCH(일부) - Update(변경하기)  - ex. 웹페이지의 사진을 바꾸는 요청

DELETE - Delete(삭제하기) - ex. 웹페이지의 사진을 지우는 요청


본래 보통의 소프트웨어에서는 CRUD(Creat, Read, Update, Delete)를 사용하지만, 

HTTP는 보다 간단하고 깔끔하게 명령하기 위해 동사가 아닌 '명사'로 표기한다. 


복잡하지 않고 직관적인 이유 때문에 

API를 작성하는 방법 중 가장 최근에 많이 사용되는 방법이 REST API다.






위의 내용을 기반해 

HTTP 규약에 따라 REST API로 데이터를 요청하기 위해서는 다음과 같은 예시처럼 작성해야 한다.


* 예시 : GET http://도메인 주소/classes/2/students

(예시 출처 : 얄팍한 코딩 사전)


1) GET http://도메인 주소/classes/2/students 

 - HTTP Method 명령어는 'GET'을 사용하면서 데이터를 불러오는 요청임을 알 수 있다.


2) GET http://도메인 주소/classes/2/students 

 - HTTP URI를 통해 어디서 데이터를 가져올 것인지 알 수 있다. 


3) GET http://도메인 주소/classes/2/students 

- 원하는 세부 정보는 '2반의 학생들' 정보임을 알 수 있다. 





누구나 사용할 수 있는 공개된 API

OPEN API



OPEN API(이하 오픈 API)는 누구나 쓸 수 있도록 공개된 API를 의미한다. 기업이나 정부가 유익한 서비스를 개발할 수 있도록 개발자들에게 검증된 데이터를 API 형태로 무료로 제공하는 것이다. 


이미지 출처 : (왼쪽) 사회서비스 전자 바우처 / (오른쪽) https://jeongchul.tistory.com/



오픈 API를 이용하면 개발에 들어가는 비용과 시간을 줄일 수 있다는 이점이 있다.

또한 신뢰할 만한, 검증된 API들이기 때문에 보다 퀄리티 좋은 앱을 개발할 수 있다. 




그런데 여기서 의문이 하나 든다.

정부는 공공목적으로 API를 공개하겠지만, 왜 기업은 무료로 자신의 API를 공개하는 것일까? 


당연히 API를 무료로 공개하는 것이 기업에게 이득이 되기 때문이다. 

자사 서비스 기능을 API를 통해 오픈하면, 다른 서비스들이 자사 기능을 많이 이용하게 됨으로써 서비스의 시장 점유율, 경쟁력이 커질 수 있다.




예시를 보면 보다 쉽게 이해할 수 있다.


이미지 출처 : (왼쪽) 카카오 개발자 센터 / (오른쪽) 해피캠퍼스


어떤 앱을 설치하거나 서비스를 이용할 때, 해당 서비스로부터 위와 같은 카카오톡 메시지를 받는 경우가 있다. 이것이 카카오에서 제공하는 오픈 API를 사용한 사례이다. 


우리가 새로운 앱을 만든다고 가정해 보자.

개발하는 과정에서 앱을 사용하는 유저들에게 공지 및 알림 메시지를 보내는 기능을 만들고 싶다면, 무에서 유를 창조하는 개발을 해야 한다. 그러나 카카오에서 알림 메시지 API를 사용하게 되면 어려운 개발 과정 없이 카카오 메시지 기능과 데이터를 활용해 쉽게 개발이 가능하다. 


흔히 우리가 알고 있는 네이버, 카카오 등에 연동시켜 '로그인'하는 기능도 오픈 API의 사례이다. 네이버나 카카오에 있는 유저 정보 데이터를 활용하는 것이다. 유저 입장에서 귀찮은 가입 절차가 없어졌기 때문에 보다 해당 서비스로 유입되기 좋다는 장점이 있다. 


사용자의 유입률과 이탈률을 신경 써야 하는 PM은 개발과 관련해서 이러한 부분을 이해하고 고민해야 하는 것이라 본다. 




OPEN API의 종류


오픈 API 종류로는 국내 기업, 국외기업, 정부기관 API가 있다. 

대표적인 몇 가지만 이야기하면 다음과 같다. 


[국내 기업 API]

· 네이버 개발자 센터 https://developers.naver.com/main/
· 카카오 개발자 센터 https://developers.kakao.com/
· API 스토어 https://www.apistore.co.kr/main.do
· SK open API https://openapi.sk.com/


[국외기업 API]
 
·Google Developers https://developers.google.com/ 
·Facebook for Developers https://developers.facebook.com/ 


[공공 API]

·기상청_기상특보 정보 http://www.data.go.kr/data/15000415/openapi.do
·한국 고용정보원_채용정보 http://www.data.go.kr/data/3038225/openapi.do 
·우정사업본부_도로명주소 조회서비스  http://www.data.go.kr/data/15000124/openapi.do


이외에도 다양한 오픈 API 서비스가 있다. 


국내외 기업부터 공공기관까지 오픈 API 서비스에 대해 SMAC(스마트 모바일 앱개발지원센터)에서 종합적으로 잘 정리해 두어 해당 페이지를 참고하면 많은 도움이 될 것 같다. 




OPNE API 예시 : 카카오 메시지 API 


오픈 API를 알아본 김에 카카오 오픈 API 서비스에 직접 들어가 살펴보았다. 


이미지 출처 : 카카오 개발자 센터


상단바 카테고리 '제품'을 클릭하면 카카오가 오픈하고 있는 다양한 API들이 보인다. 

그중 위에서도 잠시 언급한 '메시지 API'를 통해 보다 세부적인 내용을 파악해 보았다.



[카카오 메시지 API의 2가지 종류]

메시지를 보내는 방법은 크게 2가지 나뉘어 한 가지 API를 선택해서 사용할 수 있다.

메시지 API : 카카오링크 API / 카카오톡 메시지 API


이미지 출처 : 카카오 개발자 센터



[카카오 메시지 API 기능]

사용자가 카카오톡 친구에게 카카오톡 메시지를 보내는 기능이다.

메시지 API는 정보 공유 및 서비스 재방문 효과에 초점을 두고 만들어진 기능이다. 

메시지를 통해 해당 서비스 웹사이트나 앱으로 바로 이동 및 방문할 수 있다. 


이미지 출처 : 카카오 개발자 센터


여기서 눈에 띄었던 것은 카카오 메시지 오픈 API도 'REST API'를 지원하고 있다는 점이다.  


그런데 메시지 API 2종류 중 '카카오링크 API'는 REST API가 지원되지 않고 있다.


그 이유도 아래에 기재가 되어 있는데 

'카카오링크 API'는 카카오톡 앱 또는 전용 웹페이지'를 통해 실행되기 때문이라고 한다. 


이미지 출처 : 카카오 개발자 센터


도식화로 설명해 둔 내용을 보면 보다 이해하기 쉽다.


오른쪽 REST API를 제공하는 '카카오톡 메시지 API'는 카카오톡 앱이나 전용 웹을 실행시키지 않고 직접 서버를 통해 카카오톡 친구에게 메시지를 보낼 수 있다.


그러나 왼쪽 REST API가 지원되지 않는 '카카오링크 API'는 카카오톡 앱을 실행시켜야만 카카오톡 메시지를 보낼 수 있는 구조이다. 즉 '카카오링크 API'는 데이터를 직접 제공받을 수는 없음을 의미한다. 하지만 그만큼 '카카오톡 메시지 API'보다 상대적으로 간단하게 기능을 구현할 수 있다고 한다. 



여기서 알 수 있던 점은 직접 데이터를 제공하지 않고 자체 플랫폼('카카오톡'앱과 같은)을 통해 제공할 때는 REST API 방법을 클라이언트들에게 지원하지 않는다는 것이다.  


왜 그런지 정확한 이유는 더 자세히 알아봐야겠지만, 개인적으로 '보안상'의 문제 때문이 아닐까 싶다.




(OPEN) API의 취약점 = 보안


API를 활용할 때 '인증' 과정을 거치는데 가장 흔하게 사용되는 인증 방식이 'API Key 방식'이라고 한다.


오픈 API 같은 경우 모든 클라이언트들한테 같은 API Key를 공유하기 때문에 한번 API Key가 노출되면 보안이 뚫려버리는 취약점이 있다고 한다. 이에 보안이 중요한 경우에는 API를 권장하지 않는다. 


그에 비해 SDK는 API를 포함하는 더 큰 개념으로 프로그램을 개발하는데 필요한 도구들의 모음이라 할 수 있다. 예를 들어 iOS SDK를 다운로드하면 개발자에게 iOS 애플리케이션을 만드는데 필요한 모든 도구가 제공되는 것이다. API와 비슷하지만 상대적으로 더 견고하기에 보안에도 강할 것이라 추측할 수 있다.


'카카오 메시지 API'는 카카오톡 앱을 통해서만 기능을 활용할 수 있기 때문에 보안을 더 강화할 필요가 있었을 것이다. 그리고 실제 '카카오 메시지 API'는 API라고 명칭 하더라도 실질적으로는 SDK를 통해서만 API를 실행하도록 하고 있다.






이처럼 PM이 SDK와 API 개념 및 특징을 잘 이해하고 있다면,

프로덕트의 보안과 프로덕트의 성장, 시장 점유율 강화 등 집중해야 할 부분에 따라 어떤 것을 선택해야 할지 판단할 수 있을 것이다. 직접 판단하지 않더라도 테크 리드(개발자 리드)에게 의견을 전달하고, 원활한 의사소통 및 결정을 하는 데 있어 많은 도움이 될 것이라 생각한다. 





※ 참고 자료

https://velog.io/@sooonding

https://helloworld-88.tistory.com/21

https://enjoyinjoanne.tistory.com/56

https://catsbi.oopy.io/6befbf82-ce78-4fb9-bb87-805ec1048855

https://jeongchul.tistory.com/

https://rollercoaster25.tistory.com/6

https://brunch.co.kr/@businessinsight/65#comment

https://doozi0316.tistory.com/

https://bcho.tistory.com/955

https://meetup.toast.com/posts/92


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari