REST와 RESTful API에 대해 알아보자 !

아카시아·2021년 11월 6일
0

REST (Representational State Transfer)


  • 정의 : 웹에 존재하는 자원(이미지, 동영상, DB)에 대해서 고유한 URI를 부여하고 활용하는 방법론을 말한다. 어떤 프레임워크가 아니라 이런 방식을 주고받겠다는 약속이라는 의미에서 코딩 컨벤션과 유사하다.

  • REST는 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활요하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일이다.


  • REST의 특징
  1. Server-Client 구조

1-1. 일관적인 인터페이스로 분리되어 있어야 한다. 따라서 서로간의 의존성이 줄어든다.

1-2. 자원을 가진 쪽이 서버, 자원을 요청하는 쪽이 클라이언트가 된다.

  1. Stateless(무상태)

2-1. 각 요청 간 클라이언트의 콘텍스트가 서버에 저장되어서는 안 된다.

2-2. 세션 정보나 쿠키 정보를 별도로 저장하고 관리하지 않기 때문에 API 서버는 클라이언트의 요청만을 단순 처리하면 된다. -> 서비스의 자유도가 높아지고 서버에서 불필요한 정보를 관리하지 않아 구현이 단순해지는 장점이 있다.

  1. Cacheable(캐시 처리 가능)

3-1. 잘 관리되는 캐싱은 클라이언트-서버 간 상호작용을 부분적으로 또는 완전하게 제거하여 확장성과 성능을 향상시킨다.

3-2. 웹 표준 HTTP 프로토콜을 그대로 사용하므로 웹에서 사용하는 기존의 인프라를 그대로 활용할 수 있다.

  1. Self-descriptiveness(자체 표현 구조)

4-1. REST API 메시지만 보고도 이를 쉽게 이해할 수 있도록 JSON을 이용해 직관적으로 이해가 가능한 자체 표현 구조로 되어있다.

4-2. 동사(Method) + 명사(URI) 로 이루어져있어 어떤 메서드에 무슨 행위를 하는 지 알 수 있다.

  1. 계층형 구조

5-1. REST 서버는 다중 계층으로 구성될 수 있으며 보안, 로드 밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘 수 있고 PROXY, 게이트웨이 같은 네트워크기반의 중간매체를 사용할 수 있게한다.

5-2. API 서버는 순수한 비즈니스 로직을 수행하고 그 앞단에 보안, 로드밸런싱, 암호화, 사용자 인증 등을 추가하여 구조상의 유연성을 줄 수 있다.


  • REST의 장점
  1. HTTP 프로토콜의 인프라를 그대로 사용해서 REST API 사용을 위한 별도의 인프라를 구축할 필요가 없다.

  2. HTTP 프로토콜의 표준을 최대한 활용해 여러 추가적인 장점을 함께 가져갈 수 있게 해준다.

  3. HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능하다.

  4. Hypermedia API의 기본을 충실히 지키면서 범용성을 보장한다.

  5. REST API 메시지가 의도하는 바를 명확하게 나타내므로 의도하는 바를 쉽게 파악할 수 있다.

  6. 여러가지 서비스 디자인에서 생길 수 있는 문제를 최소화한다.

  7. 서버와 클라이언트의 역할을 명확하게 분리한다.


  • REST의 단점
  1. 표준 자체가 존재하지 않아 정의가 필요하다.

  2. 사용할 수 있는 메소드가 4가지밖에 없다.

  3. HTTP Method 형태가 제한적이다.

  4. 브라우저를 통해 테스트할 일이 많은 서비스라면 쉽게 고칠 수 있는 URI보다 Header 정보의 값을 처리해야하므로 전문성이 요구된다.

  5. 구형 브라우저에서 호환이 되지 않아 지원해주지 못하는 동작이 많다.


  • REST의 목표
  1. 구성요소 상호작용의 규모 확장성

  2. 인터페이스의 범용성

  3. 구성요소의 독립적인 배포

  4. 중간적 구성요소를 이용해 응답 지연 감소, 보안 강화, 레거시 시스템을 인캡슐레이션

위와 같은 목표로 작업하면 백엔드와 프론트엔드의 영역을 효율적으로 분리할 수 있어서 규모 확장에 있어서 장점이 생기고 각자 독립적으로 배포되어 버전관리를 할 수 있다. 그리고 자원과 직접적인 통신을 하고 있는 백엔드가 분리되어 있기 때문에 접근하는 것에 있어서나 자원을 캡슐화해서 보낼 수 있어서 보안도 강화되는 장점이 있다.


  • URI 설계 시 주의할 점
  1. 슬래시 구분자(/)는 계층 관계를 나타내는 것에 사용

  2. URI 마지막 문자로 슬래시(/)를 포함하지 않는다.

  3. 하이픈(-)은 URI 가독성을 높이는 데에 사용

  4. 밑줄(_)은 URI에 사용하지 않는다.

  5. URI 경로에는 소문자가 적합하다.

  6. 파일확장자는 URI에 포함하지 않는다.


  • Method
  1. GET : 해당 리소스를 조회한다. 리소스를 조회하고 해당 Document에 대한 자세한 정보를 가져온다.

  2. POST : 해당 URI를 요청하면 리소스를 생성한다.

  3. PUT : 해당 리소스를 수정한다.

  4. PATCH : 해당 리소스를 수정한다.

  5. DELETE : 해당 리소스를 삭제한다.


따라서 RESTful API란 위에 나열된 REST 아키텍처를 준수해 설계된 API이다.


참고 : https://khj93.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-REST-API%EB%9E%80-REST-RESTful%EC%9D%B4%EB%9E%80, https://blog.metafor.kr/165

profile
낭만적인 개발자

0개의 댓글