순서
1. RESTful이란
2. RESTful원칙
3. RESTapi의 아키텍처
4. REST의 목표
유튜브 [10분 테코톡] 🐯 심바의 RESTful 의 내용
'RESTful 하지 못하다', RESTful 이 뭘까?
먼저 RESTful이라는 단어를 알아보면, REST
+ ful
, 'REST스러운' 이라는 뜻이된다
그러면 REST, Representational State Transfer가 뭔지 알아보면 , MDN에서는 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처 라고 정의되어있다
또 MDN의 참조 사이트에서는 네트워크 리소스를 정의하고 처리하는 방법을 설명하는 일련의 원칙을 기반으로 하는 아키텍쳐 스타일이라 정의되어 있다
네트워크 리소스를 정의하고 처리하는 방법 = 예를들면 클라이언트와 서버가 데이터를 주고 받는 방식
이런 방식에 대해 정리한 원칙들이 있고, 그 원칙을 기반으로 한 아키텍처 스타일을 REST라고 한다
REST에 대한 원칙은 2000년도에 로이 필딩의 박사학위 논문에서 최초로 소개되었다
로이 필딩(Roy T.Fielding)은 HTTP의 주요 저자 중 한 사람, HTTP의 장점을 최대한 활용할 수 있는 아키텍처로 REST를 발표했다고 한다
즉 REST는 HTTP를 잘 활용하기 위한 원칙이라 할 수도 있다
즉 이 REST에 대한 원칙을 준수했을 때 RESTful하다라고 할 수 있다
영상에서는 다루지 않지만 내가 궁금해서 찾아보자면('내가 궁금해서'찾아봤기 때문에 이해하지 못하는 부분이 있어도 넘어갑니다, 궁금한 점은 나중에 다시 다뤄보겠습니다)
위키백과에서는 6가지 제한 조건에는
인터페이스 일관성
일관적인 인터페이스로 분리되어야 한다🤔
무상태(Stateless)
각 요청 간 클라이언트의 콘텍스트가 서버에 저장되어서는 안 된다
캐시 처리 기능(Cacheable)
WWW에서와 같이 클라이언트는 응답을 캐싱할 수 있어야 한다
계층화(Layered System)
클라이언트는 보통 대상 서버에 직접 연결되었는지, 또는 중간 서버를 통해 연결되었는지를 알 수 없다, 중간 서버는 로드 밸런싱기능이나 공유 캐시 기능을 제공함으로써 시스템 규모 확장성을 향상시키는 데 유용하다
Code on demand(option)
자바 애플릿이나 자바스크립트의 제공을 통해 서버가 클라이언트가 시행시킬 수 있는 로직을 전송하여 기능을 확장시킬 수 있어야 한다
클라이언트/서버 구조
아키텍처를 단순화하고 작은 단위로 분리(decouple)해서 클라이언트-서버의 각 파트가 독립적으로 개선될 수 있도록 해준다
앞에서 설명한 것 처럼 REST는 특정 기술이 아닌 아키텍처 스타일이다, 일반적으로 웹 개발을 하면서 REST아키텍처 스타일을 참고해 설계한 API을 RESTful하게 설계된, REST-style의 API라고 부른다
그래서 일반적으로 REST API는 어떤 구조로 만들어 지고, 어떤 특징을 가지는지를 여영상에서는 중심적으로 다룬다
다시 REST라는 단어를 보면, REpresentational State Transfer, 직역하면 자원(리소스)의 표현에 의한 상태(정보)전달 이라는 뜻이다
요기서 자원의 표현은 REST의 가장 큰 특징 중 하나이다
우리는 이처럼 URI만 보고도 정보들을 대충 예측할 수 있다
이처럼 리소스들을 URI에 표현해, 주고받을 정보에 대해 어느정도 예측할 수 있는 것이다
위와같은 테이블이 있다고 할 때
테이블 전체에 해당하는 부분을 Collection
행 하나의 부분 또는 객체를 Document라고 한다
Collection은 일반적으로 객체의 집합이기 때문에 복수명사,
Document는 이 집합들 중 객체를 구분할 수 있는 값(일반적으론 id를 많이 사용)을 사용한다
즉 URI는 이런 Collection과 Document의 조합으로 이루어져 있다
주의할 점은 URI에는 동사를 사용하지 않는 것이다
일반적으로 데이터 처리에는 네 가지 방법이 있다
Create, Read, Update, Delete 이 네가지를 합쳐 CRUD라고 한다
HTTP Method에서는 이러한 기능을 위해 POST, GET, PUT or PATCH, DELETE를 한다
예시를 통해 하나하나 살펴보자면
조회를 하기 위해서는 URI에 조회하고자 하는 Collection과 Document를 명시해준다
일반적으로 Collection만 명시할 경우 해당 Collection에 대한 전체정보를, Document까지 명시할 경우 Document에 대한 정보를 조회할 수 있다
생성 할 때는 어떤 객체를 생서할 것인지에 대한 내용을 body에 담아 표현하게 된다
그래서 이는 courses/front/coaches
에 codingbotpark
을 생성한다 가 된다
수정할 때도 어떤 객체를 수정할 것인지에 대한 내용이 필요하고 마찬가지로 body에 담아 표현하게 된다
그ㅐ서 이는 courses/front/coaches
의 id : 1
을 codingbot
으로 수정한다 가 된다
삭제를 하기 위해서는 Collection에서 삭제하고자 하는 Document만 명시해두면 된다
하지만 이런 네가지 방법만으로, URI만으로는 모든 것을 표현하는데는 어려움이 있다
REST는 아키텍쳐 스타일이다, 그래서 REST의 모든 원칙을 지키지 않는다고 해서 API가 틀린 것은 아니다
REST에는 명확한 원칙이 있고, 이를 준수하면 좋겠지만 그게 쉽지 않다는 말이다
REST는 HTTP를 잘 활용하기 위한 아키텍처로, URI와 HTTP Method를 사용해 자원과 행위를 표현한다, 그래서 API의미를 표현, 의미 파악도 쉽다
영상에는 없었지만 목표를 보면 조금 더 이해를 도울거라 생각해서 조사한 REST의 주요한 목표에는
예전에 kakaoMap API를 사용할 때 REST API라는 단어를 보고 뭔지 궁금했지만 범접할 수 없다고 느껴져서 모르고 있었는데, 만들어진 이유 등을 알아보니 '좋은것' 이라는걸 알게됐고ㅋㅋ 사용해보고 싶다는 생각이 들었다
RESTful원칙, REST API의 구조 등과 같이 익숙하지 않은 것에 대해 알아가려고 하니 조금 힘들었던 부분이 있었고, 이해가 제대로 안 됐을 수 있지만 용어들에 조금이나마 익숙해질 수 있었던 것 같다
URL은 알고 있었지만 URI라는 단어는 놀랍게도 처음 들어봤다... 이렇게 개념적인 부분을 공부할 때마다 몰랐던 단어들을 알 수 있어서 좋다