본문 바로가기

CS/Web

REST API

REST : REpresentational State Transfer, 웹(HTTP)의 장점을 활용한 아키텍쳐
REST의 개념과 구성, RESTful하게 API를 설계하는 방법과 그 장점을 이해한다.

<REST API>

 

REST API | 👨🏻‍💻 Tech Interview

REST API REST : 웹 (HTTP) 의 장점을 활용한 아키텍쳐 1. REST (REpresentational State Transfer) 기본 REST의 요소 Method Method 의미 Idempotent POST Create No GET Select Yes PUT Update Yes DELETE Delete Yes Idempotent : 한 번 수행하냐

gyoogle.dev


REST 메소드 4가지 설명

  • GET : select, 정보를 조회
  • POST : insert, 정보를 저장
  • PUT/PATCH : update, 정보를 수정
  • DELETE : delete, 정보를 삭제

 

POST , GET 차이는?

  • GET
    • 서버로부터 정보를 조회하기 위해 설계된 메소드 
    • 요청 시 필요한 파라미터를 쿼리스트링으로 url 뒤에 노출시켜 전송 => 길이 제한이 있어 많은 양의 데이터를 보내기 어려움
    • 불필요한 요청을 제한하기 위해 요청이 캐시될 수 있음 => js, css, 이미지 같은 정적 컨텐츠는 데이터 양이 크고 변경될 일이 적어 반복해서 동일한 요청을 보낼 필요 X (캐싱 처리 되므로)
    • Idempotent하다 => 서버에 동일한 요청을 여러 번 전송해도 동일한 응답이 돌아와야 함
  • POST
    • 리소스를 생성 및 변경하기 위해 설계된 메소드 
    • 요청 시 필요한 파라미터(데이터)를 Body로 전송 => 대용량 데이터를 전송할 수 있음, url노출이 안되더라도 개발자 도구에 노출되기에 민감 데이터의 경우 반드시 암호화처리 후 전송해야 함!
    • Non-idempotent하다 => 서버에 동일한 요청을 여러 번 전송해도 응답은 항상 다를 수 있음

 

REST란?, RESTful하게 API를 디자인한다는 게 무슨 뜻?

  • REST?
    • 자원의 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든 것
    • WWW(World Wide Web)과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 개발 아키텍처의 한 형식
    • REST는 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일
    • REST는 네트워크 상에서 Client와 Server 사이의 통신 방식 중 하나
  • RESTful하게 API를 디자인하는 것?
    • API : Application Programming Interface로, 데이터와 기능의 집합을 제공하여 프로그램간 상호작용을 촉진하고 서로 정보를 교환 가능하도록 하는 것
    • API를 설계할 때, 각각의 자원을 나타내는 URI와 메서드만 보고도 어떤 자원에 어떤 행위를 가할 것인지 명확히 파악할 수 있게 디자인 방법(ex. 모든 자원에 명사를 사용함)

 

REST API 구성요소?

  • 자원(Resource) : URI
    • 모든 자원에 고유한 ID 존재, 이 자원은 Server에 있음
  • 행위(Verb) : HTTP Method
    • HTTP 프로토콜의 Method를 사용
    • GET, POST, PUT, DELETE 제공
  • 표현(Representation of Resource)
    • Client가 자원의 상태에 대한 조작을 요청하면, Server는 이에 적절한 응답(Representation)을 보냄
    • Json 혹은 XML을 통해 데이터 주고 받는 것이 일반적

 

REST API의 장단점, 특징?

  • 장점
    • HTTP 프로토콜의 인프라를 그대로 활용가능 => 별도의 인프라 구축할 필요 X
    • Rest API 메시지가 의도하는 바를 명확하게 나타내므로, 어떤 자원에 어떤 행위(메소드)를 가할건지 명확히 파악 가능
  •  단점
    • 사용할 수 있는 메소드 4개(GET, POST, PUT, DELETE)
    • 구형 브라우저가 아직 제대로 지원해주지 못하는 부분 존재(ex. put, delete 사용 X)
  •  특징
    • Server-Client(서버-클라이언트 구조) : 자원이 있는 Server, 자원을 요청하는 Client로 구성
    • Stateless(무상태) : 서버는 각각의 요청을 완전히 별개의 것으로 인식하고 처리 => Client의 context를 서버에 저장하지 않음
    • Cacheable(캐시 처리 가능) : Http 프로토콜을 그대로 사용하므로 기존 인프라에서 지원하는 캐싱 기능 적용 가능
    • Layered System(계층화)
    • Code-On-Demand(optional)
    • Uniform Interface(인터페이스 일관성) : HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용 가능 => 특정 언어나 기술에 종속 X

 

RESTful API를 이용해서 하나의 큰 서비스 애플리케이션을 여러 모듈화된 작은 서비스 애플리케이션으로 나눌 수 있는 서비스란?

  • MSA(Micro Service Architecture) : rest api 기능 단위로 서버를 나누어 설계하는 서비스 아키텍쳐
    • 작은 기능의 오류로 인해 전체 서버가 영향을 받는 경우를 줄임
    • 작은 코드 수정으로 전체 서비스를 재배포할 필요를 줄임
    • 서비스 확장성이 높고 지속적인 배포(무중단 서비스)가 필요한 경우 유리한 아키텍쳐
    • 하지만 서버가 여러 개 이기에, 그만큼 모니터링 리소스가 많이 들고 설계가 복잡하여 작은 서비스의 경우 그냥 모놀리식 서비스로 설계하는 게 나음

 

REST API에서 자원(Resource)으로 사용되는 URI와 URL의 차이점?

  • URI : Uniform Resource Identifier, 통합 자원 식별자로 인터넷에 있는 자원을 나타내는 유일한 주소, URI의 하위 개념으로 URL과 URN이 있음 => ex. https://board/main?id=30000&page=12
  • URL : Uniform Resource Locator, 통합 자원의 위치로 네트워크 상에 자원이 어디 있는지를 알려주기 위한 규약 => ex. https://board/main
  • URN : Uniform Resource Name, 통합 자원 이름

'CS > Web' 카테고리의 다른 글

SSR & CSR  (0) 2021.01.03
인증 & 인가, 로깅  (0) 2021.01.03
Web Server & WAS  (0) 2021.01.02
쿠키&세션, Http Status code  (0) 2021.01.02
브라우저 동작  (0) 2021.01.02