REST API는 Representational State Transfer의 줄임말로서 소프트웨어 아키텍처 스타일 중 한 방식입니다. 이 스타일을 따라서 아키텍쳐를 짜려면 6가지 원리를 지켜야합니다.
1. 클라이언트-서버 (Client-Server)
클라이언트-서버라는 건 리소스를 관리하는 서버가 존재하고 다수의 클라이언트가 리소스를 소비하려고 네트워크를 통해 서버에 접근하는 구조를 의미합니다. 그래서 우리는 클라이언트와 서버를 분리시켜서 개발할 수 있는데요. 이렇게 되면 클라이언트 혹은 서버 컴포넌트의 기능을 업데이트 하더라도 다른 한쪽을 똑같이 바꿀 필요가 없게 됩니다.
여기서 리소스란 REST API가 리턴할 수 있는 모든 것들을 의미합니다. (Ex. JSON, HTML, Data etc.).
2. 상태가 없음 (Stateless)
클라이언트가 서버에 요청을 보낼 때 이전 요청의 영향을 받지 않음을 의미합니다. 이러한 이유 때문에 클라이언트 어플리케이션은 sessiont state을 완전히 유지할 수 있습니다.
3. 캐시 처리 가능 (Cacheable)
서버에서 리소스를 리턴할 때 캐시가 가능한지 아닌지 명시할 수 있어야합니다. 이런식으로 캐시를 사용할 수 있는 이유는 REST가 웹에서 사용하는 기존 인프라를 사용할 수 있기 때문이죠. 그래서 HTTP가 가진 캐싱 기능이 적용 가능합니다.
4. 일관적인 인터페이스 (Uniform Interface)
시스템 또는 어플리케이션 리소스에 접근할 때 인터페이스가 일관적이어야 합니다. 이 말은 즉 URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 스타일을 이야기 합니다.
5. 계층화 시스템 (Layered System)
클라이언트는 서버에 직접 연결되어있는지 아니면 중간에 다른 곳들을 거쳤는지 알 수가 없습니다. 이런 점을 이용해서 중간 서버로 로드 밸런싱, 암호화 등을 추가해서 시스템 구성에 유연성을 추가할 수 있습니다.
6. 코드-온-디맨드 (Code-On-Demand (Option))
자바 애플릿이나 자바스크립트 형태의 코드를 다운 받아서 클라이언트 기능을 확장 시킬 수가 있습니다. 다운로드된 코드들은 pre-implemented가 필요한 기능들의 수를 줄여 줌으로서 클라이언트를 단순화합니다.
References
REST API 제대로 알고 사용하기 https://meetup.toast.com/posts/92
What is REST https://restfulapi.net/
React.js, 스프링 부트, AWS로 배우는 웹 개발 101