REST ?
REST 는 Representation State Transfer 의 약자로, 소프트웨어 프로그램 아키텍처의 한 형식이다.
문자 그대로는 Representation (표현, 묘사) State (상태) Transfer (전송) 을 뜻하고,
풀어서 말하면 웹 어플리케이션의 어떤 상태 또는 정보를 전송하는 표현 방식이다.
REST 는 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에,
단순하고 가벼운 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일이다.
REST 의 구체적인 개념
- HTTP URI(웹의 모든 자원들을 하나하나 가리킬 수 있는 고유한 주소. ex_ /users/mypage/1 )를 통해 자원을 명시하고, HTTP Method를 통해, 자원에 대한 작업 CRUD(Create, Read, Updat,e Delete)을 처리하는 방식이다.
- 보통 웹에서의 통신이라하면 HTTP를 이용한 통신을 말한다.
- 클라이언트 웹브라우저에서 URI를 입력
- 웹브라우저(크롬, 사파리, 익스플로러 등)가 URI를 이용해 HTTP request 메세지를 보냄
- 웹서버는 URI와 매핑된 서버 내 문서나 프로그램을 찾아 CRUD를 처리함
- 처리 후에 웹 서버에서 HTTP response 메세지를 클라이언트 웹브라우저로 보냄
- 클라이언트 웹브라우저는 받은 HTTP response 메세지를 웹브라우저에 맞게 변환해서 표시
- 보통 웹에서의 통신이라하면 HTTP를 이용한 통신을 말한다.
- REST는 자원 기반의 구조 (ROA: Resource Oriented Architecture) 설계 중심에, Resource 가 있고 HTTP Method 를 통해 Resource 를 처리하도록 설계된 아키텍처이다.
- 웹의 모든 자원에 고유한 ID 인 HTTP URI 를 부여한다.
REST 의 구성요소
- 자원 Resource : HTTP URI 모든 자원에는 고유한 아이디( = HTTP URI )가 존재하고, 이 자원은 서버에 속한다.
- 자원에 대한 행위 Verb : HTTP Method (GET, POST, PUT/PATCH, DELETE)
- 표현 Representation of Resource : JSON, XML, TEXT, RSS 등 여러 형태의 representation
REST API ?
그렇다면 REST API 란 무엇이고 왜 필요한 것일까?
최근 서버 프로그램은 웹 브라우저는 물론이고, 아이폰, 안드로이드와 같은 애플리케이션과의 통신에도 대응할 수 있어야한다. 따라서 플랫폼에 맞추어 새로운 서버를 만들기보다, 범용적으로 사용할 수 있는 서버 디자인이 효율적인 것이다.
API (Application Program Interface)는 컴퓨터에서 처리할 수 있는 기능들을 모아둔 것을 뜻하는데,
REST API 와 다른 API 의 차이점은 기능이 컴퓨터(클라이언트)에서 처리되는 게 아니라 HTTP 프로토콜의 URI 주소를 이용하여 처리된다는 것이다!
METHOD | 역할 |
POST | 리소스 생성 |
GET | 리소스 읽기 |
PUT | 전체 변경하기 |
PATCH | 부분 변경하기 |
DELETE | 삭제하기 |
REST API 의 장점은 아래와 같다.
- HTTP 프로토콜의 인프라를 그대로 사용하기때문에 REST API 사용을 위한 별도의 인프라 구축이 필요없다
- 모든 플랫폼에서 범용적으로 사용 가능하다
- 의도하는 바를 명확히 나타내므로 의도를 쉽게 파악할 수 있다
- 각 컴포넌트들의 독립적인 배포가 가능하기때문에 서비스 디자인에서 생길 수 있는 문제를 최소화할 수 있다
- 시스템을 분산해 확장성과 재사용성을 높여 유지보수 및 운영이 편리해진다
하지만 단점으로,
- 아직 표준이 존재하지 않아 아직 정의가 필요하다
- 클라이언트와 서버가 분리되어있어 상호작용을 해야하는 어플리케이션 개발에는 적당하지 않다
- HTTP Method 가 제한적이다 (CRUD 메소드 만으로 처리하기에 모호한 표현이 있을 수 있다)
올바른 REST API 의 설계
이제 올바른 REST API 설계를 위해 지켜야하는 몇가지 규칙을 알아보자.
- URI 는 정보의 자원을 표현해야함 (URI 만으로 내가 어떤 자원을 제어하려는 지 알 수 있어야한다)
- 자원에 대한 행위는 HTTP Method 으로 표현
- 슬래시 ( / ) 는 계층 관계를 나타낸다
- 마지막에 슬래시 ( / ) 를 포함하지 않는다
- 밑줄 ( _ ) 은 대신 하이픈 ( - ) 을 사용한다
- 소문자만 사용한다
- 파일 확장자는 포함하지 않는다
- URI 에 행위(HTTP Method)는 포함하지 않는다
Good Example http://kiyoung-noona.tistory.com/newpost/1
Bad Example http://kiyoung_noona.tistory.com/post/newPost/1/
RESTful API ?
RESTful API 는 REST 방식을 올바르게 사용한 API 이다.
일반적으로 REST API 를 제공하는 웹서비스는 많지만, REST API 를 사용한 모든 웹서비스가 RESTful 한 것은 아니다. 모든 CRUD 기능을 POST 로 처리하는 API 혹은 설계 규칙을 올바르게 지키지 못한 REST API 는 RESTful 하지 못하다고 할 수 있다.
지금까지 REST API 에 대해 알아봤다.
기존에 만들었던 서비스에도 REST API를 만들어보기는 했지만,
앞으로 개발할 때 오늘 공부한 내용을 중심으로 더 신경쓰며 개발하도록 해야겠다 !!
[참고]
'𝑾𝑬𝑩 > 𝑆𝑃𝑅𝐼𝑁𝐺' 카테고리의 다른 글
[프로젝트] 빌드 관리 도구 선택 - Maven VS Gradle (0) | 2022.12.28 |
---|---|
[Spring] AOP (0) | 2022.11.19 |
JPA 와 MyBatis 의 차이 (ORM, SQL Mapper) (0) | 2022.11.17 |
[Spring] JAR or WAR 차이 (0) | 2022.11.03 |
[Spring] DI, 의존성을 주입하는 여러가지 방법 (0) | 2022.04.05 |