본문 바로가기

TIL(Today I Learned)

TIL-231026(REST API)

📝오늘 공부한 것

  • REST API 공부
  • 커리어톤 참여하기
  • 프로그래머스 문제풀기

📌 REST API

📍 API (Application Programming Interface)

  • 애플리케이션이나 디바이스가 서로간에 연결하여 통신할 수 있는 방법을 정의하는 규칙을 정의
  • 개발자는 다른 애플리케이션이 프로그래밍 방식으로 애플리케이션과 통신할 수 있도록 API를 표시하거나 생성
  • 가장 기본적인 수준에서 API는 하나의 애플리케이션이나 서비스가 다른 애플리케이션이나 서비스 내의 리소스에 액세스할 수 있게 해주는 매커니즘이다.
  • 캐싱, 즉 리소스 검색 방법 또는 리소스의 출처에 대해 자세히 알 필요가 없다는 장점이 있다.

클라이언트 :

  • 웹에서 정보에 액세스하려는 사용자
  • API를 사용하는 사람이거나 소프트웨어 시스템일 수 있다.

서버 :

  • 클라이언트에 리소스를 제공하는 시스템

리소스 :

  • 다양한 애플리케이션이 클라이언트에게 제공하는 정보
  • 이미지, 동영상, 텍스트, 숫자 또는 모든 유형의 데이터일 수 있다.

 

📍 REST API

  • REST(RESTful, REpresentational State Transfer) 아키텍처 스타일의 제약조건을 준수하고 RESTful 웹 서비스와 상호 작용할 수 있도록 하는 애플리케이션 프로그래밍 인터페이스(API 또는 웹 API)
  • 두 컴퓨터 시스템이 인터넷을 통해 정보를 안전하게 교환하기 위해 사용하는 인터페이스
  • 이러한 이유로 REST API를 RESTful API라고도 한다.
  • 컴퓨터 과학자인 Roy Fielding 박사가 2000년에 자신의 박사학위 논문에서 처음으로 정의한 REST는 개발자에게 비교적 높은 수준의 유연성과 자유를 제공한다. 이러한 유연성은 REST API가 마이크로서비스 아키텍처에서 컴포넌트와 애플리케이션을 연결하는 일반적인 방법으로 부상하게 된 이유 중 하나에 불과하다.

 

📍 REST

REST는 프로토콜이나 표준이 아닌 소프트웨어 아키텍처 제약 조건이다.

  • HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미한다.
  • REST는 자원 기반의 구조(ROA, Resource Oriented Architecture) 설계의 중심에 리소스가 있고 HTTP Method를 통해 리소스를 처리하도록 설계된 아키텍쳐를 의미한다. 웹 사이트의 이미지, 텍스트, DB 내용 등의 모든 자원에 고유한 ID인 HTTP URI를 부여한다.

📍 REST 구성

  • 자원(Resource) - URI
  • 행위 (Verb) - HTTP Method
  • 표현 (Representations)

 

📍 REST 디자인 원칙

1. 균일한 인터페이스

요청이 어디에서 오는지와 무관하게, 동일한 리소스에 대한 모든 API요청은 동일하게 보여야한다. REST API는 사용자의 이름이나 이메일 주소 등의 동일한 데이터 조각이 오직 하나의 URI에 속함을 보장해야 한다. 리소스가 너무 클필요는 없지만, 이는 클라이언트가 필요로 하는 모든 정보를 포함해야 한다.

 

2. 클라이언트-서버 디커플링

REST API 디자인에서 클라이언트와 서버 애플리케이션은 서로 간에 완전히 독립적이어야 한다. 클라이언트 애플리케이션이 알아야 하는 유일한 정보는 요청된 리소스의 URI이며, 이는 다른 방법으로 서버 애플리케이션과 상호작용할 수 없다. 이와 유사하게, 서버 애플리케이션은 HTTP를 통해 요청된 데이터에 전달하는 것 말고는 클라이언트 애플리케이션을 수정하지 않아야 한다.

 

3. Stateless

REST API는 stateless이다. 이는 각 요청에서 이의 처리에 필요한 모든 정보를 포함해야 함을 의미한다. 즉, REST API는 서버측 세션을 필요로 하지 않는다. 서버 애플리케이션은 클라이언트 요청과 관련된 데이터를 저장할 수 없다.

서버가 이전의 모든 요청과 독립적으로 모든 클라이언트 요청을 완료하는 통신 방법

 

4. 캐싱 가능성

