-
[Spring boot] REST, REST API, RESTful프로젝트/아카이뷰 2024. 1. 22. 17:31
REST, REST API, RESTFul 왜 궁금했을까❓
API를 통해서 단순히 자원을 교환하는 것을 REST API 서버라고 알고 있었다. 알고보니 규칙이라는 것이 존재했고 그 규칙을 만족해야 REST API 서버라고 부른다는 것을 알았다. 이에 따라 REST의 정의와 규칙에 대해서 깊게 알아보고 ArchiVIEW 프로젝트에 적용해 보려고 한다.
REST란?
Representational State Transfer의 약자로 자원을 이름으로 구분하여 자원의 정보를 주고받는 것을 의미하여 자원의 표현에 의한 상태 전달을 뜻한다.
1. 자원(resource)의 표현(representation)
- 자원 - 소프트웨어가 관리하는 모든 것
- ex) 데이터, 그림, 문서 등
- 자원의 표현 - 위 자원들을 표현하기 위한 이름
- ex) ArchiVIEW에서는 질문이 DB에서 question이므로 'questions'라고 자원의 표현으로 지정
2. 상태 전달
- 데이터가 요청되는 시점에 자원의 상태를 전달
- 주로 JSON 또는 XML을 통해서 데이터를 주고 받는다.
3. 개념
HTTP URI를 통해 자원을 명시하고 HTTP Method를 통해 해당 자원에 대한 연산 방법을 지정하며 요청을 위한 자원은 특정한 형태로 표현
- 자원(Resource) - URI
- Server에 자원의 고유한 ID가 존재하여 '/users/:userId'처럼 명시
- 행위(Verb) - Method
- GET - 정보 요청으로 URI가 가진 정보 검색에 사용
- POST - 정보 생성으로 클라이언트가 서버로 정보 전달
- PUT - 정보 수정으로 데이터 전체를 바꿀 때 사용
- PATCH - 정보 수정으로 데이터 일부를 바꿀 때 사용
- DELETE - 정보 삭제로 데이터를 삭제할 때 사용
- 표현(Representation of Resouce)
- 일반적으로 JSON, XML 형식으로 주고 받음
4. 특징
- Server-Client 구조
- 자원이 존재하는 곳이 Server, 자원을 요청하는 곳이 Client
- Server는 API를 제공하고 주로 비즈니스 로직을 처리
- Client는 사용자 인증 정보를 관리
- Stateless
- HTTP 프로토콜은 Stateless Protocol이므로 REST도 Stateless
- Cacheable
- HTTP 프로토콜을 사용하여 캐싱 기능 사용 가능
- 캐시 사용을 통해 REST Server 트랜잭션이 발생하지 않아 응답시간, 성능, 서버의 자원 이용률을 향상
- Layered System
- REST Server는 다중 계층으로 구성 가능
- API Server는 단순 비즈니스 로직을 수행하고 그 앞단에 보안, 로드밸런싱, 암호화, 사용자 인증 등을 추가 가능
- Code-On-Demand
- Server로부터 스크립트를 받아 Client에서 실행
- Uniform Interface
- URI로 지정한 Resouce에 대한 조작을 통일하고 한정적인 인터페이스로 수행
- HTTP는 모든 플랫폼에서 사용 가능하여 특정 언어나 기술에 종속되지 않음
REST API란?
REST를 기반으로 서비스 API를 구현한 것
API란?
Application Programming Interface의 약자로 서로 다른 유형의 소프트웨어들이 상호 작용하기 위해 정해놓은 매개체나 규칙
웹 API
- 웹 API는 인터넷을 통해 다른 웹 서비스나 어플리케이션과 통신하기 위해 설계된 API로 보통 HTTP를 사용하여 정보 교환이 이뤄진다.
- RESTful API, SOAP API 등과 같이 다양한 형태의 API가 존재하며 이를 통해 CRUD를 수행하고 모든 요청과 응답을 표준화 하는 역할을 한다.
REST API 디자인 가이드
- URI는 정보의 자원을 표현
- 자원은 동사보다는 명사를 사용
- 대문자보다는 소문자 사용
- 도큐먼트 이름은 단수 명사
- 컬렉션의 이름은 복수 명사
- 스토어의 이름은 복수 명사
- ex) /users, /replies, /questions
- 자원에 대한 행위는 HTTP Method로 표현
- URI에 행위가 포함하면 안됨
REST API 설계 기본 규칙
- 슬래시 구분자(/)는 계층 관계를 나타내는데 사용
- URI 마지막 문자로 슬래시 구분자(/)를 사용하지 않음
- 하이픈(-)은 URI 가독성을 높이는데 사용
- 밑줄(_)은 URI에 사용하지 않음
- 파일 확장자는 URI에 포함하지 않음
- 리소스간에 연관 관계가 있는 경우 '/리소스명/리소스 ID/관계가 있는 리소스명' 형태로 사용
RESTful이란?
Restful은 REST의 설계 규칙을 잘 지켜서 설계된 API를 RESTful한 API라고 한다. 즉 REST의 원리를 잘 지키는 시스템을 RESTful이라고 지칭한다.
ArchiVIEW 프로젝트 적용
'프로젝트 > 아카이뷰' 카테고리의 다른 글
[Spring boot] BooleanBuilder / BooleanExpression (0) 2024.01.24 [Spring boot] Query DSL 동적 쿼리 (0) 2024.01.23 [Spring boot] JPA N + 1 (0) 2024.01.21 [Spring boot] Query DSL (0) 2024.01.20 [Spring boot] JPA save() & Dirty Checking (0) 2024.01.19 - 자원 - 소프트웨어가 관리하는 모든 것