본문 바로가기
IT지식/Web, Server

[Web] API, REST API에 대해 공부해보자

by five-sun 2023. 11. 3.
728x90

REST API를 알아보기 이전에 API란 무엇인가?

API(Application Programming Interface, 응용 프로그램 프로그래밍 인터페이스)는 응용 프로그램에서 사용할 수 있도록, 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻합니다.

 

그렇다면 주로 전산이나 컴퓨터에서 이야기하는 인터페이스란 무엇인가?

인터페이스(Interface)는 2개 이상의 장치나 소프트웨어에서 정보나 신호를 주고받을 때, 그 사이를 연결하는 연결장치나 경계면 또는 연결하는 경계에서 상호 접속하기 위한 하드웨어, 소프트웨어, 조건, 규약 등을 가리킵니다.

 

UI를 떠올리면 이해가 쉽습니다.

UI(User Interface)가 사람과 시스템, 컴퓨터 프로그램 등 사이에서 의사 소통을 할 수 있도록 일시적 또는 영구적인 접근을 돕는 매개체이고 API는 프로그램과 또 다른 프로그램을 연결해주는 매개체입니다.

 

API를 사용하면 구현 방식을 알지 못하는 제품 또는 서비스와도 통신할 수 있으며 개발을 간소화하여 시간과 비용을 절약할 수 있습니다.

 

 

API의 역할은 무엇인가?

  • 서버와 데이터베이스에 대한 출입구 역할
  • 애플리케이션과 기기가 원활하게 통신할 수 있도록 돕는 역할
  • 모든 접속을 표준화하여 기계/운영체제 등과 상관없이 누구나 동일한 액세스를 얻을 수 있는 역할

 

API의 유형을 접근 범위에 따라 나누어 볼 수 있습니다.

  • private API: 회사 개발자가 자체 제품 혹은 서비스를 개선하기 위해 발행한 API
  • public API: 누구나 제한 없이 사용할 수 있는 API 
  • partner API: 공유에 동의하는 특정인만 사용할 수 있는 API

 

다른 기준으로 API를 나눈다면 다음과 같습니다.

  • 웹 API: REST API(HTTP기반), SOAP API(XML기반)
  • 라이브러리 API: 프로그래밍 언어 라이브러리 API(JAVA API, Python API 등), 소프트웨어 라이브러리 API
  • 운영체제 API
  • 데이터베이스 API
  • 하드웨어 API: 그래픽스 API(Direct X, OpenGL), 하드웨어 접근 API 

API의 동작을 일반적인 웹 API의 예시로 살펴보면

  1. 클라이언트 응용프로그램은 웹 API 요청을 전송한다.
  2. 해당 요청이 API 서버로 전송된다.
  3. API 서버는 요청을 받아 처리 시작한다.
  4. API 서버가 데이터베이스 혹은 다른 서비스와 상호 작용할 필요가 있는 경우, 해당 요청을 전달한다.
  5. API 서버가 요청을 처리하면, 클라이언트에게 반환되는 데이터와 함께 부가적인 정보를 담아 응답을 생성한다.
  6. 생성된 응답을 클라이언트로 전송한다.
  7. 클라이언트 응용 프로그램은 응답을 수신하고 필요한 작업을 수행한다.

일반적으로 위와 같은 동작을 수행합니다.

 

 

 

 

REST API를 알아보기 이전에 왜? REST방식을 선호하는 지를 알아야 합니다.

 

REST 방식을 선호하는 이유?

 HTTP 프로토콜을 기반으로 하며 데이터는 주로 JSON 또는 XML로 전송되어 간단하고 가벼워, 구현과 이해가 쉽고 HTTP 메서드 및 상태 코드와 같은 웹 표준을 활용할 수 있습니다. REST 서비스는 요청 간에 상태를 저장하지 않아 각 요청은 모든 정보를 포함하고, 서로 독립적이며 분산형 시스템에서 확장성을 제공합니다.

 

반면, SOAP 및 다른 아키텍처를 사용하지 않는 이유?

 XML 기반 프로토콜이라던지 REST에 비해 복잡하고 상대적으로 무거워서 개말 및 디버깅이 어려울 수 있습니다. JSON형식을 사용하는 REST방식에 비해 성능 면에서도 느릴 수 있고 플랫폼 호환성 또한 떨어지는 경우가 많습니다.

 

결국, HTTP 프로토콜 기반이기 때문에 따라오는 장점들 떄문에 REST를 선호하는 것으로 보입니다.

 

HTTP란?

HyperText Transfer Protocol이라는 용어의 약자로서 월드 와이드 웹의 토대이며 하이퍼텍스트 링크를 사용하여 웹 페이지를 로드하는데 사용됩니다. HTTP는 네트워크 장치 간에 정보를 전송하도록 설계된 애플리케이션 계층 프로토콜입니다.

 

 

 

일반적인 HTTP 요청은

  • HTTP 버전 유형
  • URL
  • HTTP 메서드
  • HTTP 요청 헤더
  • 선택 사항인 HTTP 본문

을 포함하고 있습니다.

 

 

그렇다면, REST API란 무엇인가?

REST API는 REST 아키텍처 스타일의 제약 조건을 준수하고 RESTful 웹 서비스와 상호 작용할 수 있도록 하는 어플리케이션 프로그래밍 인터페이스입니다.

 

 

 

REST란 무엇인가?

REST는 Representational State Transfer라는 용어의 약자로서 2000년도에 로이필딩의 박사학위 논문에서 최초로 소개되었습니다. 웹의 장점을 최대한 활용할 수 있는 아키텍처로써 REST를 발표했다고 합니다.