가능하면 리소스를 클라이언트 또는 서버측에서 캐싱할 수 있어야 한다. 또한 서버 응답에는 전달된 리소스에 대해 캐싱이 허용되는지 여부에 대한 정보도 포함되어야 한다. 이의 목적은 서버측의 확장성 증가와 함께 클라이언트측의 성능 향ㅅㅇ을 동시에 얻는 것이다.

 

5. 계층 구조 아키텍처

계층화된 시스템 아키텍처에서 클라이언트는 클라이언트와 서버 사이의 다른 승인된 중개자에게 연결할 수 있으며 여전히 서버로부터도 응답을 받는다.서버는 요청을 다른 서버로 전달할 수도 있다.

클라이언트 요청을 이행하기 위해 함께 작동하는 보안, 애플리케이션 및 비즈니스 로직과 같은 여러 계층으로 여러 서버에서 실행되도록 RESTful 웹 서비스를 설계할 수 있다. 이러한 계층은 클라이언트에 보이지 않는 상태로 유지된다.

 

6. 코드 온디맨드(옵션)

REST API는 일반적으로 정적 리소스를 전송하지만, 특정한 경우에는 응답에 실행코드를 포함할 수도 있다. 이 경우에 코드는 요청 시에만 실행되어야 한다.

 

📍 REST API 작동 방식

RESTful API의 기본 기능은 인터넷 브라우징과 동일하다. 클라이언트는 리소스가 필요할 때 API를 사용하여 서버에 접속한다. API개발자는 서버 애플리케이션 API문서에서 클라이언트가 REST API를 어떻게 사용해야 하는지 설명한다. 

 

1. 클라이언트가 서버에 요청을 전송한다. 클라이언트가 API문서에 따라 서버가 이해하는 방식으로 요청 형식을 지정한다.

2. 서버가 클라이언트를 인증하고 해당 요청을 수행할 수 있는 권한이 클라이언트에 있는지 확인한다.

3. 서버가 요청을 수신하고 내부적으로 처리한다.

4. 서버가 클라이언트에 응답을 반환한다. 응답에는 요청이 성공했는지 여부를 클라이언트에 알려주는 정보가 포함된다.

 

응답에는 클라이언트가 요청한 모든 정보도 포함된다.

REST API 요청 및 응답 세부 정보는 API 개발자가 API를 설계하는 방식에 따라 약간씩 다르다.

 

📍 RESTful API의 장점

확장성

REST API를 구현하는 시스템은 REST가 클라이언트-서버 상호 작용을 최적화하기 때문에 효율적으로 크기 조정을 할 수 있다. Stateless는 서버가 과거 클라이언트 요청 정보를 유지할 필요가 없기 때문에 서버 로드를 제거한다. 잘 관리된 캐싱은 일부 클라이언트-서버 상호 작용을 부분적으로 또는 완전히 제거한다. 이러한 모든 기능은 성능을 저하시키는 통신 병목 현상을 일으키지 않으면서 확장성을 지원한다.

 

유연성

RESTful 웹 서비스는 완전한 클라이언트-서버 분리를 지원한다. 각 부분이 독립적으로 발전할 수 있도록 다양한 서버 구성 요소를 단순화하고 분리한다. 서버 애플리케이션의 플랫폼 또는 기술 변경은 클라이언트 애플리케이션에 영향을 주지 않는다. 애플리케이션 함수를 계층화하는 기능은 유연성을 더욱 향상시킨다. 예를 들어, 개발자는 애플리케이션 로직을 다시 작성하지 않고도 데이터베이스 계층을 변경할 수 있다.

 

독립성

REST API는  사용되는 기술과 독립적이다. API 설계에 영향을 주지 않고 다양한 프로그래밍 언어로 클라이언트 및 서버 애플리케이션을 모두 작성할 수 있다. 또한 통신에 영향을 주지 않고 양쪽의 기본 기술을 변경할 수 있다.

 

 

 

 

 

 

 

 

 

 

References :

https://www.ibm.com/kr-ko/topics/rest-apis

https://www.redhat.com/ko/topics/api/what-is-a-rest-api

https://aws.amazon.com/ko/what-is/restful-api/

https://ko.wikipedia.org/wiki/REST

https://www.incodom.kr/REST

https://meetup.nhncloud.com/posts/92

https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html

https://library.gabia.com/contents/8339/

'TIL(Today I Learned)' 카테고리의 다른 글

TIL-231028(Spring Framework)  (0) 2023.10.28
TIL-231027(WAS, WS)  (0) 2023.10.27
TIL-231025(URI, URL, URN)  (0) 2023.10.25
TIL-231024(자바 프로그램 실행 과정)  (0) 2023.10.24
TIL-231023(PUT vs PATCH)  (0) 2023.10.23