기반기술/서버 개발

API란 무엇인가?

hnjee 2025. 5. 2. 11:25

1. 인터페이스 

1) 일반적인 의미의 인터페이스

  • 인터페이스는 두 가지가 만나서 서로 소통하거나 연결될 수 있게 해주는 접점을 말한다. 
  •  서로 다른 두 개념(사람-기계, 기계-기계)이 이해할 수 있게 중간 역할을 해주는 것
    • TV 리모컨이 TV와 우리 손 사이의 인터페이스. → 버튼을 눌러 TV를 조작하게 해줌
    • 자동차의 핸들, 페달, 기어도 운전자와 자동차를 연결해주는 인터페이스. → 운전자가 차를 제어할 수 있게 해주는 장치들

2) 프로그래밍에서의 인터페이스

프로그래밍에서 API는 프로그램이 다른 프로그램과 소통하는 규칙과 방법을 정해둔 것.  

  • API의 Interface 
  • Java의 Interface: 자바에서는 interface라는 키워드로 클래스가 따라야 할 규칙(계약)을 정의
  • GUI 인터페이스: 버튼, 텍스트박스, 메뉴 등 사용자와 컴퓨터가 상호작용하는 화면 요소들.

2. API 

1) API (Application Programming Interface) 란?

  • 어떤 시스템, 애플리케이션, 또는 서비스가 다른 프로그램과 상호작용할 수 있도록 제공하는 명확한 규칙과 방법이다.
  • 쉽게 말해, 프로그램이 다른 프로그램과 소통하는 방법을 정해둔 것.

2) API의 특징

  • 기능 제공: 특정 기능을 사용할 수 있도록 미리 정의된 규칙을 제공
    예: 구글 지도 API를 사용하면 내 앱에서도 지도를 띄울 수 있다.
  • 표준화된 방식: API를 이용하면 특정 서비스나 시스템과 일관된 방식으로 데이터를 주고받을 수 있다.
  • 보안성 유지: API는 내부 로직을 숨기면서 필요한 기능만 노출해서 보안성을 높인다.

3) API의 종류

  • 웹 API
    • 웹 통신을 통해 데이터를 주고받는 인터페이스.
    • 서로 다른 두 애플리케이션(또는 시스템)간의 통신을 위한 규약
    • 클라이언트↔서버, 서버↔서버 등 
  • Open API
    • 외부 개발자들이 접근하여 데이터를 요청하거나, 특정 기능을 사용할 수 있도록 제공하는 형태의 API
    • 주로 Web API 형태로 제공된다.
    • 대표적인 예: Google Map, Twitter, 공공데이터 등
    • 이러한 API를 통해서 애플리케이션 내에 Google Map 을 쉽게 삽입하고, Twitter의 정보를 가져오는 등의 개발이 가능. 정부에서 제공하는 공공 API는 각 부처가 갖고 있는 토지 소유, 경매, 부동산 등의 데이터를 제공해 주며 이를 이용하여 다양한 애플리케이션을 개발할 수 있다.
  • 라이브러리 API
    • 특정 기능을 제공하는 라이브러리 내부의 API
    • Java Collections API, Python Pandas API 등
  • 프레임워크 API
    • 프레임워크에서 제공하는 기능을 활용하는 API
    • Spring Framework API, Django API 등
  • OS API (운영체제 API)
    • 운영체제에서 제공하는 시스템 기능을 사용할 수 있는 API
    • Windows API, Linux System Calls, macOS Cocoa API 등

3. 웹 API 개발 

1) 웹 API란? 

  • 클라이언트(웹/앱) 와 서버 간에 데이터 교환을 위한 통신을 도와주는 규칙
    • 요청 규칙: 클라이언트는 서버가 이해할 수 있는 형식으로 요청해야함 
      예) GET /users/123 → 서버에 "123번 유저 정보를 달라"는 요청
    • 응답 규칙: 서버는 요청을 받은 후 데이터를 처리해서 정해진 형식으로 클라이언트에 답을 준다.
      예) { "id": 123, "name": "Hyunji", "email": "hyunji@example.com" }
  • 네트워크를 통해 요청/응답. 일반적으로 HTTP/HTTPS 프로토콜을 사용한다. 
  • API는 JSON, XML 등의 형식으로 데이터 교환
  • 설계방식에는 REST API, GraphQL API 등이 있음 

2) 왜 API를 개발해야 할까? 

  • 클라이언트(앱, 웹 등)가 서버에서 데이터를 가져오거나, 서버로 데이터를 보내야 할 때, 클라이언트와 서버가 같은 규칙(API)을 따라야 서로 데이터를 원활히 주고받을 수 있다. 
  • 클라이언트와 서버 간 데이터를 주고받는 경로와 규칙을 설계하고 구현하는 것이 API를 만드는 목적

