| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- uuid
- RDB
- Failed to load ApplicationContext
- spring
- AuthenticationPrincipal
- python
- Spring Security
- 1093
- Geoserver
- postgresql
- JSON Web Token
- JWT
- Kafka
- mysql
- hadoop #hdfs
- insert into
- Maven
- Linux
- posgis
- Java
- LazyInitializationException
- spring boot
- nginx
- sftp
- QGIS
- postgres
- Docker
- JPA
- #mojo
- psycopg2
- Today
- Total
FOREST_CHOI's BLOG
REST API? 본문
4. REST API
REST란?
- Representational State Transfer
- 자원을 이름(표현)으로 구분하여 해당 자원의 상태(정보)를 주고받는 모든 것을 의미
- 데이터가 요청되어지는 시점에서 자원의 상태를 전달하면 JSON, XML을 통해 데이터를 주고 받는 것이 일반적이다.(최근에 JSON이 우세)
- 월드 와이드 웹과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 개발 아키텍쳐의 한 형식
- REST는 기본적으로 웹의 기존기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일
REST의 요소
- Method(GET, POST, PUT, DELETE)
- Resource : 모든 것을 명사로 표현하고, 세부 Resource에는 id를 붙임
- Message : 메시지 포멧이 존재(JSON, XML)
REST의 특징
- Uniform Interface(인터페이스 일관성)
HTTP 표준만 맞는다면, 어떤 기술도 가능한 Interface스타일
URL로 지정한 Resource에 대한 조작을 통일되고 한정적인 인터페이스로 수행
- Server-Client(서버 클라이언트 구조)
자원이 있는 쪽이 Server, 자원을 요청하는 쪽이 Client가 된다.
서로 간 의존성이 줄어든다
- Stateless(무상태성)
HTTP 프로토콜은 Stateless Protocol이므로 REST역시 무상태성이다.
Client의 context를 Server에 저장하지 않는다.
Server는 각각의 요청을 별개의 것으로 인식하고 처리한다.
- Cacheable(캐시 처리 가능)
웹 표준 HTTP 프로토콜을 그대로 사용하므로 웹에서 사용하는 기존의 인프라를 그대로 활용할 수 있다.
대량의 요청을 효율적으로 처리하기 위해 캐시가 요구된다.
캐시 사용을 통해 응답시간이 빨라지고 REST Server트랜잭션이 발생하지 않기 때문에 전체 응답시간, 성능, 서버의 자원 이용률을 향상 시킬 수 있다.
- Layered System(계층화)
Client는 REST API Server만 호출한다.
REST Server는 다중 계층으로 구성될 수 있다.
vProxy, Gateway 같은 네트워크 기반의 중간 매체를 사용할 수 있다.
REST가 필요한 이유
- 애플리케이션 분리 및 통합
- 다양한 클라이언트의 등장
- 최근의 서버 프로그램은 다양한 브라우저와 모바일 디바이스에서도 통신을 할 수 있어야한다
- 이러한 멀티 플랫폼에 대한 지원을 위해 서비스 자원에 대한 아키텍처를 세우고 이용한 방법을 모색한 결과 REST에 관심을 가지게 되었음
RESTful API의 개념
- RESTful API는 두 컴퓨터 시스템이 인터넷을 통해 정보를 안전하게 교환하기 위해 사용하는 인터페이스이다. 대부분 비즈니스 애플리케이션은 다양한 태스크를 수행하기 위해 다른 내부 애플리케이션 및 서드 파티 애플리케이션과 통신해야 한다.
RESTful API 사용 시 장점
- 확장성
: REST API를 구현하는 시스템은 REST가 클라이언트 – 서버 상호작용을 최적화 하기 때문에 효율적으로 크기 조정할 수 있다. 무상태는 서버가 과거 클라이언트 요청 정보를 유지할 필요가 없기 때문에 서버 로드를 제거한다. 이러한 모든 기능은 성능을 저하시키는 통신 병목 현상을 일으키지 않으면서 확장성을 지원한다.
- 유연성
: RESTful 웹 서비스는 완전한 클라이언트 – 서버 분리를 지원한다. 각 부분이 독립적으로 발전 할 수 있도록 다양한 서버 구성 요소를 단순화하고 분리한다. 애플리케이션 함수를 계층화 하는 기능은 유연성을 더욱 향상시킨다.
- 독립성
: REST API는 사용되는 기술과 독립적이다. API설계에 영향을 주지 않고 다양한 프로그래밍 언어로 클라이언트 및 서버 애플리케이션을 모두 작성할 수 있다. 또한 통신에 영향을 주지 않고 양쪽의 기본 기술을 변경할 수 있다.
RESTful API동작
1. 클라이언트가 서버에 요청을 전송한다. 클라이언트는 API 문서에 따라 서버가 이해하는 방식으로 요청 형식을 지정한다.
2. 서버가 클라이언트를 인증하고 해당 요청을 수행할 수 있는 권한이 클라이언트에 있는지 확인한다.
3. 서버가 요청을 수신하고 내부적으로 처리한다.
4. 서버가 클라이언트에 응답을 반환한다. 응답에는 요청이 성공했는지 여부를 클라이언트에 알려주는 정보가 포함된다.
JSON, XML 특징
XML
- XML은 데이터를 저장하고 전달할 목적으로 만들어졌으며, 저장되는 데이터 구조를 기술하기 위한 언어이다.
- Extensible Markup Language 의 약자로, 수많은 응용분야에서 데이터를 저장하고 전달하는 중요한 역할을 맡고 있다.
JSON
- JavaScript Object Notation의 약자이다.
- JSON은 좀 더 쉽게 데이터를 교환하고 저장하기 위하여 만들어진 텍스트 기반의 데이터 교환 표준이다.
- JavaScript 기반으로 만들어졌고, Text기반이기 때문에 어떠한 프로그래밍 언어에서도 JSON을 사용하고 읽을 수 있다.
JSON vs XML
- JSON은 종료태그를 사용하지 않는다.
- JSON 구문이 XML 구문보다 짧다.
- XML을 배열을 사용할 수 없지만 JSON은 배열을 사용할 수 있다.
- XML은 XML파서로 파싱되며, JSON은 자바스크립트 표준함수인 eval()함수로 파싱된다.
* JSON은 전송받은 데이터의 무결성을 사용자가 직접 검증해야 한다. 따라서 데이터의 검증이 필요한 곳에서는 스키마를 사용하여 데이터의 무결성을 검증 할 수 있는 XML을 많이 사용한다
'프로그래밍 > Spring Boot' 카테고리의 다른 글
| com.fasterxml.jackson.databind.exc.InvalidDefinitionException (0) | 2022.12.10 |
|---|---|
| @CurrentMember의 생명 주기 / LazyInitializationException (0) | 2022.10.20 |
| Spring MVC? (0) | 2022.10.15 |
| Spring? (0) | 2022.10.15 |
| java.lang.UnsupportedOperationException: public abstract java.lang.String javax.servlet.ServletRequest.getRemoteAddr() is not supported (0) | 2022.10.02 |