3-2. CRUD와 REST

khs·2022년 2월 14일
0

Java Spring Boot

목록 보기
15/34
post-thumbnail
post-custom-banner

RESTful 이란?

서버의 형태에 따라 클라이언트의 형태가 고정되어 있을 경우(그 반대의 경우도) 결합성이 올라간다. 결합성이 높은 구조는 좋은 구조라고 할 수 없다. 결합성이 줄어듦으로써 성능도 좋아지고 확장성도 뛰어나지고 사용도 간편해진다.

  • REST는 Representational State Transfer라는 용어의 약자로서 웹의 장점을 최대한 활용할 수 있는 아키텍처
  • 최근의 서버 프로그램은 다양한 브라우저와 안드로이폰, 아이폰과 같은 모바일 디바이스에서도 통신을 할 수 있어야 한다.
  • REST 아키텍처는 Hypermedia API의 기본을 충실히 지키면서 범용성을 보장한다.

아래의 6가지 제약사항을 잘 지켜야 (완벽하게 지키기란 어렵다..) restful한 api라고 볼 수 있다.

1. Client Server Architecture (= Client Server Model)

-서비스 요청자인 클라이언트와 서비스 자원의 제공자인 서버 간에 작업을 분리해주는 분산 애플리케이션 구조이자 네트워크 아키텍처를 나타낸다.
-서로의 변화가 서로에게 영향을 주지 않는다.

2. Statelessness

-어떠한 요청에 대해 요청자의 State를 관여하지 않는다. 즉 같은 요청을 A가 보낼 때와 B가 보낼 때가 같아야한다.
-api 자체가 상태를 저장해서 그걸 가지고 뭔가를 만든다 이건 restful 하지 않은것이다.

Stateless할 경우 어떠한 클러스터 내의 어떠한 서버에 요청을 보내든 같은 결과를 얻을 수 있지만, Stateful한 경우, 예를 들어 A의 세션 정보가 A' 서버에 저장되어 있는 경우, A'서버가 아닌 B' 서버에 요청을 보내게 된다면, B'에는 A의 세션 정보가 없으므로 Authentication이 이루어질 수 없다.


3. Cacheability

-서버에 있는 자원을 클라이언트에서 한 번 받았으면 또 다시 받을 필요가 없다는 것을 서버가 알려줘야한다는 것을 Cacheability 라고 한다.

cache란? : 캐시는 컴퓨터 과학에서 데이터나 값을 미리 복사해 놓는 임시 장소를 가리킨다. 캐시는 캐시의 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우나 값을 다시 계산하는 시간을 절약하고 싶은 경우에 사용한다.


4. Layered System

클라이언트는 대상 서버에 직접 연결되었는지, 또는 중간 서버를 통해 연결되었는지 인지 할 수 없다.


5. Uniformed Interface

Uniform Interface(일관된 인터페이스)란 Resource(URI)에 대한 요청을 통일되고, 한정적으로 수행하는 아키텍처 스타일을 의미한다. 이것은 요청을 하는 Client가 플랫폼(Android, Ios, Jsp 등) 에 무관하며, 특정 언어나 기술에 종속받지 않는 특징이 있다. 이러한 특징 덕분에 Rest API는 HTTP를 사용하는 모든 플랫폼에서 요청가능하며, Loosely Coupling(느슨한 결함) 형태를 갖게 된다.


6. Code on Demand (Optional - 선택사항임!)

실행중인 와중에도 기능이 변할 수 있음.

클라이언트는 리소스에 대한 표현을 응답으로 받고 처리해야 하는데, 어떻게 처리해야 하는지에 대한 Code를 서버가 제공하는 것을 의미한다. Html에서의 javascript가 가장 대표적인 예이다.


** 신경써야할 부분

** URL 은 뭐고 URI는 뭘까?

URI : URI는 특정 리소스를 식별하는 통합 자원 식별자(Uniform Resource Identifier)를 의미한다. 웹 기술에서 사용하는 논리적 또는 물리적 리소스를 식별하는 고유한 문자열 시퀀스다.

URL : URL은 흔히 웹 주소라고도 하며, 컴퓨터 네트워크 상에서 리소스가 어디 있는지 알려주기 위한 규약이다. URI의 서브셋이다.


URI는 식별하고, URL은 위치를 가리킨다.
실세계에 빗대어 예시를 들어보자면 다음과 같다.
“손흥민”은 이름이며 식별자(Identifier)다. 이는 URI와 비슷하지만 위치나 연락처에 대한 정보가 없으므로 URL은 될 수 없다.
URI => O , URL => X

“송파구 방이동 손흥민아파트 1동 1호"는 주소다. 주소는 특정 위치를 가르킨다. URL 및 URI와 비슷하며 간접적으로 내가 있는 장소로 식별한다.
URI => O , URL => O

url은 어떤 자원이 어디에 있는지 나타기 위해서 사용하는 문자열이다. 우리가 작성했던 코드(PostController.java)를 보면 아래 오른쪽과 같이 위치를 작성해야 할 곳에 기능을 추가하는 문자열을 입력했다.

이전 작성 형태 url의 의미에 맞게 위치에 맞는 이름

요든 요청은 post 의 경로를 통해서 이동하고 특정한 자원을 읽을 때, 수정할 때, 지울 때 처럼 하나의 요소를 다룰 때는 뒤에 아이디를 붙여준다.

profile
권혁상입니다. 행복코딩^_^
post-custom-banner

0개의 댓글