hyeonga_code
PreProject_02_REST 본문
REST Representational State Transfer
하나의 URI가 고유한 리소스를 처리하는 공통 방식입니다.
REST 방식으로 제공되는 API를 REST API(RESTful API)라 하며 OpenAPI에 많이 사용됩니다.
@RestController
Spring 3 버전에서 @ResponseBody 어노테이션을 지원하며 REST 방식의 데이터 처리를 지원했습니다.
Spring 4 버전에서 @RestController 어노테이션을 이용하여 REST 방식의 데이터 처리를 지원합니다.
@RestController 어노테이션이 적용된 클래스는 @ResponseBody 가 기본적으로 포함되어 있어 메소드의 반환값을 HTTP 응답 본문(Body)에서 사용할 수 있습니다.
JSON이나 XML 형식의 데이터를 반환하여 클라리언트와 서버 간의 통신에 사용됩니다.
RESTful API 형식을 사용하지 않는 경우
1. 일관성 및 예측 가능성의 결여
자원 지향 아키텍처를 기반으로 하는 RESTful API는 URI가 특정 자원을 나타내고 HTTP 메소드가 그 자원에 대한 행동을 명확하게 정의합니다.
API 사용자는 각 URL과 HTTP 메소드의 의미를 추측하거나 매번 문서를 참조해야 할 수 있습니다.
2. 호환성 문제
많은 개발 도구와 라이브러리가 RESTful 원칙에 기반하여 최적화되어 있습니다.
3. 확장성 및 유지 관리
HTTP 메소드
서버에 다양한 유형의 요청을 정의합니다.
각 메소드는 다른 목적을 가집니다.
1. GET
지정된 리소스의 표현을 요청합니다.
데이터를 검색하는 데 사용되며 데이터를 변경하지 않습니다.
같은 요청을 여러 번 수행해도 결과가 동일합니다.
2. POST
서버에 데이터를 전송하여 리소스를 생성합니다.
데이터를 서버로 보내 새로운 리소스를 생성하거나 데이터를 처리하기 위해 사용됩니다.
같은 요청을 여러 번 보내면 동일한 요청이 여러 번 처리될 수 있습니다.
3. PUT
지정된 리소스를 업데이트하거나 지정된 URI에 리소스가 존재하지 않는 경우 해당 리소스를 생성합니다.
전체 리소스를 대체하는 데 사용됩니다.
동일한 PUT 요청을 여러 번 수행하더라도 서버의 상태는 같은 상태를 유지합니다.
4. DELETE
지정된 리소스를 삭제합니다.
특정 리소르를 제거하는 데 사용됩니다.
같은 DELETE 요청을 여러 번 수행해도 결과는 동일합니다.
5. PATCH
리소스의 부분적인 업데이트를 수행합니다.
PUT과 유사하지만 리소스의 일부분만 수정할 때 사용됩니다.
멱등성이 보장되지 않을 수 있습니다.
6. HEAD
GET 요청과 동일하지만 응답 본문 없이 HTTP 헤더만 반환합니다.
리소스의 메타데이터(타입, 수정 날짜)를 확인할 때 사용됩니다.
서버 응답을 테스트하거나 검증할 때 유용합니다.
7. OPTIONS
대상 리소스에서 사용 가능한 통신 옵션을 설명하는 데 사용됩니다.
서버 또는 특정 리소스가 지원하는 HTTP 메소드를 확인할 때 사용됩니다.
크로스 오리진 리소스 공유에서 중요한 역할을 합니다.
크로스 오리진 리소스 공유 CORS Cross-Origin Resource Sharing
웹 페이지가 다른 도메인의 리소스에 접근할 수 있게 하는 보안 매커니즘 입니다.
도메인이나 프로토콜, 포트가 다른 서버로부터 자원을 요청할 때 웹 브라우저의 동일 출처 정책을 우회할 수 있는 방법을 제공합니다.
동일 출처 정책 Same-Origin Policy
웹 보안의 핵심으로 스크립트가 다른 출처의 자원과 상호작용하는 것을 제한합니다.
출처는 프로토콜, 호스트(도메인), 포트 세 가지의 조합으로 정의됩니다.
REST 방식으로 요청하는 URI
/ [ 작업명 ] / [ 기본키 ] + [ 메소드 ] + [ 데이터 ]
작업명 : 요청하는 작업 종류
기본키 : 요청하는 작업에 해당하는 대상의 기본키
메소드 : 요청하는 기능
데이터 : 기능 수행에 필요한 JSON 데이터
POST | /boards + 데이터 | 새 글 등록 |
GET | /boards/101 | 101번 글 조회 |
PUT | /boards/101 + 데이터 | 101번 글 수정 |
DELETE | /boards/101 | 101번 글 삭제 |
'Project_HYEONGARL' 카테고리의 다른 글
PreProject_06_Controller (0) | 2024.05.13 |
---|---|
PreProject_05_ResponseEntity<> (0) | 2024.05.13 |
PreProject_04_Spring Web Layer (0) | 2024.05.13 |
PreProject_03_ORM(Object-Relational Mapping) 을 위한 Entity Class (0) | 2024.05.12 |
PreProject_01_MVC 모델 짚고 넘어가기 (0) | 2024.05.11 |