[Spring] REST API란??

CodeByHan·2024년 9월 21일

스프링

목록 보기
3/33
post-thumbnail

프로젝트를 만들고 공부할 때 REST API를 많이 사용하는데 왜 사용하지??장점이 뭘까??라는 생각을 많이 하게 되었다.
그래서 REST API에 대해 찾아보고 정리하는 시간을 가지게 되었다.

REST API

REST(Representational State Transfer)란?

  • HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고,
    HTTP 메소드(POST, GET, PUT, DELETE, PATCH)를 통해 해당 자원(URI)에 대한 CRUD 연산을 적용하는 것을 의미한다.
  • 구성
    • 자원(resource) - URI
    • 메소드(method) - GET, POST, PUT, DELETE
    • 표현(Representations) - 리소스의 상태는 JSON, XML 등의 형태로 교환

REST API

  • 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것을 의미한다.
    크게 URL, HTTP 메서드, 요청 매개변수 또는 요청 바디로 구분된다.
  • REST한 API를 REST API 또는 RESTful API라고 부르기도 하고 Restful하다~ 라고도 한다.

REST vs RESTful

  • REST : 웹상의 자원을 이름으로 구분하고 해당 자원의 상태를 주고 받는 모든 것을 의미.그래서 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하는 아키텍쳐 스타일
  • RESTful : REST를 기반으로 만들어진 API,REST 원칙을 잘 지킨 서비스 API를 의미한다.즉,REST 원리를 잘 따르는 시스템은 RESTful하다고 표현

API

  • 다른 소프트웨어 시스템과 통신하기 위해 따라야 하는 규칙

REST 특징

  • Server-Client 구조
    • 클라이언트와 서버가 독립적으로 분리되어 있어야 함
  • Stateless
    • 요청 간에 클라이언트 정보가 서버에 저장되지 않음
    • 서버는 각각의 요청을 완전히 별개의 것으로 인식하고 처리
  • Cacheable
    • HTTP 프로토콜을 그대로 사용(HTTP의 특징인 캐싱 기능을 적용)
    • 대량의 요청을 효율적으로 처리하기 위해 캐시를 사용
  • 계층화(Layered System)
    • 클라이언트는 서버의 구성과 상관 없이 REST API 서버로 요청
  • 인터페이스 일관성(Uniform Interface)

REST의 장단점

장점

  • HTTP 프로토콜의 인프라를 그대로 사용하므로 REST API 사용을 위한 별도의 인프라를 구출할 필요가 없음
  • HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능
  • REST API 메시지가 의도하는 바를 명확하게 나타내므로 의도하는 바를 쉽게 파악 가능
  • 서버와 클라이언트의 역할을 명확하게 분리

단점

  • 표준이 존재하지 않음
  • 사용할 수 있는 메소드가 한정적(GET, POST, PUT, DELETE)
  • 브라우저를 통해 테스트할 일이 많은 서비스라면 쉽게 고칠 수 있는 URL보다 Header 값이 왠지 더 어렵게 느껴짐
  • 구형 브라우저가 아직 제대로 지원해주지 못하는 부분이 존재 (PUT, DELETE를 사용하지 못하는 점)

근데 REST를 왜 써??

  • 애플리케이션 분리 및 통합
  • 다양한 클라이언트의 등장
  • 최근 서버 프로그램은 모바일 디바이스에서도 통신을 할 수 있어야 함
  • 멀티 플랫폼에 대한 자원을 위해 서비스 자원에 대한 아키텍처를 세우고 이용하는 방법을 모색한 결과, REST에 관심을 가지게 됨

RESTful은 왜??

  • 이해하기 쉽고 사용하기 쉬운 REST API를 만들기 위해
  • RESTful한 API를 구현하는 근본적인 목적은 일관적인 컨벤션을 통한 API의 이해도 및 호환성을 높이는 것, 따라서 성능이 중요한 상황이라면 굳이 RESTful한 API를 구현할 필요 X

참고 : https://m.blog.naver.com/codingbarbie/223233477242
참고 : https://velog.io/@99mon/Spring-REST-API%EB%9E%80
참고 : https://jy-beak.tistory.com/122

profile
노력은 배신하지 않아 🔥

0개의 댓글