본문 바로가기
Web/Node.js

REST API & RESTful

by 가나닩 2024. 5. 4.

프로그램간에 데이터를 주고받는 통신이 필요할때 통신방법에 있어 특정 규칙을 둔것을 API라고 한다.

수많은 회사의 플랫폼과 프로그램이 각자의 방법으로 API를 설계하게되면 데이터를 주고받기를 원할때마다 그 규칙을 학습하고 내 프로그램에 적용시켜야한다.

 

이러한 현상을 방지하기 위해 여러가지 API 아키텍쳐가 탄생했는데 그중 웹의 특성을 활용하고 HTTP를 활용한다는 특징을 가진 REST가 주로 사용되게 되었다.

 

1. REST

REST는 웹에서 데이터를 전송하고 처리하는 방법을 정의한 인터페이스다.

주로 자원을 이름으로 구분해 자원의 상태를 주고받는것 이라고 표현한다.

 

1-1. REST란?

REST를 좀더 정확히 이해하기 위해서는 몇가지 단어를 알아야한다.

  • HTTP(HyperText Transfer Protocol) : 프로토콜은 기기간의 원활한 통신을 위해 정해진 규칙을 의미한다. HTTP는 하이퍼텍스트를 서버와 클라이언트 사이에 어떻게 통신할지 정해놓은 규칙이다.
    HTTP는 요청과 응답으로 구성되어있다. 예를들어 클라이언트가 특정 링크를 클릭(요청)하면 서버로부터 정보를 받아 해당 사이트로 이동한다(응답).
  • HTTP Method : 클라이언트가 요청을 보낼때 사용하는 유형이다. GET, POST, PUT, DELETE, PATCH 등이 있다. 목적에 맞춰 사용해야한다.
  • HTTP Payload : json이나 xml등의 형태로 데이터를 전달하는것을 의미한다. 자바스크립트의 fetch함수에서 body에 담기는것이 페이로드이다.
  • CRUD : 대부분 컴퓨터의 데이터 처리기능인 Create, Read, Update, Delete를 의미하는것으로 HTTP Method로 정하게된다.
  • URI(Uniform Resource Identifier) : 리소스를 식별하는 데 사용되는 광범위한 용어이다. 익숙하게 알고있는 URL도 URI의 일종이며 이외 URN, URC등이 있다.
  • URL(Uniform Resource Locator) : Locator이므로 리소스를 식별하는 방식중 위치를 나타내는 방식이다. 흔히 사용하는 http로 시작하는 웹주소도 URL이며 이외에도 mailto, tel, ftp 등이 있다. path나 쿼리스트링, 프래그먼트도 URL의 연장선이다.
  • URN(Uniform Resource Name) : Name이므로 리소스를 식별하는 방식중 고유이름을 나타내는 방식이다.대표적으로 책의 고유 번호인 isbn이 있으며 urn:isbn:1234567890 형식으로 표현한다.

용어를 통해 REST를 다시 설명하면 HTTP URI를 이용해 자원을 명시하고(위치), HTTP Method를 통해 자원의 상태를 주고받는다(어떤 일을 할지). 이는 해당 자원에 CRUD를 적용한다고 할수도 있다.

 

1-2. REST의 구성

  1. 자원(의 위치) : 흔히 아는 URL이 이 역할을 한다. HTTP URI라고도 한다. 도메인, 패스, 쿼리스트링 등으로 자원의 위치를 정의한다.
  2. 행위 : HTTP Method를 사용한다. 이는 URL에서 구현되지는 않고 보통 개발단계에서 지정된다.
  3. 표현 : HTTP Payload를 사용한다. json, xml, text, rss 등의 여러가지 형태로 나타낼 수 있으며 HTTP Method에 따라 특정 데이터를 주고받게된다.

1-3. REST 설계 원칙

  • ⭐ Uniform Interface (균일 인터페이스) : 특정 환경에 귀속되지 않고 URI를 통한 일관된 리소스 접근 방식을 사용해야 한다.
  • Server-Client (클라이언트-서버 분리) : 클라이언트와 서버의 역할이 명확히 분리된 구조여야한다. 클라이언트는 사용자 인터페이스에 집중하고 서버는 데이터 관리에 집중할 수 있도록 한다.
  • Stateless (무상태성) : 각 요청은 이전 요청에 대한 정보를 필요로 하지 않아야한다. 즉 모두 독립적이어야 한다. 여러가지 정보를 통합하여 데이터처리를 해야하는경우 웹디자인 자체를 여러 정보를 한꺼번에 보내도록 설계하거나 클라이언트 측에서 단계별로 정보를 저장하여 필요한 정보가 모두 모이면 한꺼번에 보내도록 설계한다.
  • Cacheable (캐시 가능성) : 클라이언트는 응답데이터를 캐시할수 있어야하며 서버의 응답에는 캐시가능여부가 포함되어야 한다. HTTP의 캐시를 그대로 활용할 수 있다.
  • Layered System (계층 구조) : REST 서버는 보안, 암호화 등의 이유로 다중 계층으로 구성될 수 있다. 클라이언트는 요청에 대한 응답이 어느계층에서 온건지 알수 없어야 한다.
  • Code on Demand (optional) : 서버는 클라이언트에게 데이터를 제공할 뿐 아니라 클라이언트가 실행할 수 있는 스크립트도 제공할 수 있다.

 

2. REST API

출처 : AppMaster

 

REST API란 REST 원칙을 사용하는 API를 뜻한다. 여기에는 몇가지 URI 설계 규칙이 있다.

  • 동사보다는 명사, 대문자보다는 소문자 사용
  • 마지막에 슬래시( / ) 포함하지 않기
  • 언더바( _ ) 대신 하이픈( - ) 사용
  • 파일확장자를 포함하지 않기
  • post, delete 등 행위를 포함하지 않기

 

3. RESTful

REST의 설계 원칙이나 URI 규칙을 모두 지키지 않더라도 일정부분 채택하여 사용하면 REST API라고 볼 수 있다.

하지만 RESTful은 REST 설계 원칙과 URI 규칙을 좀더 엄격하게 지킨것을 의미한다.

 

RESTful API라고 하면 REST설계 원칙을 사용하기만 했을 뿐 아니라 원칙들을 엄격하게 지켜 설계되었다는 의미가 된다.