3) 백엔드와 프론트엔드의 API 개발 

  • 백엔드: API 설계 및 개발을 담당
    • API의 경로(예: /users/{id}), HTTP 메서드(GET, POST 등), 요청/응답 데이터 형식(예: JSON) 등을 설계, 구현
    • API 문서화: Swagger와 같은 도구를 사용해서 API의 사용법을 문서화하면 프론트엔드 개발자가 더 쉽게 이해하고 사용 가능 
    • 서버에서 처리하는 로직(DB와의 상호작용, 비즈니스 로직 등)을 처리하고, 그 결과를 API 응답으로 클라이언트에게 전달
  • 프론트엔드: API 설계 명세에 따라 사용
    • API를 호출하여 백엔드에서 제공하는 데이터를 가져오고, 그 데이터를 화면에 동적으로 렌더링하는 역할을 한다.
    • 프론트엔드 개발자는 백엔드에서 제공하는 API의 명세(엔드포인트, 요청 방식, 응답 형식 등)를 잘 따라야 함 
    • 프론트엔드에서 API 호출을 위한 axios, fetch와 같은 라이브러리를 사용하고,
      서버로부터 받은 데이터를 화면에 표시하는 작업을 진행

4) API를 개발한다는 것은 무얼 만드는 것인가?

  1. HTTP 요청을 처리하는 경로(URL)를 만든다.
    예를 들어, 클라이언트가 /users로 요청을 보내면 그 요청을 처리할 코드를 작성

    이때 @RestController, @GetMapping, @PostMapping 같은 어노테이션을 써서 경로와 메서드를 정의 
  2. 요청 데이터를 처리한다.
    클라이언트가 보낸 요청에서 데이터를 추출하고, 필요한 작업(예: DB에서 데이터 조회)을 수행
  3. 응답 데이터를 반환한다.
    작업 결과를 JSON, XML 같은 형식으로 반환해서 클라이언트가 사용할 수 있게 만든다

4. 웹 API 설계 방식의 종류 

API 설계 방식이란 클라이언트와 서버가 요청과 응답을 주고받는 구체적인 규칙을 설계하고 구현하는 방법론이다.

1) REST (Representational State Transfer)

  • REST는 HTTP를 기반으로 클라이언트와 서버가 데이터를 교환하는 구조적인 방식
  • 주로 JSON 형식의 데이터를 주고받는다. 
  • 리소스 기반: URL이 특정 자원을 나타냄. 예: /users/123는 ID가 123인 사용자.
  • HTTP 메서드를 활용: GET, POST, PUT, DELETE 등을 사용.
  • 상태 비저장(Stateless): 서버는 요청 간에 클라이언트 상태를 유지하지 않는다. 
  • 장점: 단순하고 직관적이며, HTTP의 기본 구조를 활용.
  • 단점: 복잡한 요청이나 데이터 구조를 처리할 때 비효율적일 수 있음.

2) GraphQL

  • Facebook에서 개발한 API 설계 방식으로, 클라이언트가 원하는 데이터만 요청하고 받을 수 있는 유연한 쿼리 언어.
  • 클라이언트가 필요한 데이터를 명확히 지정. 예: query { user(id: 123) { name, email } } → 이름과 이메일만 반환.
  • 하나의 요청으로 여러 리소스에 접근 가능.
  • 데이터를 계층적으로 정의하고 요청.
  • 장점: 데이터 전송량이 줄어들고, 클라이언트가 필요한 데이터만 가져올 수 있다.
  • 단점: 복잡한 초기 설정과 학습 곡선이 있음.

3) gRPC (Google Remote Procedure Call)

  • Google에서 만든 고성능 원격 프로시저 호출(Remote Procedure Call) 프레임워크로, 서버와 클라이언트 간의 통신을 위한 프로토콜이다.
  • 프로토콜 버퍼(Protobuf)라는 이진 형식을 사용해 JSON보다 데이터가 더 작고 처리 속도가 빠름.
  • 양방향 스트리밍 지원: 클라이언트와 서버가 동시에 데이터를 주고받을 수 있음.
  • 다중 언어 지원: 다양한 언어로 작성된 서버와 클라이언트 간의 통신 가능.
  • 장점: 빠르고 효율적이며, 스트리밍 데이터 처리에 적합.
  • 단점: REST나 GraphQL보다 설정이 복잡하고 디버깅이 어려움.
  REST GraphQL gRPC
데이터 형식 JSON, XML JSON Protobuf (이진 데이터)
요청 방식 HTTP 메서드 기반 쿼리 언어 메서드 호출
효율성 데이터 오버페치/언더페치 가능 필요한 데이터만 요청 가능 고성능, 작은 데이터 크기
스트리밍 지원 제한적 제한적 지원
학습 곡선 쉬움 중간 어려움
특징 가장 전통적이고 널리 사용됨
클라이언트가 필요한 데이터만 가져오도록 설계되어 유연함 고성능과 스트리밍이 필요한 서비스에 적합