본문 바로가기

Backend study/Backend theory

API (Application Programming Interface)

1. API의 개념

API란 무엇인가?

API는 소프트웨어 구성 요소 간의 통신을 위한 규칙이나 정의를 의미한다. API를 사용하면 개발자는 다른 시스템이나 서비스의 기능을 직접 구현하지 않고도 사용할 수 있다. 예를 들어, 구글 지도 API를 사용하면 웹사이트나 모바일 애플리케이션에서 지도를 표시하거나 경로 안내 기능을 구현할 수 있다.

API는 일반적으로 다음과 같은 요소를 포함한다:

  • 엔드포인트(Endpoint): API가 제공하는 특정 기능에 접근하기 위한 URL이다. 예를 들어, /api/v1/users는 사용자 데이터를 가져오는 API 엔드포인트가 될 수 있다.
  • HTTP 메서드: API는 일반적으로 HTTP를 통해 요청을 받는다. 이때 사용되는 주요 HTTP 메서드로는 GET, POST, PUT, DELETE 등이 있다.
    • GET: 데이터를 조회하기 위해 사용된다.
    • POST: 데이터를 생성하거나 서버에 새로운 리소스를 추가할 때 사용된다.
    • PUT: 기존 데이터를 업데이트할 때 사용된다.
    • DELETE: 데이터를 삭제할 때 사용된다.
  • 요청과 응답(Request and Response): 클라이언트는 API에 요청을 보내고, API는 그에 대한 응답을 반환한다. 요청에는 필요한 파라미터나 데이터가 포함될 수 있고, 응답에는 요청에 대한 결과가 포함된다.
  • 상태 코드(Status Code): API 응답에 포함되어, 요청의 성공 또는 실패 상태를 나타낸다. 예를 들어, 200 OK는 성공을, 404 Not Found는 요청한 리소스를 찾을 수 없음을 의미한다.

API의 역할

API는 다양한 역할을 수행한다:

  • 데이터 액세스: API를 통해 데이터베이스에서 데이터를 읽거나 쓰고, 외부 서비스로부터 데이터를 가져올 수 있다.
  • 기능 제공: API는 다른 애플리케이션이 특정 기능을 사용할 수 있게 한다. 예를 들어, 결제 API를 통해 애플리케이션에서 결제 기능을 쉽게 통합할 수 있다.
  • 서비스 통합: 여러 서비스 간의 통합을 가능하게 하여, 서로 다른 시스템이 함께 동작하도록 한다. 예를 들어, CRM 시스템과 이메일 서비스 간의 통합을 통해 고객 데이터를 기반으로 자동화된 이메일을 보낼 수 있다.

 

2. API 개발 순서

API를 개발하는 과정은 다음과 같이 여러 단계로 이루어진다:

1. 요구사항 수집 및 분석

API를 개발하기 전에, API가 해결해야 할 문제와 목표를 명확히 정의해야 한다. 이 단계에서는 API의 주요 기능, 타겟 사용자, 통합할 시스템 등을 분석한다.

2. API 설계

API의 구조를 설계하는 단계이다. 이 과정에서 다음과 같은 요소들을 고려한다:

  • 엔드포인트 정의: API가 제공할 리소스와 각각의 엔드포인트를 정의한다.
  • 데이터 모델링: API에서 사용할 데이터 구조를 설계한다. 데이터베이스의 스키마 설계와도 연관이 있다.
  • HTTP 메서드 정의: 각 엔드포인트에서 사용할 HTTP 메서드를 정의한다.
  • 상태 코드 정의: 각 요청에 대해 API가 반환할 상태 코드를 정의한다.

3. API 명세서 작성

API 명세서는 API의 구조와 사용 방법을 기술한 문서이다. 이 문서는 API 사용자가 API의 기능을 이해하고 활용할 수 있도록 돕는다. 주요 내용으로는 엔드포인트, 요청/응답 형식, 데이터 구조, 예제 등이 포함된다.

4. API 개발

API 설계에 따라 실제로 코드를 작성하는 단계이다. 이 단계에서는:

  • 라우팅: 각 엔드포인트에 대해 요청을 처리하는 라우팅을 설정한다.
  • 비즈니스 로직 구현: API의 주요 기능과 비즈니스 로직을 구현한다.
  • 데이터베이스 연동: 데이터베이스와의 상호작용을 처리하는 코드를 작성한다.

5. 테스트

