티스토리 뷰
REST.... REST API .... RESTful ......
공통적으로 모두 사용되는 REST 라는 단어‼ 대체 무슨뜻인가요?
📢 REST
“Representational State Transfer”의 약자로 소프트웨어 프로그램 아키텍처의 한 형식이다.
장비간 통신을 위해 복잡한 방법을 사용하는 대신 간단하게 HTTP를 이용하는 것이 목적이다.
⇒ 쉽게 생각해서 최근의 서버 프로그램은 다양한 브라우저, 안드로이폰, 아이폰 등 모바일 디바이스에서도 통신을 할 수 있어야 하기 때문에 사용함!
🙄소프트웨어 프로그램 아키텍처..? 참 어려운 말이다 ㅎㅎ
애초에 이게 광범위하고 정확하게 딱 떨어져서 어떤 단어다 라고 정의할 수 없는 단어라 그렇다.
쉽게 설명하자면..
소프트웨어 시스템을 만드는데 시스템의 목적을 달성하기 위해 시스템 디자인에 대한 제약 및 설계하는 것이다.
소프트웨어 시스템을 개발하는데 주변환경들을 먼저 고려해서 최상의 소프트웨어를 구성하고자 하는 역할을 한다.
REST는 OO 이다. 바로 이것.
자원 지향 구조(Resource Oriented Architecture)
➡ 웹 사이트의 이미지, 텍스트, DB 내용 등의 모든 자원에 고유한 URI를 부여한다.
엄격한 의미로 REST는 네트워크 아키텍쳐 원리모음이다.
💡네트워크 아키텍처 원리란?
자원을 정의하고 자원에 대한 주소를 지정하는 방법 전반을 말한다.
웹 상의 자료를
HTTP위에서
SOAP이나 쿠키를 통한 세션 트랙킹(Session Tracking, 요청된 세션을 찾아 주는 동작) 같은 별도의 전송 계층 없이 전송하기 위한 아주 간단한 인터페이스를 말한다.
그래서 REST ! 한마디로 설명하자면?
HTTP URI ( Uniform Resource Identifier ) 를 통해 자원( Resource )을 명시하고,
💡 URI ( Uniform Resource Identifier )
웹 서버가 리소스를 고유하게 식별할 수 있도록 하는 것
- URL : 특정 서버의 한 리소스에 대해 구체적인 위치를 서술합니다.
- URN : 리소스가 어디에 위치해 있든 찾을 수 있는 방식을 말합니다.
HTTP Method ( POST, GET, PUT, DELETE )를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것!
💡 CRUD Operation
- Create : 생성(POST)
- Read : 조회(GET)
- Update : 수정(PUT)
- Delete : 삭제(DELETE)
- HEAD: header 정보 조회(HEAD)
REST 구성
1. 자원 ( Resource ) HTTP URI
모든 자원은 고유한 ID를 가진다. ID는 서버에 존재하고 클라이언트는 각 자원의 상태를 조작하기 위해 요청을 보낸다.
HTTP에서 자원을 구별하는 ID는 ‘Students/1’ 같은 HTTP URI 이다.
2. 행위(Verb) HTTP Method
HTTP 프로토콜에서는 GET , POST , PUT , DELETE 같은 Method를 제공한다.
클라이언트는 URI를 이용해 자원을 지정하고 자원을 조작하기 위해 Method를 사용한다.
3. 표현(Representation)
클라이언트가 서버로 요청을 보냈을 때 서버가 응답으로 보내주는 자원의 상태를 표현이라고 한다.
REST에서 하나의 자원은 JSON , XML , TEXT , RSS 등 여러형태의 Representation으로 나타낼수 있다.
📢 REST API
REST API 탄생 배경
2000년도에 HTTP의 주요 저자 중 한 사람인 로이 필딩이 그 당시 웹 설계의 우수성에 비해 제대로 사용되어지지 못하는 모습에 안타까워하며
웹의 장점을 최대한 활용할 수 있는 Architecture로써 REST를 발표한다.
따라서 REST API는 💡 REST기반으로 서비스 API를 구현한 것
이라고 할 수 있다.
💡 API ( Application Programming Interface )
애플리케이션 프로그래밍 인터페이스 ( Application Programming Interface )
애플리케이션 소프트웨어를 구축하고 통합하기 위한 정의 및 프로토콜 세트
- API를 사용하면 구현 방식을 알지 못해도 제품 또는 서비스가 서로 커뮤니케이션할 수 있고
- 애플리케이션 개발을 간소화하여 시간과 비용을 절약할 수 있다!
REST API 특징
- REST 기반으로 시스템을 분산해 확장성과 재사용성을 높여 유지보수 및 운용이 편리하다.
- REST는 HTTP 표준을 기반으로 구현하므로, HTTP를 지원하는 프로그램 언어로 클라이언트, 서버를 구현할 수 있다.
- ➡ 즉, REST API를 제작하면 델파이 클라이언트 뿐 아니라, 자바, C#, 웹 등을 이용해 클라이언트를 제작할 수 있다.
REST API 디자인 가이드
- URI는 Resource를 표현해야 한다.
- Resource에 대한 행위는 HTTP Method (GET, PUT, POST, DELETE등등)로 표현한다.
📢 RESTful
제약 조건의 집합(아키텍처 스타일, 아키텍처 원칙)을 모두 만족하는 것을 의미한다.
따라서
RESTful은 💡REST API의 설계 의도를 명확하게 지켜주는 것 이라는 뜻이다!
REST 라는 아키텍처 스타일이 있는거고,
RESTful API는 REST 아키텍처 원칙을 모두 만족하는 API라는 뜻이다.
➡ REST API를 제공하는 웹 서비스를 RESTful 하다고 할 수 있다.
👍🏻 RESTful한 API란, " 각 구성요소들의 역할이 완벽하게 분리되어 있는 것 " 이라고 말합니다.
➕ RESTful은 REST를 REST답게 쓰기 위한 방법으로, 누군가가 공식적으로 발표한 것이 아니다.
📢 REST의 특징
1. Uniform (유니폼 인터페이스)
- Uniform Interface는 URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍처 스타일
2. Stateless (무상태성)
- 상태가 있다 없다는 의미는 사용자나 클라이언트의 컨택스트를 서버쪽에 유지 하지 않는다는 의미한다.
- 세션이나 쿠키등을 별도로 관리하지 않기 때문에 API서버는 요청만을 들어오는 메시지로만 처리하기 때문에 구현이 단순하다.
3. Cacheable (캐시 처리 가능)
- REST의 가장 큰 특징 중 하나는 HTTP라는 기존 웹표준을 그대로 사용한다.
- HTTP가 가진 캐싱 기능이 적용 가능하다. HTTP 프로토콜 표준에서 사용하는 Last-Modified태그나 E-Tag를 이용하면 캐싱 구현이 가능하다.
4. Self-descriptiveness (자체 표현 구조)
- REST의 또 다른 큰 특징 중 하나는 REST API 메시지만 보고도 이를 쉽게 이해 할 수 있는 자체 표현 구조로 되어 있다는 것
5. Client - Server Architecture (클라이언트 - 서버 구조)
- REST 서버는 API를 제공하고, 제공된 API를 이용해서 비즈니스 로직 처리 및 저장을 책임진다.
- 클라이언트의 경우 사용자 인증이나 컨택스트(세션,로그인 정보)등을 직접 관리하고 책임진다.
- 서로간의 의존성이 줄어들게 된다.
6. 계층형 구조
- 클라이언트 입장에서는 REST ApI 서버만 호출한다.
- REST 서버는 다중 계층으로 구성될 수 있다. 예를 들어 보안, 로드 밸런싱, 암호화, 사용자 인증등등 추가하여 구조상의 유연성을 줄 수 있다.
'computer science > network' 카테고리의 다른 글
쿠키와 세션의 차이점 (0) | 2021.07.16 |
---|
- Total
- Today
- Yesterday
- 스프링 스케줄링
- MultipleBagFetchException
- FetchJoin
- 배열
- QueryDSL
- ChatGPT
- junit5
- Kotlin
- Git
- JPA
- dto 클래스 생성자
- Linux
- Java
- MongoDB
- n+1
- port
- 자바 어플리케이션 실행 과정
- Spring Security
- Cannot construct instance of
- spring boot 3
- 추상클래스
- 오블완
- jvm warm-up 전략
- array
- redisson 분산락
- 티스토리챌린지
- addFilterBefore
- checkout
- 스프링오류
- bucket4j
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |