해피 코딩!

REST 본문

카테고리 없음

REST

지속가능한 성장을 2020. 11. 23. 19:12

틀리다고 생각하시는 부분을 지적해주세요! 피드백을 환영합니다!

REST

면접에서 나올 질문을 대비하여 생각을 정리할겸 문서화 합니다.

틀린 내용은 피드백 부탁드리겠습니다.

REST 등장 배경

REST api의 등장은 2000년도에 HTTP의 주요 저자 중 한 사람인 로이 필딩이 그 당시 웹(HTTP) 설계의
우수성에 비해 제대로 사용되어지지 못하는 모습에 안타까워하며 웹의 장점을 최대한 활용할 수 있는 아키텍처로써 REST를 발표 하였습니다.

REST 의미

REST(Representational State Transfer) 라고 하며, 소프트웨어 아키텍쳐의 한 형식 입니다.

소프트웨어 아키텍쳐: 주로 서버를 중심으로 동작되는 소프트웨어들의 논리적 형상에 대한 "구조"

시스템 아키텍쳐: 서버, 네트웍크 장비들을 포괄한 인프라의 물리적 형상의 "구조"

  • 자원을 구분하여 해당 자원의 상태(정보)를 주고 받는 것을 의미합니다.
  • 데이터가 요청 되는 시점에서 정보를 json, xml 등으로 전달한다.
  • 웹 기술과 HTTP를 사용하기에 웹의 장점을 최대한 사용할 수 있다.
  • 네트워크를 통하여 client와 server간의 통신 수단이다.

REST 개념

  • HTTP URI를 통해 Resource를 명시하고, HTTP method를 통해 자원에 대한 CRUD Operation을 적용

  • 프로토콜이나 표준이 아니다.

  • 방식을 약속하는 코딩 컨벤션과 비슷한 개념이다.

REST 구성 요소

  • 자원 Resource : URL
    • 모든 자원은 고유한 ID가 서버에 존재
    • 자원을 구별하는 ID는 HTTP URI이다.
    • client는 URI을 이용하여 자원을 지정하고, 자원의 정보를 서버에 요청한다.
  • 행위 Verb : HTTP method
    • HTTP가 지원하는 method 사용
  • 표현 Representations
    • client가 자원의 상태를 요청하면 서버는 응답을 보낸다.
    • json, xml 등으로 이루어짐.

REST 장점

  • REST API 가 의도하는 바를 명확하게 나타내므로 요청에 따른 응답을 쉽게 파악할 수 있다.
  • 서버와 클라이언트의 역할을 명확하게 분리한다.

REST 단점

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

REST 특징

  • server, client
    • 자원이 있는 쪽이 서버, 자원을 요청하는 쪽이 client이다.
  • statelesss : 무상태
    • client의 context를 서버에 저장하지 않음( 세션과 쿠키 같은 context 정보를 서버는 신경쓰지 않음)
  • 서버는 각각의 요청을 별개의 요청으로 처리한다
    • 각 API는 요청받은 동작만 수행
    • 각 요청간의 종속성이 없다.
    • 서버의 처리 방식에 일관성이 부여되고, 서비스의 자유도가 증가.
  • cachealble
    • HTTP를 사용하여 웹에서 사용하는 기존 인프라 사용 가능
      • HTTP의 장점인 캐시 사용이 가능.
    • 캐시 사용을 통하여 응답시간이 빨라지고, 트랜잭션이 발생하지 않아 서버의 성능을 증가시킴.

RESTful

RESTful이란

  • REST라는 소프트 아키텍쳐를 구현한 웹 API 서비스.
  • REST API를 제공하는 웹 서비스.

REST API

  1. 소문자를 사용
  2. 하이픈 사용
  3. 언더바 사용하지 않음
  4. 확장자 사용 안함
  5. 어떤 구조를 따르던지 가능한 한 로직은 API 뷰에서 분리한다.
  6. 제한 없는 API 접속은 굉장히^10 위험하다.
  7. 반드시 접속을 제한해야 한다. (nginx를 이용한 접속 제한 방법도 있다.)

알게된 개념

  • status 중 410이 있다. 더는 제공되지 않는 메서드를 호출할 때 사용하며 새 버전의 API를 제공하기 위해 기존 API 서비스를 중지할 때 사용한다.
  • API 버저닝 : API의 URL 에서 버전 정보를 나타내는 것은 유용하다. api/v1/user/api/v2/user이런식이며 기존 이용자들은 이전 버전으로 API를 호출함으로서 기존 구성에 급작스러운 문제를 일으키지 않는 장점이 있다.
  • API를 구현할 때는 이용자와 고객에게 시간적 여유를 충분히 주고 이전 API 중단에 대해 경고함으로 기존 앱을 업그레이드 하여 앱 서비스가 중단되지 않도록 한다.
Comments