API가 의도한 대로 동작하는지 확인하기 위해 테스트를 수행한다. 테스트는 단위 테스트, 통합 테스트, 시스템 테스트로 나뉠 수 있으며, 자동화된 테스트 도구를 사용할 수 있다.

6. 배포 및 문서화

API를 프로덕션 환경에 배포하고, 사용자를 위한 API 문서를 작성한다. 문서화는 API의 사용성을 높이는 중요한 요소이다.

7. 모니터링 및 유지보수

배포된 API를 모니터링하고, 발생하는 문제를 해결하며 지속적으로 개선한다. API의 성능, 보안, 가용성 등을 주기적으로 점검한다.

 

3. API 유형

API 유형에는 REST API, GraphQL과 같은 다양한 설계 방식과 데이터 통신 방법이 있다.

1. REST API

REST API란?

REST(Representational State Transfer)는 API 설계의 대표적인 아키텍처 스타일로, 자원을 요청하고 처리하는 방식에 대한 규칙을 정의한다. REST API는 주로 HTTP 프로토콜을 사용하며, 자원을 URL로 표현하고, HTTP 메서드를 통해 자원에 대한 작업을 수행한다.

  • 자원(Resource): REST에서 자원은 특정 데이터를 의미하며, 이는 고유한 URL로 표현된다. 예를 들어, /users/123는 사용자 ID가 123인 사용자에 대한 자원이다.
  • HTTP 메서드: REST API는 HTTP 메서드를 사용해 자원에 대한 작업을 구분한다. 일반적으로 다음과 같은 메서드를 사용한다:
    • GET: 자원을 조회할 때 사용한다.
    • POST: 새로운 자원을 생성할 때 사용한다.
    • PUT: 기존 자원을 수정할 때 사용한다.
    • DELETE: 자원을 삭제할 때 사용한다.

REST의 특징

  • 무상태성: 모든 요청은 독립적이며, 서버는 요청 간의 상태를 유지하지 않는다. 각 요청은 필요한 모든 정보를 포함하고 있어야 한다.
  • 자원 기반: REST는 자원을 기반으로 설계되며, 클라이언트는 서버에 있는 자원의 상태를 요청하고, 응답으로 해당 자원의 표현을 받는다.
  • 캐싱: 클라이언트가 동일한 요청을 여러 번 보내지 않도록 캐싱을 통해 성능을 최적화할 수 있다.

REST API의 장점

  • 단순성: HTTP와 URL을 사용하여 직관적으로 API를 설계할 수 있다.
  • 확장성: 다양한 애플리케이션과 통신할 수 있어, 웹, 모바일, IoT 등 다양한 클라이언트와의 통합이 가능하다.

REST API의 한계

  • 데이터 중복: 요청마다 필요한 자원 전체를 전달받아야 하므로, 불필요한 데이터가 중복될 수 있다.
  • 복잡한 관계 데이터 처리 어려움: 자원 간의 관계가 복잡한 경우, 여러 번의 요청이 필요할 수 있다.

2. GraphQL

GraphQL이란?

GraphQL은 페이스북이 개발한 API 쿼리 언어로, 클라이언트가 필요한 데이터를 정확하게 요청할 수 있도록 설계되었다. REST가 고정된 엔드포인트에 따라 자원을 가져오는 반면, GraphQL은 하나의 엔드포인트에서 클라이언트가 원하는 데이터를 자유롭게 쿼리할 수 있다.

GraphQL의 특징

  • 단일 엔드포인트: 모든 요청은 단일 엔드포인트에서 처리된다. 클라이언트는 자신이 필요한 데이터만 요청할 수 있다.
  • 선택적 데이터 요청: 클라이언트는 원하는 필드만 선택해 응답을 받을 수 있다. REST API처럼 불필요한 데이터를 포함할 필요가 없다.
  • 계층형 관계: GraphQL은 자원 간의 관계를 명확하게 표현할 수 있어, 복잡한 관계 데이터를 처리하는 데 유리하다.

GraphQL의 장점

  • 효율성: 클라이언트가 원하는 데이터만 요청하므로, 데이터 전송량을 줄일 수 있다.
  • 유연성: 클라이언트가 어떤 데이터를 받을지 자유롭게 결정할 수 있으므로, 요청을 다양하게 맞춤화할 수 있다.
  • 계층형 데이터 처리: 여러 자원 간의 관계를 단일 요청으로 처리할 수 있어, 여러 번의 요청이 필요 없는 경우가 많다.

