Bin's Blog

[네트워크] REST API란?(1) 구성요소, 특징 본문

CS

[네트워크] REST API란?(1) 구성요소, 특징

hotIce 2023. 7. 22. 10:02
728x90
❗️요즘 취업 공고를 보면 적지 않게 RESTful API에 대한 이해도를 요구하는 회사들을 볼 수 있다.

 

 

 

 

 

 

 

 

최근 프로젝트를 하면서도 RESTful API에 대해서 얘기가 나왔다. 솔직히 RESTful API가 뭔지 모른다. 그래서 그것이 알고싶다. 오늘은 제대로 짚고 넘어가자. 


🤔 REST API란?

📖 먼저, API가 뭔지 살펴보자!

👉 API(Application Programming Interface)는 컴퓨터 프로그램들이 서로 대화할 수 있도록 도와주는 역할을 한다. API는 프로그램들이 서로 정보를 요청하고 응답할 수 있게 해주는데, 이것은 마치 레스토랑에서 내가 점원이나, 키오스크를 통해 음식을 주문하면 요리사가 음식을 만들어서 우리는 음식을 먹는다 이러한 과정과 비슷하다. 

 

📚 REST API

👉 REST(Representational State Transfer)의 약자로 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것을 의미한다.

👉 일종의 약속이다. 서버와 클라이언트가 어떤 방식으로 통신할지에 대해 정의한 것이다. 정보를 어떻게 요청하고 응답할 것인지에 대한 규칙을 담고 있다. 

 

📝 3단계로 설명하자면

1️⃣ HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고,

2️⃣ HTTP Method(생성-POST, 조회-GET,  전체 업데이트-PUT, 일부분 업데이트-PATCH, 삭제-DELETE)를 통해

3️⃣ 해당 자원(URI)에 대한 CRUD Operation을 적용하는 것을 의미한다.

 

CRUD Operation이란?
CRUD는 대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능인 Create(생성), Read(읽기), Update(갱신), DELETE(삭제)를 묶어서 일컫는 말로 Rest에서 CRUD operation 동작 예시는 다음과 같다. 
Create: 데이터 생성(POST)
Read: 데이터 조회(GET)
Update: 데이터 수정(PUT, PATCH)
Delete: 데이터 삭제(DELETE)

 

1️⃣ REST 구성요소

👉 자원(Resource) : HTTP URI를 통해 식별된다. 예를 들어 온라인 쇼핑몰에서 각 제품은 자원으로 간주되고 각각 고유한 URI로 식별된다. 

👉 자원에 대한 행위(verb) : 위에서 언급한 HTTP Method를 이용하여 자원에 대한 다양한 작업을 수행한다. 

👉 자원의 표현에 의한 상태 전달(Representation): 클라이언트가 자원의 상태(정보)를 요청하면, 서버는 이를 적절한 형태로 전달한다. 이렇게 전달되는 정보의 형태를 표현이라고 한다. 주로 JSON, XML를 통해 데이터를 주고 받는다. 

 

2️⃣ REST 특징

👉 Server-Client(서버-클라이언트 구조)

1. 자원이 있는 쪽이 서버, 자원을 요청하는 쪽이 클라이언트가 된다. 
- REST Server: API를 제공하고 비즈니스 로직 처리 및 저장을 책임진다.
- Client : 사용자 인증이나 context(세션, 로그인 정보) 등을 직접 관리하고 책임진다.
2. 서로 간 의존성이 줄어든다.

 

👉 Stateless(무상태)

1. HTTP 프로토콜은 Stateless Protocol이므로 REST 역시 무상태성을 갖는다.
2. 클라이언트의 context를 서버에 저장하지 않는다.
- 즉, 세션과 쿠키와 같은 context 정보를 신경쓰지 않아도 되므로 구현이 단순해진다.
3. 서버는 각각의 요청을 완전히 별개의 것으로 인식하고 처리한다.
- 각 API서버는 클라이언트의 요청만을 단순 처리한다. 

 

👉 Cacheable(캐시 처리 가능)

1. 웹에서 사용하는 기존 인프라를 그대로 활용할 수 있기 때문에 캐시 사용을 통해 응답시간이 빨라지고 REST 서버 transaction이 발생하지 않기 때문에, 전체 응답시간, 성능, 서버의 자원 이용률을 향상시킬 수 있다. 

 

👉 Layered System(계층화)

1. 클라이언트는 REST API 서버만 호출한다.
2. REST Server는 다중 계층으로 구성될 수 있다.
-보안, 로드밸런싱, 암호화, 사용자 인증등을 추가하여 구조상의 유연성을 줄 수 있다. 

 

👉 Uniform Interface(인터페이스 일관성)

1. HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능하다.
2. URI로 지정한 자원에 대한 조작을 통일되고 한정적인 인터페이스로 수행한다.

 

👉 Code-On-Demand(optional)

1. 서버로부터 스크립트를 받아서 클라이언트에서 실행한다.
2. 반드시 충족할 필요는 없다.

 

 

728x90