본문 바로가기

[Kotlin&Spring] 5기 내일배움캠프

[Kotlin&Spring] 5기 API - REST API 중심으로

오늘 스탠다드반 세션에서 다양한 기본적인 웹 개발 개념을 배웠다

웹 개발에 대해 무지한 나에게는 새로운 개념이 많았다

오늘은 그래서 그 중 하나인 API 에 대해 알아보고자한다

출처: AWS

 

API(Application Programming Interface)란,

Interface 라는 중개자의 의미에서 유추할 수 있듯이 둘 이상의 컴퓨터 프로그램이 서로 통신하는 방법이며 컴퓨터 사이에 있는 중계 계층이다
정의를 하거나 프로토콜, 즉 규약을 사용하여 두 소프트웨어 구성 요소가 서로 통신할 수 있게 하는 매커니즘이다

대표적인 프로토콜로는 HTTP(HyperText Tranfer Protocol)이 있고 HTTP는 클라이언트와 서버간의 요청과 응답 데이터 전송에 대해 사전에 약속된 통신 규칙과 표준이다
API는 운영체제나 시스템, 애플리케이션, 라이브러리 등을 활용해 응용프로그램을 작성하게 하는 인터페이스를 말한다

 

애플리케이션(Application)에 대한 의미도 명확히 하자면 고유한 기능을 가진 모든 소프트웨어 프로그램이다

API는 요청과 응답을 사용하여 두 어플리케이션이 서로 통신하는 방법을 정의한다
API 문서에는 개발자가 이러한 요청과 응답을 구성하는 방법에 대한 정보가 들어있다

 

애플리케이션에는 요청과 응답이 있다는 것을 전제로 한다

그리고 요청과 응답을 하는 부분을 나누어서 각각 클라이언트와 서버라고 한다

클라이언트(Client)는 요청을 보내는 애플리케이션을 말한다
서버(Server)는 응답을 보내는 애플리케이션이다

 

API는 아키텍쳐(Architecture)와 접근제한에 따라 종류를 나눌 수 있다

먼저 아키텍쳐로 구분해 정리해 보고자한다

 

1. SOAP(Simple Object Access Protocol) API
용어에서 볼 수 있듯이 단순 객체 접근 프로토콜을 사용한다
클라이언트와 서버는 XML(Extensible Markup Language)을 사용해 메시지를 교환한다
플랫폼 및 프로그래밍 언어에 독립적인 특징이 있다
다양한 네트워크 프로토콜(HTTP, SMTP)을 통해 통신할 수 있다
Envelope 라는 엄격한 메시지 구조를 가지며 따라서 유연성이 떨어진다

성능에 대해서는 무겁고 속도가 느리다고 평가 받는다
사용자 정의 헤더(Header)를 통해 기능 확장할 수 있다
WS-Security 등의 높은 수준의 표준화된 보안기능을 제공한다
따라서 은행, 금융 등 높은 보안성과 신뢰성이 필요한 분야에서 많이 사용된다

 

2. RPC(Remote Procedure) API
클라이언트는 함수(메서드)를 호출해 작업을 요청한다
프로그래밍 언어에 독립적이며 따라서 다양한 프로그래밍 언어에서 구현 가능하다
또한 클라이언트와 서버가 서로 다른 언어로 작성되어도 통신이 가능하다는 특징이 있다
로컬 시스템에서 사용하는 함수 호출과 동일한 방식으로 원격 시스템과 통신한다
함수 호출이 로컬인지 원격인지 구분할 필요가 없다 이것을 투명성이라고 부른다

클라인트가 서버에서 함수나 프로시저(Procedure)를 완료하면 서버가 출력을 클라이언트로 다시 전송한다

여기에서 함수는 인풋에 대비한 아웃풋의 발생을 목적으로 하며 프로시저는 결과값보다는 명령 단위가 수행하는 절차를 목적으로 한다

특정 함수 호출에 특화되어있다
gRPC 등 특정 RPC에서 높은 성능을 제공한다
실시간 통신 또는 빠른 요청-응답 처리가 필요한 시스템에서 유용하다

 

