
API (Application Programming Interface)
• 서로 다른 두 어플리케이션이 통신을 할 수 있도록 해주는 일종의 규약
• 예를 들어 백엔드 서버는 Java로 되어 있고, 프론트엔드 페이지는 JS로 되어 있다면?
• 마치 영어만 가능한 사람과 카자흐스탄어만 가능한 사람이 대화하는 것
• 이때 API는 서로가 서로의 말로 통역을 해주는 것
• 영어만 가능한 사람이 카자흐스탄어로 번역해서 데이터를 전달하는 것이죠.
Ref. https://youtu.be/ckSdPNKM2pY
이번에 첫번째 프로젝트를 진행하면서 API 라는 것을 팀장이 쓰면서 알게 됐는데,
용어 자체가 추상적이라 이해가 잘 되지 않았다. API (Application Programming Interface) 는
한 프로그램에서 다른 프로그램으로 데이터 주고받기 위한 방법이라고 보면 되는데,
API 는 식당 메뉴판이다. 메뉴판 보고 거기에 적힌 메뉴들을 정확히 주문한다.
(1. 파스타, 2. 피자, 3. 식전빵)그래서 메뉴판이 식당의 API다.
식당 주인과 음식을 주고받기 위한 그런 방법이라고 보면 된다.
실제 웹서비스를 예로 들면, 코드를 막 짜서 웹툰 보내주는 프로그램을 짰다고 친다.
웹툰 보내주는 프로그램 (웹서버) 그런데 어떻게 보여줄 수가 있겠나?
그런데 유저가 '나 드래곤볼 보여주세얌' 하고 커스텀 할 순 없는 노릇이다.
그래서 메뉴판을 만들어두어야 한다. 나는 이런 웹툰을 보여줄 수 있다.
(1/ 신과함께 2/ 이말년 3/ 헬퍼) 라고 메뉴판을 어딘가에 만들어 두어야 한다.
그래야 서비스가 가능하다. 식당이랑 똑같다.
그래서 실제 앱서비스, 웹서비스 거기서 쓰는 API 라는 용어는 그냥 유저랑 서버가 데이터 주고 받는 정확한 방법이라고 보면 된다.
서비스를 하기 위해 미리 만들어놓는 메뉴판! 하지만, 여전히 '방법' 이라는 용어가 추상적이다.
웹서비스 메뉴판이 대체 어떻게 생겼습니까? 그 '방법' 이라는 것은 실은 '코드' 이다.
API를 만들고 동작시키는 것, 전부 코드로 이루어져 있다.
app.get('/detail/:id', function (req, res) {
db.collection('웹툰').findOne({_id: parseInt(요청.params.id)}, function (에러, 결과) {
console.log(결과);
res.render('detail.ejs', {data: 결과});
})
↑ DB에서 웹툰 이미지를 뽑는 코드라고 보면 된다. (이해 할 필요 전혀 없고, 이쁘게 생겼다는 것만 보길)
이 코드를 동작시키면 DB에서 웹툰을 뽑아서 갖다준다. 근데 유저가 이 코드를 어떻게 동작시키냐?
해킹을 해서 컴퓨터에 침입을 하지 않는 이상 이 코드를 동작시키지 못한다.
app.get('/detail/:id', function (req, res)
↑ 그래서 식당 주인이 API 코드를 맨 위에 짜 놓는다. node.js 로는 이렇게 짠다.
app.get('/detail/:id', function (req, res)
'이 url로 get 요청을 하면, 안에 있는 코드 실행해주세요~' 라는 뜻이다.
db.collection('웹툰').findOne({_id: parseInt(요청.params.id)}, function (에러, 결과) {
console.log(결과);
res.render('detail.ejs', {data: 결과});
↑ 이 부분이 API인 것이다.
<실제 네이버가 만들어둔 웹툰 API 예시>
(GET 요청) comic.naver.com/webtoon/detail?titleld=641253
(GET 요청) comic.naver.com/webtoon/detail?titleld=318995
API는 작성할 때 작성하는 법이 정해져 있습니다. 정확히 만드려면,
이 3가지 정보가 들어가야 합니다.
<API가 가져야할 내용>








html 파일 안에 어려운 API 요청 같은 것을 쉽게 할 수 있는 이런 버튼들이 숨겨져 있다.
이 이미지를 누르면 '여기로 GET 요청해주세요.' 이런식으로 코드가 숨겨져 있다.
그래서 평소에는 별로 코드 짤 일이 없는 것이다.
public / private / partner API
public API : 누구나 사용가능한 공개 API
private API : 사내에서 몰래 쓰는 API
partner API : 미리 정해둔 놈만 쓰는 API
API는 항상 public 할 필요는 없다. 외부에 노출되어서 누구나 사용 가능한 API 다.
private API는 사내 프로그램들끼리 통신이 필요할 때 쓸 수도 있다.
partner API는 내가 미리 정한 사람들끼리만 하는 API 이다.
모든 프로그램은 API를 가질 수 있음
웹 말고도 다른 곳에서도 API 같은 것이 존재한다.
윈도우 같은 것도 프로그램이니까 Windows API 라는 것을 제공한다.
Windows API : 이거 쓰면 윈도우 운영체제 기능들 사용가능
윈도우가 제공하는 여러가지 기능들 알림 기능 이라던지 아니면 파일 설치 삭제,
혹은 데이터 베이스에서 내가 데이터를 뽑고 싶으면
Database 관리프로그램 API : 이거 쓰면 DB 입출력 기능들 사용가능
프로그램이 존재한다고 하면, API는 항상 있을 것이다.
프로그램을 동작시키기 위한 방법이기 때문에 그렇다.
XX 프로그램 API : XX 기능들 사용가능
⌨️
API는 키보드 같은 것이다. 키보드를 통해 우린 컴퓨터와 대화한다.
키보드 버튼을 press 하면, 이 키보드에서 뭔가가 일어나고 컴퓨터에서 일어나서 스크린에서 텍스트를 볼 수 있다.
키보드를 통해서 컴퓨터와 interaction 하는 것이다. 이 키보드로 정보를 입력하는 것이다.
내가 컴퓨터와 소통하는 유일한 방법이다. API는 바로 이 키보드와 유사하다!
프로그램들이 서로 소통하는 방법이 API다. (인간이 아닌) 코드들끼리 서로 소통하기 위해 만들어진게 API다.
ios / android 앱이 키보드 키들을 누르면 백엔드 데이터베이스, 서버로 가서 알려준다.
이게 간단한 API에 대한 설명이다. 그렇다면, REST API. GraphQL API.. 등등은 뭘까?
그건 그냥 다르게 생긴 키보드들인 것이지. 같은 목적을 달성한다. 프로그램들이 서로 소통할 수 있게 도와준다.
⛅
API들에는 종류가 많다.
예를 들어, 공공 API : 날씨 API, 전세계 날씨정보를 갖고 있는 서버가 있다면 버튼을 눌러서 한국 날씨 정보~
하면, 해당 데이터를 보여줄 것이다. instagram API, facebook API도 마찬가지! 해당 앱, 서버와 소통할 수 있는 키보드들이다.
API는 데이터 서버를 갖고 있는 사람들이 원하는대로 디자인 할 수 있다. 그래서 어떤 API는 접근권한이 정해져있다.
가끔 API 사용에 제약이 있거나, 사용하기 위해서 지불해야 할 때도 있다. 혹은 1초에 10리퀘스트만 보낼 수 있다거나.. 등등..
또 다른 종류의 API 로는 WEB API 라는 것이 있다. 이건 브라우저를 위해 만든 API를 뜻한다.
구글 크롬, 파이어폭스.. 등등을 위해 말이다. 구글 크롬, 파이어폭스 등등 다 활용할 수 있는 키보드를 제공한다.
점점 늘어나고 있는데 이전엔 API가 정말 작았다. 지금은 많이 늘어나서 이젠 예를 들면,
유저의 마이크 엑세스를 요청할 수 있다. 유저의 카메라 접근권한을 요청한다거나, 유저의 지역위치 접근권한을 요청한다거나
이런식으로 활용할 수 있는 버튼들인 셈이다. 내부적으로 어떻게 작업하는지는 볼수가 없다.
크롬이 어떻게 나의 지역정보를 가져오는지, 오디오를 가져오는지..
우린 그런건 안한다. 우리가 보는건 버튼이 있고, 그걸 누르면 많은 일이 뒤에서 일어나고,
그건 우리가 알 바 아니고, 작업을 수행하게 되고, 그래서 다들 API를 좋아하는 것이다.
많은 종류의 API들은 다른 목적을 갖고 있지만, 같은 작업을 한다.
버튼을 보여주고, 나의 코드로 그걸 누를 수 있다. 이를 통해 원하던 작업을 수행한다.
API가 필요하냐? 안필요하냐? 우리가 무엇을 원하냐에 따라 다르다.
API를 만들어야할까? 마찬가지로 우리의 니즈에 따라 다르다.
API를 만드는 법을 배워야 할까? 그건 당연히 배워야 한다!
Ref. https://youtu.be/iyFHfzCRHA8
'( ´・・) > 개발' 카테고리의 다른 글
| [Callback] 콜백함수 정의와 설명 (쉽게 이해하기) (0) | 2023.03.09 |
|---|---|
| [Callback] 콜백함수에 대해 알아보기 (Callback + 익명함수) (0) | 2023.03.09 |
| [Git Branch] 협업 연습ㅣ새로운 작업 영역 (차원) 열기 (0) | 2023.02.20 |
| [JavaScript] [코딩테스트] '수박수박수박수박수박수?' (0) | 2023.02.19 |
| [JavaScript 실습] Math 메소드 사용하여 문제 풀기 (3개) (0) | 2023.02.19 |