REST는 프로토콜이나 표준이 아닌 아키텍처 제약 조건입니다. 

 

REST의 장점은 무엇인가?

  • HTTP 프로토콜의 인프라를 그대로 사용하므로 REST API 사용을 위한 별도의 인프라를 구축할 필요가 없습니다.
  • HTTP 프로토콜 표준을 최대한 활용하여 여러 추가적인 장점을 가져갈 수 있습니다.
  • HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용 가능합니다.
  • Hypermedia API의 기본을 충실히 지키면서 범용성을 보장합니다. (RESTful API 디자인의 한 형태, HATEOAS라는 원칙을 따름)
  • REST API 메시지가 의도하는 바를 명확하게 나타내므로 의도하는 바를 쉽게 파악할 수 있습니다.
  • 여러가지 서비스 디자인에서 생길 수 있는 문제를 최소화합니다.
  • 서버와 클라이언트의 역할을 명확하게 분리합니다.

REST의 단점은 무엇인가?

  • HTTP Method 형태가 제한적입니다.
  • 브라우저를 통해 테스트할 일이 많은 서비스라면 쉽게 고칠 수 있는 URL보다 Header 정보의 값을 처리해야 하므로 전문성이 요구됩니다.
  • 구형 브라우저에서 호환이 되지 않아 지원해주지 못하는 동작들이 많습니다.(EX: 익스플로러)

 

REST API의 구성은 어떻게 될까?

  • 자원을 명시하는 HTTP URI
  • 자원에 대한 행위를 나타내는 HTTP METHOD
  • 자원에 대한 행위의 내용을 나타내는 HTTP Message Payload

 

REST의 Method ?

Method 의미
POST Create
GET Select
PUT Update
DELETE Delete

 

REST API를 올바르게 설계하기 위해서 지켜야하는 몇가지의 규칙들이 있습니다.

  • URI는 동사보다는 명사를, 대문자보다는 소문자를 사용하여야 한다.
  • 마지막에 슬래시 (/)를 포함하지 않는다.
  • 언더바 대신 하이폰을 사용한다.
  • 파일확장자는 URI에 포함하지 않는다.
  • 행위를 포함하지 않는다.

 

API가 RESTful로 간주되려면 따라야할 특징들은 무엇인가?

1. Uniform (유니폼 인터페이스) : 정보가 표준 형식으로 전송되도록 하기 위한 구성 요소 간 통합 인터페이스를 말합니다.

  • 요청된 리소스가 식별 가능하며 클라이언트에 전송된 표현과 분리되어야 합니다.
  • 수신한 충분한 정보가 포함된 표현을 통해 클라이언트가 리소스를 조작할 수 있어야 합니다.
  • 클라이언트가 반환되는 자기 기술적 메시지에 클라이언트가 정보를 어떻게 처리해야 할지 설명하는 정보가 충분해야 합니다.
  • 하이퍼텍스트/하이퍼미디어를 사용할 수 있어야합니다.

2. Stateless (무상태성) : 작업을 위한 상태정보를 따로 저장하고 관리하지 않고 API 서버는 들어오는 요청만 단순히 처리하기 때문에 서비스의 자유도가 높아지고 서버에서 불필요한 정보를 관리하지 않기에 구현이 단순해집니다.

 

3. Cacheable (캐시 가능) : REST의 가장 큰 특징 중 하나는 HTTP라는 기본 웹 표준을 그대로 사용하기 떄문에 HTTP가 가진 캐싱 기능이 적용 가능해야 합니다.

 

4. Self-descriptiveness (자체 표현 구조) : REST API 메시지만 보고도 이를 쉽게 이해 할 수 있는 자체 표현 구조로 되어 있어야 합니다.

 

5. Client - Server 구조 : REST 서버는 API 제공, 클라이언트는 사용자 인증이나 컨텍스트(세션, 로그인 정보)등을 직접 관리하는 구조로 역할이 확실히 구분되어야 합니다. 따라서 클라이언트와 서버에서 개발해야 할 내용이 명확해지고 서로간 의존성이 줄어드는 장점이 있습니다.

 

6. 계층형 구조 : REST 서버는 다중 계층으로 구성될 수 있으며 보안, 로드 밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘 수 있고 PROXY, 게이트웨이 같은 네트워크 기반의 중간매체를 사용할 수 있게 합니다.

 

RESTful 웹 서비스는 응답을 보내기 전에 요청을 인증해야 하는데 4가지의 일반적인 인증 방법이 있습니다.

  • HTTP 인증 - 기본 인증: 클라이언트는 요청 헤더에 사용자 이름과 암호를 넣어 base64 인코딩하여 전송합니다.
  • HTTP 인증 - 전달자 인증: 클라이언트는 리소스에 액세스하기 위해 요청 헤더에 토큰을 넣어 전송합니다.
  • API 키: 서버에서 고유하게 생성된 값을 최초 클라이언트에 할당하고 고유한 API 키를 사용하여 검증합니다. 네트워크 도난에 취약하기 때문에 안정성이 떨어집니다.
  • OAuth: 안전한 로그인 액세스를 보장하기 위해 암호화 토큰을 결합한 후, 먼저 암호를 요청한 다음 추가 토큰을 요청하여 검증하는 방식입니다.

 

RESTful API를 사용하면 어떤 이점이 있는가?

REST의 장점을 살려서 확장성, 유연성, 독립성이라는 이점이 있습니다.

 

 

참고 자료:

 

728x90