RPC  종류
1. JSON-RPC: JSON 형식의 RPC 프로토콜이다
2. XML-RPC: XML 형식의 RPC 프로토콜이다

플랫폼 간 호환성이 뛰어나다

HTTP를 통해 통신한다
3. gRPC: Google 개발 고성능 RPC 프레임워크이다
프로토콜 버퍼(Protobuf)를 사용해 빠르고 효율적인 데이터 직렬화(serialize)를 지원한다
양방향 스트리밍, 인증 등의 고급기능을 지원한다
분산 시스템*, 마이크로서비스 아키텍쳐에서 사용한다

* 분산시스템(Distributed System)에 대해 간단히 얘기하자면 중앙관리시스템이 있어 다수의 컴퓨터에 어플리케이션을 분산하고 네트워크 전체가 1대의 컴퓨터인 것 처럼 동작하는 시스템이다

 

3. Websocket API
JSON 객체를 사용하여 데이터를 전달하는 API이다
클라이언트 앱과 서버 간의 양방향 통신을 지원해 서버는 클라이언트 요청 없이 데이터를 보낼 수 있다
서버가 연결된 클라이언트에 콜백 메시지를 전송할 수 있어 효율적이다
초기 핸드셰이크(Handshake) 이후에는 계속 유지되어 재연결이 필요하지 않다
HTTP 요청-응답보다 데이터 전송 오버헤드가 적다 따라서 실시간 데이터 교환에 유리하다
메시지를 작은 데이터 프레임 단위로 전송해 네트워크 자원을 절약할 수 있다
클라이언트 또는 서버가 연결을 명시적으로 종료할 수 있다
실시간 애플리케이션(채팅, 게임, 주식 시세, 스포츠 점수 업데이트 등)에 적합하다
핸드셰이크(HandShake)는 다음의 과정을 거치게된다

 

핸드셰이크(HansShake)

1. 클라이언트가 HTTP를 사용해 WebSocket 연결 요청한다

2. 서버가 요청을 승인한다

3. HTTP에서 WebSocket 프로토콜로 프로토콜이 업그레이드된다

 

WebSocket 메시지 형식은 Frame단위로 전송된다
프레임(Frame)의 종류는 아래와 같다
1. 텍스트(Text)
2. 바이너리 데이터(Binary Data)
3. 핑/퐁(Ping/Pong): 연결 유지를 확인한다
4. 닫기(CloseEvent): 연결 종료

 

4. REST(Representational State Transfer) API
현재 유연하고 가장 많이 쓰이는 API이다
리소스 기반으로 모든 데이터는 리소스로 표현되며 리소스는 고유한 URL을 톻해 접근 가능하다
아래의 HTTP 표준 메서드를 사용해 리소스를 관리한다

 

HTTP 표준 메서드

GET: 리소스 조회
POST: 리소스 생성
PUT: 리소스를 수정/전체 업데이트
PATCH: 리소스 일부 수정
DELETE: 리소스를 삭제

 

무상태성을 지니며 서버가 요청 간 클라이언트 데이터를 저장하지 않다는 의미를 지닌다
따라서 클라이언트는 필요한 모든 정보를 요청에 포함해야한다
서버로의 클라이언트 요청은 URL과 유사한 형식을 띈다
서버의 응답은 그래픽 렌더링이 없는 일반 데이터 형식이다
일반적으로 JSON 가장 많이 사용하지만 XML, HTML 등 다양한 데이터 형식을 사용할 수 있다
HTTP 캐시(Cache) 매커니즘으로 클라이언트가 요청을 캐싱해 재사용할 수 있다
클라이언트가 서버 데이터에 접근하는데 사용할 수 있는 GET, PUT, DELETE 등의 함수 집합을 정의한다
클라이언트와 서버는 HTTP 를 사용해 데이터를 교환한다
설치나 설정부분에서 간단하고 가법다

 

