2024. 8. 16. 15:50ㆍ스프링
2024/08/16
앞으로 스프링 RestTemplate에 대해 알아볼건데요.
그 전에 먼저 RESTful API가 무엇인지 알아보는 시간을 갖겠습니다.
출처 : AWS (amazon.com)
※ RESTful API에 대해 알아보자.
📌 API(Application Programming Interface)란?
– 애플리케이션 프로그래밍 인터페이스 즉, API는 정의 및 프로토콜 집합을 사용하여 두 소프트웨어
구성 요소가 서로 통신할 수 있게 하는 메커니즘이다.
– API의 맥락에서 애플리케이션이라는 단어는 고유한 기능을 가진 모든 소프트웨어를, 인터페이스는
두 애플리케이션 간의 서비스 계약을 나타낸다.
– 이 계약은 요청과 응답을 사용하여 두 애플리케이션이 서로 통신하는 방법을 정의하며 API 문서에는
개발자가 이러한 요청과 응답을 구성하는 방법에 대한 정보가 들어 있다.
– API 개발자는 여러 아키텍처를 사용하여 API를 설계할 수 있다.
📌 REST(Representational State Transer)란?
– REST는 API 작동 방식에 대한 조건을 부과하는 소프트웨어 아키텍처를 말한다.
– REST는 클라이언트가 서버 데이터에 액세스하는 데 사용할 수 있는 GET, PUT, DELETE 등의
함수 집합을 정의한다.
– REST 기반 아키텍처를 사용하여 대규모의 고성능 통신을 안정적으로 지원할 뿐만 아니라 쉽게
구현하고 수정할 수 있어 모든 API 시스템을 파악하고 여러 플랫폼에서 사용할 수 있다.
– 다음은 REST 아키텍처 스타일의 대표적인 원칙들이다.
○ 균일한 인터페이스 : 모든 RESTful 웹 서비스 디자인의 기본으로 서버가 표준 형식으로 정보를
전송함을 나타낸다. 형식이 지정된 리소스를 REST에서 표현이라고 부른다.
○ 무상태 : REST 아키텍처에서 무상태는 서버가 이전의 모든 요청과 독립적으로 모든 클라이언트
요청을 완료하는 통신 방법을 나타낸다.
○ 계층화 시스템 : 클라이언트 요청을 이행하기 위해 함께 작동하는 보안, 애플리케이션 및 비즈니스 로직과
같은 여러 계층으로 여러 서버에서 실행되도록 RESTful 웹 서비스를 설계할 수 있다.
○ 캐시 가능성 : RESTful 웹 서비스는 서버 응답 시간을 개선하기 위해 클라이언트 또는 중개자에
일부 응답을 저장하는 프로세스인 캐싱을 지원한다.
○ 온디맨드 코드 : REST 아키텍처 스타일에서 서버는 소프트웨어 프로그래밍 코드를 클라이언트에
전송하여 클라이언트 기능을 일시적으로 확장하거나 사용자 지정할 수 있다.
▶ RESTful API란?
● RESTful API는 두 컴퓨터 시스템이 인터넷을 통해 정보를 안전하게 교환하기 위해 사용하는 인터페이스를 뜻한다.
● 오늘날 웹에서 볼 수 있는 가장 많이 사용되고 유연한 API 중 하나다.
● REST API의 주된 특징은 무상태로 이는 서버가 요청 간에 클라이언트 데이터를 저장하지 않음을 의미한다.
▶ RESTful API의 장점
✅ 확장성
○ REST API를 구현하는 시스템은 REST가 클라이언트-서버 상호 작용을 최적화하기 때문에 효율적으로 크기 조정할 수 있다.
– 무상태는 서버가 과거 클라이언트 요청 정보를 유지할 필요가 없기 때문에 서버 로드를 제거한다.
– 잘 관리된 캐싱은 일부 클라이언트-서버 상호 작용을 부분적으로 또는 완전히 제거한다.
👉 이러한 모든 기능은 성능을 저하시키는 통신 병목 현상을 일으키지 않으면서 확장성을 지원한다.
✅ 유연성
○ RESTful 웹 서비스는 완전한 클라이언트-서버 분리를 지원한다.
○ 각 부분이 독립적으로 발전할 수 있도록 다양한 서버 구성 요소를 단순화하고 분리한다.
○ 서버 애플리케이션의 플랫폼 또는 기술 변경은 클라이언트 애플리케이션에 영향을 주지 않는다.
👉 애플리케이션 함수를 계층화하는 기능은 유연성을 더욱 향상시킵니다.
✅ 독립성
○ API 설계에 영향을 주지 않고 다양한 프로그래밍 언어로 클라이언트 및 서버 애플리케이션을 모두 작성할 수 있다.
○ 통신에 영향을 주지 않고 양쪽의 기본 기술을 변경할 수 있다.
👉 REST API는 사용되는 기술과 독립적이다.
▶ RESTful API 작동방식
● RESTful API의 기본 기능은 인터넷 브라우징과 동일하다.
● 다음은 모든 REST API 호출에 대한 일반 단계이다.
1. 클라이언트가 서버에 요청을 전송한다. 클라이언트가 API 문서에 따라 서버가 이해하는 방식으로 요청 형식을 지정한다.
2. 서버가 클라이언트를 인증하고 해당 요청을 수행할 수 있는 권한이 클라이언트에 있는지 확인한다. 3. 서버가 요청을 수신하고 내부적으로 처리한다.
4. 서버가 클라이언트에 응답을 반환한다. 응답에는 요청이 성공했는지 여부를 클라이언트에 알려주는 정보와 클라이언트가 요청한 모든 정보가 포함된다.
▶ RESTful API 클라이언트 요청
● RESTful API에는 다음과 같은 주요 구성요소를 포함하는 요청이 필요하다.
✅ 고유 리소스 식별자
○ 서버는 고유한 리소스 식별자로 각 리소스를 식별한다.
○ REST 서비스의 경우 서버는 일반적으로 URL(Uniform Resource Locator)을 사용하여 리소스 식별을 수행한다.
○ URL은 리소스에 대한 경로를 지정한다.
○ URL은 요청 엔드포인트라고도 하며 클라이언트가 요구하는 사항을 서버에 명확하게 지정한다.
✅ 메서드
○ 개발자는 종종 HTTP를 사용하여 RESTful API를 구현한다.
○ HTTP 메서드는 리소스에 수행해야 하는 작업을 서버에 알려준다.
○ 대표적으로는 GET, POST, PUT DELETE가 있다.
✅ HTTP 헤더
○ 요청 헤더는 클라이언트와 서버 간에 교환되는 메타데이터를 말한다.
○ 요청 헤더는 요청 및 응답의 형식을 나타내고 요청 상태 등에 대한 정보를 제공한다.
▶ RESTful API 서버 응답
● RESTful API에는 REST 원칙에 따라 서버 응답에 다음과 같은 주요 구성요소를 포함한다.
✅ 상태 표시줄
○ 상태 표시줄에는 요청 성공 또는 실패를 알리는 3자리 상태 코드가 있다.
○ 다음은 대표적인 상태 코드다.
▪️ 200 : 일반 성공 응답
▪️ 201 : POST 메서드 성공 응답
▪️ 400 : 서버가 처리할 수 없는 잘못된 요청
▪️ 404 : 리소스를 찾을 수 없음
✅ 메시지 본문
○ 응답 본문에는 리소스 표현이 포함된다.
○ 서버는 요청 헤더에 포함된 내용을 기반으로 적절한 표현 형식을 선택한다.
○ 클라이언트는 데이터 작성 방식을 일반 텍스트로 정의하는 XML 또는 JSON 형식으로 정보를 요청할 수 있는데 서버는 이에 따라 응답 표현을 반환한다.
✅ 헤더
○ 응답에는 응답에 대한 헤더 또는 메타데이터도 포함된다.
○ 이는 응답에 대한 추가 컨텍스트를 제공하고 서버, 인코딩, 날자 및 콘텐츠 유형과 같은 정보를 포함한다.
▶ RESTful API 인증 방식
● 웹 서비스는 응답을 보내기 전에 먼저 요청을 인증해야 한다. 인증은 신원을 확인하는 프로세스다.
● RESTful API에는 4가지의 일반적인 인증 방법이 있다.
✅ HTTP 인증
○ HTTP는 REST API를 구현할 때 직접 사용할 수 있는 일부 인증 체계를 정의한다.
○ 다음은 이러한 체계 중 두 가지다.
▪️ 기본 인증 : 기본 인증에서 클라이언트는 요청 헤더에 사용자 이름과 암호를 넣어 전송한다.
안전한 전송을 위해 이 페어를 64자의 세트로 변환하는 인코딩 기술인 base64로 인코딩한다.
▪️ 전달자 인증 : 전달자(Bearer) 인증이라는 용어는 토큰 전달자에 대한 액세스 제어를 제공하는 프로세스를
나타낸다. 일반적으로 전달자 토큰은 서버가 로그인 요청에 대한 응답으로 생성하는 암호화
된 문자열이다. 클라이언트는 리소스에 액세스하기 위해 요청 헤더에 토큰을 넣어 전송한다.
✅ API 키
○ API 키는 REST API 인증을 위한 또 다른 옵션이다.
▪️ 이 접근 방식에서 서버는 고유하게 생성된 값을 최초 클라이언트에 할당한다.
▪️ 클라이언트는 리소스에 액세스하려고 할 때마다 고유한 API 키를 사용하여 본인을 검증한다.
○ API 키의 경우 클라이언트가 이 키를 전송해야 해서 네트워크 도난에 취약하기 때문에 덜 안전하다.
✅ OAuth
○ OAuth는 모든 시스템에 대해 매우 안전한 로그인 액세스를 보장하기 위해 암호와 토큰을 결합한다.
○ 서버는 먼저 암호를 요청한 다음 권한 부여 프로세스를 완료하기 위해 추가 토큰을 요청한다.
○ 특정 범위와 수명으로 언제든지 토큰을 확인할 수 있다.
RESTful API가 무엇인지 다들 이해하셨나요?
그럼 다음 포스팅에서는 본격적으로 스프링 RestTemplate에 대해 알아보겠습니다.
'스프링' 카테고리의 다른 글
스프링 - JPA Auditing 적용하기 (0) | 2024.08.20 |
---|---|
스프링 - RestTemplate & Open API (0) | 2024.08.19 |
스프링 - Spring Security 프레임워크 (0) | 2024.08.14 |
스프링 - Filter란? (0) | 2024.08.14 |
스프링 - 영속성 컨텍스트란? (0) | 2024.08.13 |