[IT]/JAVA

[REST][REST API] REST란 무엇일까?

ee2ee2 2020. 12. 29. 10:42
728x90
반응형

REST / REST API는 평소 자주 듣는 단어이고 잘 알고 있다고 생각했지만, "REST API가 뭐야?" 라는 질문에 답을 쉽게할 수 없었다. 그래서, 좀 더 상세하게 공부하여 기록해보려한다.

 

1. REST 뜻?

REST는 Representational State Transfer의 약자.

자원을 이름(자원의 표현)으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것.

(즉, 자원(Resource)의 표현(Representation)에 의한 상태 전달)

더보기

즉, 자원(Resource)의 표현(Representation)에 의한 상태 전달

 

1) 자원(Resource)의 표현(Representation)

   - 자원 : 해당 소프트웨어가 관리하는 모든 것. (Ex. 문서, 그림, 데이터 ...)

   - 자원의 표현 : 자원을 표현하기 위한 이름 (Ex. DB의 학생 정보가 자원일 때, 'Students'를 자원의 표현으로 정함.)

 

2) 상태(정보) 전달

   - 데이터가 요청되어지는 시점에서 자원의 상태(정보)를 전달

   - JSON 혹은 XML을 통해 데이터를 주고 받는 것이 일반적 


2. REST의 구성요소?

1) 자원(Resource) : URI

- 모든 자원에 고유한 ID 가 존재하고, 이 자원은 Server에 존재함.

- 자원을 구분하는 ID는 HTTP URI. (Ex. /groups/:group_id)

- Client는 URI를 이용해서 자원을 지정하고, 해당 자원의 상태(정보)에 대한 조작을 Server에 요청함.

 

2) 행위(Verb) : HTTP Method

- HTTP 프로토콜의 Method 사용

- HTTP 프로토콜은 POST, GET, PUT, DELETE와 같은 메소드 제공

 

3) 표현(Representation od Reaource)

- Client가 자원의 상태(정보)에 대한 조작을 요청하면 Server는 이에 적절한 응답(Representation)으로 나타냄

- REST에서 하나의 자원은 JSON,XML,TEST 등 여려 형태의 표현으로 나타냄.

- JSON 혹은 XML을 통해 주고 받는 것이 일반적 (요즘은 대부분 JSON)

 


3. REST의 구체적 개념?

HTTP URI(Uniform Resource Identifier)를 통해 자원을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미함.

 

- CRUD Operation

  • Create : 생성(POST)
  • Read : 조회(GET)
  • Update : 수정(PUT)
  • Delete: 삭제(DELETE)
  • Head : header 정보 조회(HEAD) 

4. REST의 특징?

1) Uniform(유니폼 인터페이스)

 - URI로 지정한 Resource에 대한 조작을 통일되고 한정적인 인터페이스로 수행

 

 - HTTP 표준 프로토콜에 따르는 모든 플램폼에서 사용 가능 (언어, 기술에 종속되지 않음)

 

2) Stateless(무상태성)

 - HTTP 프로토콜은 Stateless Protocol이므로 REST 역시 무상태성을 갖음 (상태정보 따로 관리 X)

 

 - Client의 Context를 Server에 저장하지 않음

     1) 세션과 쿠키와 같은 context 정보를 신경쓰지 않아도 되므로 구현 단순

 

 - Server는 각각의 요청을 완전의 별개의 것으로 인식하고 처리

     1) 각 API 서버는 Client의 요청만을 단순 처리

     2) 이전 요청이 다음 요청과 연관 X

     3) 이전 요청이 DB를 수정하여 DB에 의해 바뀌는 것은 허용

     4) Server의 처리방식에 일관성을 부여하고, 부담이 줄어들며 서비스의 자유도 상승   

 

3) Cacheable(캐시 가능)

  - 웹 표준 HTTP 프로토콜을 그대로 사용하므로 웹에서 사용하는 기존의 인프라를 그대로 활용 가능

     1) HTTP가 가진 특징인 캐싱 기능 적용 가능

     2) HTTP 프로토콜 표준에서 사용하는 Last-Modified 태그나 E-Tag를 이용하면 캐싱 구현 가능   

 

 - 대량의 요청을 효율적으로 처리하기 위해 캐시가 요구됨

 

 - 캐시 사용을 통해 응답시간이 빨라지고 REST Server 트랜잭션이 발생하지 않기 때문에 전체 응답시간, 성능, 서버의 자원이용률을 향상할 수 있음

 

4) Self-descriptiveness(자체 표현 구조)

 - REST API 메시지만 봐도 쉽게 이해할 수 있는 자체 표현 구조로 되어있음

 

5) Client-Server 구조

 - 자원이 있는 쪽이 Server, 자원을 요청하는 쪽이 Client

    1) REST Server : API를 제공하고 비즈니스 로직 처리 및 저장을 책임

    2) Client : 사용자 인증이나 context(세션, 로그인 정보)등을 직접 관리하고 책임

 

 - 서로 간 의존성이 약해짐

 

6) Layered System (계층형 구조)

 - Client는 REST API Server만 호출

 

 - REST Server는 다중 계층으로 구성될 수 있음

    1) API Server는 순수 비즈니스 로직을 수행하고 그 앞에 보안, 로드밸런싱, 암호화, 사용자 인증 등을 추가하여 구조상의 유연성을 줄 수 있음

    2) 로드밸런싱, 공유 캐시 등을 통해 확장성과 보안성을 향상시킬 수 있음

 

 - PROXY, GateWay 같은 네트워크 기반의 중간 매체를 사용할 수 있음 


 - 참고 사이트 -

gmlwjd9405.github.io/2018/09/21/rest-and-restful.html