몇일전 비개발자 지인분께 API 가 무엇이냐는 질문을 받아 설명을 해드렸는데 커리어리에서도 궁금해하실 분들이 계실것 같아 정리해봅니다.
API 는 Application Programming Interface 의 약자로
프로그램들이 서로 통신하거나 상호작용 할 수 있도록 도와주는 매개체이자 약속이라 할 수 있습니다.
API 에 대한 이해를 쉽게 하기 위한 비유로
회사에서 팀장과 팀원들간에 다음과 같은 소통이 일어난다 가정하겠습니다.
- 팀장이 팀원들에게 오늘 할 업무 목록을 물어봅니다.
- 팀장이 각 팀원들에게 해야할 업무를 지정해 줍니다.
만약 팀장과 팀원이 프로그램으로 바뀐다면 어떻게 될까요?
바로 다음과 같은 API 를 정의하여 서로 소통하게 됩니다.
- 업무 목록 조회 API
- 업무 지시 API
그렇다면 프로그램에서 이런 API 를 정의하면 뭐가 좋은 것일까요?
✔️ client 프로그램은 소통할 프로그램이 어떤 프로그램인지, 구현이 어떻게 되어있는지 신경쓰지 않고 약속된 API 만 사용하면 소통이 가능합니다.
위의 예를 들어 팀장이 소통할 팀원들 중 한사람은 말하는걸 좋아하고 한사람은 에어팟을 꽂아 소리를 못듣는 사람이 있을 경우 팀장은 자신이 소통할 팀원이 누구냐에 따라 신경써서 다르게 접근해야 합니다.
하지만 API 를 사용할 경우 이미 약속된 내용이기 때문에 상대방이 누구든 상관없이 API 만 호출하면 원하는 결과를 얻을 수 있습니다.
✔️ 공통된 로직을 효율적으로 관리할 수 있습니다.
하나의 프로그램과 소통하는 여러 Client 프로그램이 있을 경우 각각의 Client 에서 똑같은 로직을 들고 있는것보단 하나의 프로그램에서 공통된 로직을 제공해주는게 효율적이고 유지보수적으로도 편리합니다.
✔️ 유지 보수 및 확장이 용이합니다.
HTTP 와 같은 범용 프로토콜을 사용하는 API 의 경우 웹, 안드로이드, IOS 환경에서 동일한 API 를 사용할 수 있어 서로 다른 환경에서 동일한 기능 구현이 간편해집니다.
또한 API 에 버그가 있거나 개선사항을 진행하게 될 경우 API 를 제공하는 프로그램만 수정하면 되기 때문에 유지 보수적으로도 효율적입니다.
인터넷을 통해 병합된 컴퓨터들 간의 통신시 사용하는 API 를 웹 API 라고 불리기도 합니다.
저희가 사용하는 어플이나 웹사이트에서 사용하는거라 저희의 생활속에 가장 많이 사용하는 API 라고 할 수 있을텐데요,
웹 API 의 경우 API 를 정의했던 시기와 이유에 따라 다음과 같은 종류로 나뉘어집니다.
(API 종류에 대한 출처 : https://aws.amazon.com/ko/what-is/api/)
✔️ SOAP API
이 API는 단순 객체 접근 프로토콜을 사용합니다. 클라이언트와 서버는 XML을 사용하여 메시지를 교환합니다. 과거에 더 많이 사용되었으며 유연성이 떨어지는 API입니다.
✔️ RPC API
이 API를 원격 프로시저 호출이라고 합니다. 클라이언트가 서버에서 함수나 프로시저를 완료하면 서버가 출력을 클라이언트로 다시 전송합니다.
✔️ Websocket API
Websocket API는 JSON 객체를 사용하여 데이터를 전달하는 또 다른 최신 웹 API 개발입니다. WebSocket API는 클라이언트 앱과 서버 간의 양방향 통신을 지원합니다. 서버가 연결된 클라이언트에 콜백 메시지를 전송할 수 있어 REST API보다 효율적입니다.
✔️ REST API
오늘날 웹에서 볼 수 있는 가장 많이 사용되고 유연한 API입니다. 클라이언트가 서버에 요청을 데이터로 전송합니다. 서버가 이 클라이언트 입력을 사용하여 내부 함수를 시작하고 출력 데이터를 다시 클라이언트에 반환합니다.