GraphQL의 한계

  • 복잡한 쿼리 처리: 클라이언트가 너무 복잡한 쿼리를 보낼 경우 서버의 부담이 커질 수 있다.
  • 캐싱의 어려움: REST API는 URL을 기반으로 캐싱할 수 있지만, GraphQL은 캐싱이 어렵다. 이를 해결하기 위해 별도의 캐싱 전략이 필요하다.

3. REST API와 GraphQL 비교

특징  REST API   GraphQL
엔드포인트 여러 엔드포인트 사용 (GET /users, POST /users 등) 단일 엔드포인트 사용 (모든 요청은 하나의 엔드포인트)
데이터 요청 방식 고정된 자원 요청 클라이언트가 원하는 데이터만 쿼리 가능
복잡한 관계 데이터 처리 여러 번의 요청 필요 한 번의 요청으로 계층형 데이터 처리 가능
무결성 자원의 고유 URL을 기반으로 관리 데이터의 형태가 자유롭고 쿼리에 따라 유연하게 변동
캐싱 HTTP 캐싱 가능 캐싱이 어렵고 별도의 처리 필요

 

4. API 명세서

API 명세서는 API의 사용 방법을 문서화한 것이다. 이는 개발자들이 API를 올바르게 사용하고, 필요한 데이터를 정확히 주고받을 수 있도록 돕는다. API 명세서에는 다음과 같은 정보가 포함된다:

  • 엔드포인트 정보: API의 엔드포인트와 각각의 URL 경로
  • HTTP 메서드: 각 엔드포인트에 사용되는 HTTP 메서드(GET, POST, PUT, DELETE 등)
  • 요청 매개변수: 요청 시 필요한 파라미터와 그 유형(쿼리 파라미터, 헤더, 본문 등)
  • 응답 형식: API의 응답 데이터 형식(JSON, XML 등)과 포함된 필드 설명
  • 상태 코드: 각 요청에 대한 가능한 상태 코드와 그 의미
  • 예제: API 사용 예제, 요청/응답 샘플

 

5. 오픈 API: 스웨거(Swagger)

오픈 API(Open API)

오픈 API는 특정 표준을 준수하는 API 명세서이다. 오픈 API는 개발자들이 쉽게 API를 이해하고 사용할 수 있도록 정의된 표준을 제공한다. OpenAPI Specification(OAS)는 가장 널리 사용되는 API 명세 표준 중 하나이다.

스웨거(Swagger)

스웨거는 오픈 API 명세서를 작성하고, 이를 기반으로 자동화된 API 문서화, 코드 생성, 테스트 등을 가능하게 하는 도구 모음이다. 스웨거는 OpenAPI Specification(OAS)을 사용하여 API를 설계하고, 개발자가 API를 시각화하고 상호작용할 수 있는 인터페이스를 제공한다.

  • 스웨거 UI(Swagger UI): API 명세서를 기반으로 사용자 인터페이스를 생성하여, API를 테스트하고 문서화하는 도구이다. 개발자는 브라우저에서 직접 API를 호출해보고, 응답을 확인할 수 있다.
  • 스웨거 에디터(Swagger Editor): YAML 또는 JSON 형식의 OpenAPI 명세서를 작성하고 편집할 수 있는 도구이다.
  • 스웨거 코드젠(Swagger Codegen): OpenAPI 명세서를 기반으로 API 클라이언트 및 서버 스텁 코드를 자동으로 생성해주는 도구이다.

스웨거를 사용하면 API 문서화가 간편해지고, 개발자들이 API를 더 쉽게 이해하고 사용할 수 있게 된다. 이를 통해 API 개발과 유지보수 과정이 크게 효율화된다.

API는 소프트웨어 간의 상호작용을 정의하는 인터페이스로, 애플리케이션 개발의 중요한 요소이다. API는 다양한 유형으로 나뉘며, 개발 과정에서 요구사항 수집, 설계, 구현, 테스트, 배포 등의 단계가 필요하다. API 명세서는 API의 구조와 사용법을 문서화한 것으로, 스웨거와 같은 도구를 사용하면 명세서를 기반으로 자동화된 문서화와 코드 생성을 할 수 있다. API를 잘 설계하고 문서화하는 것은 개발자와 사용자 간의 효율적인 협업과 통합을 가능하게 한다.

728x90

'Backend study > Backend theory' 카테고리의 다른 글

가상화와 컨테이너  (4) 2024.09.03
클라우드 컴퓨팅  (6) 2024.09.02
데이터베이스  (1) 2024.09.01
운영체제  (0) 2024.09.01
네트워크  (3) 2024.08.31