오늘은 웹 개발자라면 알고 있어야 하는 개념인 REST에 대해 적어보려고 합니다. 공부의 목적도 있는 게시물이라 틀린 부분이 있다면 댓글로 알려주시면 감사하겠습니다.
___
RESTful API란 말 그대로 REST한 API로 이해할 수 있습니다. 먼저 API란 Application Programming Interface로 프로그램과 프로그램을 연결해주는 일종의 프로토콜로서, 정보 제공자와 정보 사용자 간의 계약으로 볼 수 있습니다. 예를 들어 날씨 서비스 API에서는 사용자는 우편번호를 제공하고, 생산자는 해당 지역의 온도를 응답하는 것입니다.
그렇다면 REST(REpresentational State Transfer)란 무엇일까요? 이는 프로토콜이나 표준이 아닌[1] 아키텍처 스타일입니다. 그렇다면 기존의 API 개발 방식과 어떤 점에서 다른 걸까요?[2] 다음 예를 통해 REST 인터페이스(API) 규칙을 살펴볼 수 있습니다.
PUT /users/3 HTTP/1.1
{
"name":"terry",
"age":"32"
}
즉, REST 인터페이스 규칙은 크게 세 가지로 구성되는데요.
- HTTP Method : GET/POST/PUT/DELETE와 같이 HTTP 프로토콜 사용 시 호출 방식
- Resource : 웹 안에서 식별을 위한 개념으로 URI(Uniform Resource Identifier) 사용
- Message : HTTP header, body, 응답상태코드
만약 이러한 규칙을 지키지 않은 아래와 같은 예는 REST 안티 패턴이라고 할 수 있습니다.
POST /users HTTP/1.1
{
"getuser":{
"name":"terry",
"age":"32"
}
}
즉, Insert(Create)성 오퍼레이션이 아님에도 불구하고 메세지 Body에 오퍼레이션명을 넘기는 형태입니다.
한편, Spring MVC를 사용해본 자바 웹 개발자라면 @RestController 어노테이션에 대해 본 적이 있을 것입니다. 이는 스프링 프레임워크에서 RESTful 웹 서비스를 보다 쉽게 개발할 수 있도록 Spring 4.0에 추가된 것으로 @Controller와 @ResponseBody 어노테이션의 조합입니다. 그렇다면 @RestController와 @Controller의 차이는 무엇일까요? 바로 HTTP Response Body가 생성되는 방식의 차이[3]입니다.
따라서 서버(REST)는 API 제공, 클라이언트는 사용자 인증이나 컨텍스트(세션, 로그인 정보 등)를 직접 관리하는 구조로 각각의 역할이 확실히 구분되기 때문에 상호간 의존성이 줄어들게 되고, 이것이 바로 REST의 특징 중 하나인 Client/Server의 독립성입니다. 더 상세한 내용은 다음 링크[4]를 참고하면 좋을 것 같습니다(영상을 보면 글이 틀린 것 같지만...).
___
1. REST에 대한 W3C의 권장 사항은 없습니다.
2. 응용 프로그램이 기능을 구현하는 방식의 차이를 살펴보면 SOA(Service Oriented Architecture)와 ROA(Resource Oriented Architecture)로 구분할 수 있습니다. 예를 들어 사진 제공 서비스의 경우에 사진을 제공하는 서비스냐, 사진에 대한 리소스 제공이냐로 보는 것의 차이입니다. 전자의 경우처럼 SOA는 서비스, 즉 동사를 기반으로 설계되고 구현되며 ROA는 리소스, 즉 명사를 기반으로 설계되고 구현됩니다. 이중 REST는 ROA의 개념으로 구현된 웹 서비스 아키텍처(연동방식)라고 볼 수 있습니다.
3. Rather than relying on a view techonology to perform server-side rendering of the data to HTML, rest controller simply populates and returns the domain object itself. The object data is written directly to the HTTP response as JSON or XML and parsed by client to further process it either for modifying the existing view of for any other purpose.
4. NAVER D2
___
참고자료
'공부 > 기타' 카테고리의 다른 글
Content-Type과 MIME-Type (0) | 2021.12.20 |
---|---|
정규식 (0) | 2021.01.03 |
댓글