해당글은 '스프링 부트로 배우는 자바 웹 개발'을 읽고 작성 었습니다.
- REST는 웹에서 데이터를 전송하고 처리하는 방법을 정의한 인터페이스
- 분산 네트워크 프로그래밍의 아키텍처 스타일(WWW과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 개발 아키텍처의 한 형식)
- 즉, 자원을 이름으로 구분해 해당 자원의 상태 및 정보들을 주고 받는 모든 것을 의미함.
HTTP URI(Uniform Resource Identified) 을 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE, HEAD)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미.
클라이언트/서버(Client/Server)
👉 클라이언트와 서버가 서로 독립적으로 구분되어야 함.
👉 서버 또는 클라이언트 생성시에 서로간의 의존성 때문에 확장에 문제가 되는 일이 없어야 한다.
Stateless; 상태없음
👉 클라이언트와 서버간의 통신시 상태가 없어야함.
👉 세션이나 쿠키 정보를 별도로 저장하지 않아서 API 서버는 들어오는 요청만 단순히 처리하면 되는 시스템.
👉 그렇기 때문에 서비스의 자유도가 높아지고 서버에서 불필요한 정보를 관리하지 않음으로써 구현이 단순해짐.
레이어드 아키텍쳐(Layered Architecture)
👉 서버와 클라이언트 사이에 게이트웨이, 방화벽, 프록시가 있는 것 처럼 다계층 형태로 레이어를 추가/수정/제거가 가능하고 확장성 또한 가능해, 구조상의 유연성을 둘 수 있다.
캐시(Cache)
👉 클라이언트가 캐시를 통해서 응답을 재사용 할 수 있고 이를 통해 서버의 부하를 낮춰 서버의 성능 또한 향상 시킬 수 있음.
👉 Last-Modified 태그 또는 E-Tag를 이용해 캐싱 구현이 가능.
코드 온 디멘트(Code on demand)
👉 요청이 오면 코드를 준다는 뜻
👉 특정 시점에 서버가 특정 기능을 수행하는 스크립트 또는 플러그인을 클라이언트에게 전달해 해당 기능을 동작하도록 하는 것.
👉 ex) 애플릿, javaScript, 플래쉬
통합 인터페이스
👉 서버와 클라이언트 간의 상호 작용은 일관된 인터페이스들 위에서 이루어져야만 함
👉 HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능(특정 언어나 기술에 종속되지 않음)
👉 그렇다면 통합 인터페이스 규칙은 어떻게 될까? (👇🏽)
REST에 대해 앞에서 배워보았는데, 그렇다면 RESTful 하다는 것이 무엇일까?
우선 RESTful을 배우기전에 API를 알아보자.
데이터와 기능의 집합.
그렇기 때문에 API 이용자는 API를 사용하면 API가 제공하는 데이터를 얻을 수 있고, API가 제공하는 특정 기능을 사용 할 수있다.
API의 구조가 위에서 언급한 REST 요건들에 적합한 경우를 말한다.
RESTful 한 API를 말한다.
추가적으로, 우리가 여태까지 여러가지 기술 아키텍처 스타일을 배워왔던 것 처럼, REST 역시 특정 기술에 종속성을 갖지 않고 분산 처리를 위한 서버를 만들기 위해 반드시 REST 특성을 준수해야 할 의무는 없지만, 서버 개발의 경우 고가용성과 확장성이 요구되므로 REST의 특성을 지켜 개발을 진행하다 보면 더 확장성 있는 서버 애플리케이션을 개발할 수 있으니, 웹개발을 한다면 적어도 REST 특성을 머리속에 넣어두고 활용 할 수 있도록 하는 것이 좋겠다.