API란
API는 Application Programming Interface의 줄임말로, 프로토콜 집합을 사용하여 두 소프트웨어 구성 요소가 서로 통신할 수 있게 하는 인터페이스이다. 인터페이스는 두 애플리케이션 간의 서비스 계약이라고 할 수 있는데, 이 계약은 요청과 응답을 사용하여 두 애플리케이션이 서로 통신하는 방법을 정의한다. API 문서에는 개발자가 요청과 응답을 구성하는 방법에 대한 정보가 들어있다.
API 아키텍처는 일반적으로 클라이언트와 서버 측면에서 설명된다. 요청을 보내는 애플리케이션을 클라이언트라고 하고 응답을 보내는 애플리케이션을 서버라고 한다.
API 유형
API는 크게 두 가지 유형으로 나뉜다.
- Web API: HTTP 프로토콜을 통해 웹 서비스 간에 통신하기 위한 API이다. 모든 웹 서비스는 API이지만 모든 API가 웹 서비스는 아니다.
- ex) RESTful API, SOAP API
- 라이브러리 API: 언어별 라이브러리에 대한 API로, 언어나 프레임 워크에 특화된 기능을 사용할 수 있게 한다.
그리고 API가 생성된 시기와 이유에 따라 API는 네 가지 방식으로 작동할 수 있다.
- SOAP API: 이 API는 단순 객체 접근 프로토콜을 사용한다. 클라이언트와 서버는 XML을 사용하여 메세지를 교환한다. 과거에 더 많이 사용되었으며 유연성이 떨어지는 API이다.
- RPC API: 이 API는 원격 프로시저 호출이라고 한다. 클라이언트가 서버에서 함수나 프로시저를 완료하면 서버가 출력을 클라이언트로 다시 전송한다.
- Websocket API: 이 API는 json 객체를 사용하여 데이터를 전달하는 또 다른 최신 웹 API 개발이다. Websocket API는 클라이언트 앱과 서버 간의 양방향 통신을 지원한다. 서버가 연결된 클라이언트에 콜백 메세지를 전송할 수 있어 REST API 보다 효율적이다.
- REST API: 이 API는 클라이언트가 서버에 요청을 데이터로 전송한다. 서버가 이 클라이언트 입력을 사용하여 내부 함수를 시작하고 출력 데이터를 다시 클라이언트에 반환한다.
REST API
REST(REpresentational State Transfer)는 클라이언트가 서버 데이터에 액세스하는 데 사용할 수 있는 GET, PUT, DELETE 등의 함수 집합을 정의한다. REST API는 클라이언트와 서버 간의 효과적인 소통을 위한 규칙과 원칙을 정의한 것인데, 여기서 중요한 개념은 서버가 클라이언트의 데이터를 저장하지 않는다는 것이다. 이것은 서버가 클라이언트의 상태를 기억하지 않는다는 원칙을 나타낸다. 또한 클라이언트 요청은 URL과 유사하다. 서버의 응답은 일반적으로 그래픽이나 HTML 페이지가 아니라, 클라이언트가 원하는 데이터를 포함하고 있다. 이 데이터는 주로 json 형태로 제공되며, 클라이언트는 이를 이용하여 자체적으로 화면을 구성하거나 다음 동작을 결정할 수 있다.
REST API 장점
- 간결하고 읽기 쉬운 구조: REST API는 자원과 행위를 명확하게 정의하고 HTTP 메서드를 사용하여 행위를 수행한다. 이로 인해 API의 구조가 간결하며, 개발자들이 쉽게 이해할 수 있다.
- 유연성과 확장성: REST는 느슨하게 결합된 아키텍처를 제공하며, 서버와 클라이언트 간의 독립성을 유지한다. 이는 각 요소가 서로에게 영향을 미치지 않으면서 서비스를 변경하거나 확장할 수 있다.
- HTTP 표준 사용: REST는 HTTP 프로토콜을 기반으로 하므로, 기존의 웹 인프라스트럭쳐를 활용할 수 있다. HTTP는 널리 사용되는 프로토콜이며, REST를 채택함으로써 기존의 웹 기술과의 통합이 용이하다.
- 상태 비저장: REST는 상태 비저장한 아키텍처를 가지고 있어, 서버는 각 요청을 독립적으로 처리하고 클라이언트의 상태를 저장하지 않는다. 이는 서버가 확장 가능하며 유지보수가 용이하도록 만든다.
API 엔드포인트
API 엔드포인트는 서버에서 제공되는 특정 리소스에 접근할 수 있는 URI(Uniform Resource Identifier) 또는 URL(Uniform Resource Locator)을 나타낸다. 엔드포인트는 클라이언트가 API에게 특정 동작을 요청할 때 사용되는 주소로, 해당 주소를 통해 서버는 요청된 리소스나 작업에 대한 응답을 제공한다. 다만 API 엔드포인트는 시스템을 공격에 취약하게 만드므로 API 모니터링을 통해 오용을 방지해야 한다.
API 인증키
API 인증키란, 클라이언트가 서버에게 자신을 식별하고 권한을 얻기 위해 사용하는 비밀 토큰이다. 이는 API를 사용하는 사용자 또는 애플리케이션이 서버에게 자신의 정체성을 증명하고 인증되었음을 보장하는 데 사용된다. API 인증키는 주로 open API나 특히 웹 서비스에서 사용된다.
API 생성 방법
- 먼저, 어떤 기능이나 데이터를 API로 노출할지 정의한다. 필요한 데이터, 엔드포인트, 인증 방식, 응답 포맷 등을 명확히 결정한다.
- API 디자인: REST API의 경우 엔드포인트, HTTP 메서드, 요청 및 응답 형식 등을 설계한다.
- 백엔드 구현: API의 백엔드를 구현한다. 이는 데이터베이스와의 상호 작용, 비즈니스 로직의 구현, 요청을 받아서 응답을 생성하는 등의 작업을 포함한다. 서버 사이드 언어나 프레임워크를 사용하여 구현된다.
- 데이터 포맷 결정: 클라이언트와 서버 간의 데이터 교환 형식을 결정한다. 주로 json 또는 xml 형식으로 사용하며 최근에는 json이 표준으로 자리잡고 있다.
- API 인증 설정: API의 보안을 강화하기 위해 API 인증 방식을 설정한다. API key, OAuth, JWT 등 다양한 방식 중 적절한 것을 선택하고 구현한다.
- 테스트: API를 테스트하고 디버깅한다. 다양한 시나리오에 대한 테스트를 수행하여 안정성과 신뢰성을 확인한다.
- 문서화: API에 대한 명확하고 이해하기 쉬운 문서를 작성한다. 문서에는 엔드포인트, 요청 및 응답 형식, 에러 처리 등이 포함된다.
- 배포: 클라우드 서비스를 사용하는 경우 해당 플랫폼에 API를 배포하고, 도메인 또는 서브도메인을 설정하여 외부에서 접근할 수 있도록 설정한다.
- 모니터링과 유지보수: API가 운영 중일 때는 모니터링을 통해 성능, 사용량, 에러 등을 확인하고 필요한 경우 유지보수를 수행한다.
마무리
API는 현대 소프트웨어 개발에서 핵심적인 역할을 하는 기술 중 하나로 자리매김하고 있다. 서로 다른 시스템 간에 데이터를 교환하고 효율적으로 통신하기 위한 API는 개발자들에게 강력한 도구를 제공한다. 이를 통해 우리는 다양한 플랫폼, 언어, 기술 간의 통합을 실현하며 혁신적인 애플리케이션과 서비스를 구현할 수 있다.
API는 개발 생태계에서 협업과 상호 운용성을 촉진하며 새로운 기술 동향에 대응하는 핵심적은 역할을 하고 있다. 안전한 통신, 데이터 교환의 표준화, 그리고 개발자 간의 협업을 강화하는데 기여하는 API는 소트프웨어 개발의 미래를 지혜롭게 모색하는 데 있어 중요한 도구임은 틀림없어 보인다.
* 참고1: https://aws.amazon.com/ko/what-is/api/
* 참고2: https://maily.so/grabnews/posts/b2341a