기반기술/서버 개발
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를 개발한다는 것은 무얼 만드는 것인가?
- HTTP 요청을 처리하는 경로(URL)를 만든다.
예를 들어, 클라이언트가 /users로 요청을 보내면 그 요청을 처리할 코드를 작성
이때 @RestController, @GetMapping, @PostMapping 같은 어노테이션을 써서 경로와 메서드를 정의 - 요청 데이터를 처리한다.
클라이언트가 보낸 요청에서 데이터를 추출하고, 필요한 작업(예: DB에서 데이터 조회)을 수행 - 응답 데이터를 반환한다.
작업 결과를 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 메서드 기반 | 쿼리 언어 | 메서드 호출 |
효율성 | 데이터 오버페치/언더페치 가능 | 필요한 데이터만 요청 가능 | 고성능, 작은 데이터 크기 |
스트리밍 지원 | 제한적 | 제한적 | 지원 |
학습 곡선 | 쉬움 | 중간 | 어려움 |
특징 | 가장 전통적이고 널리 사용됨 |
클라이언트가 필요한 데이터만 가져오도록 설계되어 유연함 | 고성능과 스트리밍이 필요한 서비스에 적합 |