스프링 - RESTful API이란 무엇일까?

2024. 8. 16. 15:50스프링

2024/08/16

 

 

앞으로 스프링 RestTemplate에 대해 알아볼건데요.
그 전에 먼저 RESTful  API가 무엇인지 알아보는 시간을 갖겠습니다.

 

 


 

출처 : AWS (amazon.com)

※   RESTful  API에 대해 알아보자.

출처 : https://velog.velcdn.com/images/jiyaho/post/751fa28d-173f-4cd9-aebb-160d6ec56943/image.png

 

📌 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