REST API 구성요소
1. Base URL(고유한 엔드포인트)가 있다
엔드포인트(End Point)는 API 통신의 최종 접점을 말한다
엔드포인트에 서버URL, 서비스 및 시스템 간 정보가 송수신되는 디지털 위치가 포함된다
시스템이 공격 받지 않도록 보안에 주의해야한다
많은 트래픽으로 인한 병목 현상에 대비해야한다
2. 리소스를 구분하기 위해 경로를 추가한다
ex) /users, /products123
3. 작업의 유형을 HTTP 메서드로 지정함
4. 요청 헤더(Request Header)는 클라이언트가 서버에 요청 시 필요한 추가 정보를 포함한다
5. 요청 본문(Request Body은 데이터를 포함하는 POST, PUT, PATCH 요청에서 사용된다
6. 서버가 클라이언트의 요청을 처리한 결과를 응답 상태 코드(숫자)로 표현한다

 

REST API 보호하는법
1. 인증 토큰
사용자에게 API 호출을 수행할 수 있는 권한을 부여하는데 사용한다
사용자에 대해 누구인지 확인하고 해당 호출에 대한 권한이 있는지 확인한다
2. API 키
API를 호출하는 프로그램 또는 애플리케이션을 식별 후 접근 권한이 있는지를 확인한다
사용량에 대한 데이터를 수집하기 위해 API 모니터링을 허용한다

 

REST API의 장점
1. 통합
새로운 애플리케이션을 기존 소프트웨어 시스템과 통합해 기존 코드를 활용히고 따라서 개발 속도가 빨라진다
2. 혁신
별도의 코드 다시 작성하지 않아도 새로운 앱과 서비스에 신속하게 대응하고 배포를 지원할 수 있다
3. 확장
기업이 다양한 플랫폼에서 고객의 요구사항을 충족할 수 있다
4. 유지 보수
각 시스템은 내부적으로 변경하도록 해 한 시스템의 향후 코드 변경이 다른 시스템에 영향 미치지 않는다

 

위의 4개의 특징을 표로 정리하면 아래와 같다

항목 SOAP API RPC API WebSocket API REST API
개념 XML 기반의 프로토콜로 데이터 교환 메서드 호출 기반의 통신 프로토콜 양방향 통신을 지원하는 API HTTP 표준을 따르는 리소스 기반 API
데이터 형식 XML JSON, XML, Protobuf 등 다양 JSON 객체 JSON(주로 사용), XML, HTML 등 다양
통신 방식 요청-응답 방식, 다양한 네트워크 프로토콜 지원(HTTP, SMTP 등) 요청-응답 방식 풀 이중(Full-Duplex) 통신 HTTP 메서드(GET, POST, PUT, DELETE 등)를 사용
상태 유지 무상태 무상태 연결이 지속적으로 유지됨 무상태
보안 WS-Security 등 표준화된 보안 제공 보안은 구현에 따라 다름 HTTPS 및 사용자 정의 보안 구현 가능 HTTPS 및 OAuth, JWT 등 보안 지원
성능 무겁고 속도가 느림 gRPC 등 고성능 프레임워크 사용 시 성능 우수 데이터 오버헤드가 적고 실시간 데이터 교환에 유리 경량 설계로 일반적으로 빠름
유연성 낮음(엄격한 메시지 구조와 XML 포맷) 함수 호출에 특화, 다양한 데이터 포맷 지원 유연(작은 데이터 프레임 단위로 메시지 전송 가능) 높음(다양한 데이터 형식과 HTTP 메서드 지원)
적합한 사용 사례 높은 보안과 신뢰성을 요구하는 시스템(은행, 금융 서비스 등) 실시간 통신 및 요청-응답 속도가 중요한 시스템 실시간 애플리케이션(채팅, 게임, 주식 시세, 스포츠 점수 업데이트 등) 웹, 모바일 애플리케이션에서의 CRUD 작업
주요 특징 플랫폼 및 언어 독립적, 사용자 정의 헤더 가능, 엄격한 메시지 구조 플랫폼 및 언어 독립적, 투명성 제공(로컬/원격 호출 구분 없음), gRPC에서 높은 성능 제공 서버와 클라이언트의 양방향 통신, 핸드셰이크로 연결 업그레이드 리소스 중심, URL을 통한 접근, HTTP 표준 메서드 활용
설치/설정 비교적 복잡함 설정은 비교적 간단하나, gRPC 같은 고급 프레임워크는 설정이 복잡할 수 있음 간단함, 서버/클라이언트 간 핸드셰이크 필요 간단하고 가벼움

 

사용범위에 따라서도 아래와 같이 API를 구분할 수 있다

 

1. Private API
기업 내부에 있다
비즈니스 내에서 시스템과 데이터를 연결한다

2. Public API
대중에게 공개되며 누구나 사용 가능하다
권한 부여에 대한 기능과 그에 따른 비용이 있을 수 있디
3. Partner API
B2B 파트너십을 지원한다
권한이 부여된 외부 개발자만 접근이 가능하다
4. Complex API
서로 다른 API 를 결합해 복잡한 시스템 요구사항이나 동작을 처리한다

API Gateway란 광범위한 백엔드 서비스를 사용하는 기업 클라이언트를 위한 API 관리도구를 말한다
클라이언트와 백엔드 서비스 간의 요청을 관리하고 조정하는 역할을 하는 서비스이다
일반적으로 모든 API 호출에 적용할 수 있는 사용자 인증, 통계 및 속도 관리와 같은 일반적인 작업을 처리한다

API 게이트웨이의 주요 기능은 다음과 같다
1. 라우팅(Routing)

클라이언트 요청을 적절한 백엔드 서비스로 전달한다
2. 인증 및 권한 부여

토큰을 이용해 요청의 인증과 권한 확인한다

보안 강화를 위해 요청을 필터링하거나 제한한다
3. 로드 밸런싱(Load Balancing)

다수의 백엔드 서버 간 요청을 분산시켜 트래픽을 균등하게 처리한다

고가용성과 확장성을 지원한다
4. 속도 제한 및 트래픽 관리

각 클라이언트 또는 서비스에 대해 호출 빈도를 제한해 서비스 남용을 방지한다
5. 데이터 변환

요청 또는 응답 데이터를 변환해 다양한 클라이언트와 백엔드 간 호환성을 제공힌디
6. 캐싱(Caching)

반복적인 요청에 대해 캐시를 사용해 성능을 향상시키고 백엔드 부하를 줄인다
7. 모니터링 및 로깅

요청의 메트릭(응답 시간, 트래픽 패턴 등)을 수집하고 로깅한다
8. 보안 강화

요청 검사(SQL 인젝션, XSS 방지) 및 데이터 암호화(HTTPS)를 지원한다

 

많은 내용을 정리하다보니 모든 내용을 다 한번에 습득하기는 어려운 것 같다

하지만 오늘 여러 개념을 훑어서 전체적인 맥락을 이해할 수 있었다

다음에 다시 보면 좀 더 잘 이해될 것이라고 생각한다

내일부터는 완전하게 스프링을 공부하게 될 것이다

모르는 것이 많지만 차근차근 내 페이스대로 힘내보자 ~ 화이팅~

 

출처

https://aws.amazon.com/ko/what-is/api/

 

API란 무엇인가요? - 애플리케이션 프로그래밍 인터페이스 설명 - AWS

GraphQL은 API용으로 특별히 개발된 쿼리 언어로서, 클라이언트에게 요청한 데이터만 제공하는 것을 우선으로 합니다. 또한 API를 빠르고 유연하며 개발자 친화적으로 만들도록 설계되었습니다. RES

aws.amazon.com

https://developers.naver.com/docs/common/openapiguide/apiterms.md#api%EC%9D%98-%EA%B8%B0%EB%B3%B8

 

용어 정리 - Open API 가이드

용어 정리 오픈 API와 관련된 용어가 다양한 의미로 사용되고 있어 오픈 API를 처음 접하는 개발자나 기존의 개발자에게 혼란을 주기도 합니다. 여기서는 오픈 API를 사용하는 개발자가 혼란을 느

developers.naver.com