Programming/Web

REST API

주죵 2021. 6. 20. 19:29
728x90
반응형

게을러서 맨날 포스팅해야지 생각만하고 안하던 포스팅 드디어 다시 시작합니다...

사실 포스팅은 나중에 복습할때 올리고 공부중인 강의만 먼저 쭉 들으려했으나, 듣다보니 앞부분이 기억이 1도안나는 사태 발생해서 쓰는것이기두함;ㅎㅋ

 

REST 란

REST(Representational State Transfer)가 뭐냐.. 직역하자면  '자원의 상태전달'을 하는 네트워크 아키텍처 라고함

이에 해당하는 6가지 아키텍처 조건이 있는데 이 6가지를 잘 지켰냐를 기준으로 REST API다! 혹은 RESTFUL하다! 라고 판단한다.

1. Client, Server

클라이언트와 서버가 서로 독립적으로 분리가 되어있는가!!

이건 머 딱히 추가적인 설명이 필요가 없을것같다. 안정적인 사용이나 운영측면에서 당연한 이야기이지 않을까나?? 클라이언트쪽에서 멀 이상하게 한다고 서버에 크리티컬한 영향이 가면 안될테니!

2. Stateless

요청에 대해서 클라이언트의 상태를 서버에 저장하지 않아야한다!!

실생활에 비유하면 다음과 비슷한거라고하더라.

식당가서 국밥하나주세요!! 하고 아 콜라도 하나 추가해주세요! 라고 하면 종업원분들은 내가 국밥+콜라를 시켰단걸 다 알고있다. 하지만 stateless를 위해선 이러면 안된다는거. 즉 내가 클라이언트고 주문받는 종업원님이 서버라면, 내가 국밥하나주세요!! 한 이후에 콜라도주세요! 할때 국밥달라고한게 서버쪽에 저장되지 않고 독립적으로 따로 처리된다는것!

3. Cache

클라이언트는 서버의 응답을 캐싱(임시저장) 할 수 있어야한다!

클라이언트가 캐시를 통해 응답을 재사용할 수 있어야하며 이를 통해 서버의 부하를 낮춘다.

 

4. 계층화

서버와 클라이언트 사이에 다양한 계층형태 구성이 가능해야하며 확장성을 지녀야함!

좀더 자세히 말하자면 중간에 방화벽이나 proxy등 다양한 계층형태 구성이 가능해야한다는 것이다.

 

5. 인터페이스 일관성

인터페이스의 일관성을 지키고, 아키텍처를 단순화시켜 작은단위로 분리해 클라이언트, 서버가 독립적으로 개선될 수 있어야한다. 즉 클라이언트가 바뀌어도 서버에 지장 X, 서버가 바뀌어도 클라이언트에 지장 X여야함!

1) 자원의 식별

웹기반 REST에서는 리소스 접근에 URI를 사용함.

2) 메시지를 통한 리소스 조작

Web에서는 주로 HTML, XML, JSON, TEXT등으로 데이터를 전달한다.

이때 리소스 조작을 위해 데이터 전체를 전달하지 않고 메시지로 전달한다.

3) 자기서술적 메시지

요청하는 데이터가 어떻게 처리되어져야 하는지 충분한 정보를 포함할수 있어야함!

보통 이러한 정보들이 HTTP 기반 REST에선 HTTP 메소드와 헤더정보, URI에 포함되는 정보로 표현할 수 있다.

4) 애플리케이션 상태에 대한 엔진으로써 하이퍼미디어

클라이언트의 요청에 대한 데이터만 응답해주는것이 아닌, 관련 리소스에 대한 링크정보도 같이 포함되어야 함!

(하지만 실제로 이러한 경우는 불필요한 경우가 많으므로 필수적이진 않다고봄)

6. Code on Demand

자바애플릿, 자바스크립트 등 특정 기능을 서버로부터 클라이언트가 전달받아 코드를 실행할 수 있어야한다. 

 

 

흠.... 그렇다고하는데 아직 뭔소리인지 잘 와닿지는 않는다. 몇개는 당연한 소리같고 몇개는 뭔소리인가 싶다. 아직 부족함이 많구나...... 5번에 세부항목들을이라는 저것 2, 3번 잘아는 고수님들 저에게 자비를 베풀어주세용..

728x90

'Programming > Web' 카테고리의 다른 글

HTTP  (0) 2021.06.20
[Java Web] Servlet이 뭐냐..?  (0) 2021.02.06
웹 애플리케이션  (0) 2021.01.31
웹프로그래밍의 기본  (2) 2021.01.19