03
24
728x90

REST?

Representational State Transfer의 약자로, 하나의 URI가 고유한 리소스를 처리하는 공통 방식이다. 예를 들어 /board/112로 요청할 경우 이는 게시글 중에 112번째 글을 의미하며, 전송 방식을 나타내는 method 속성의 값에 따라 리소스에 대한 추가 작업을 요청한다. REST 방식으로 제공되는 API를 REST API(또는 RESTful API) 라고 하며, 이는 트위터와 같은 Open API에서 많이 사용하고 있다.


REST API

@RestController

스프링 3버전에서는 @ResponseBody 애너테이션을 지원하면서 REST 방식의 데이터 처리를 지원했다. 하지만 스프링4 버전에서는 @RestController 애너테이션을 이용해 REST 방식의 데이터 처리를 지원한다.

 

@Path Variable

브라우저에서 요청 URL로 전달된 매개변수를 가져올 수 있다.

 

@RequestBody

브라우저에서 전달되는 JSON 데이터를 객체로 자동 변환해 준다.

 

@ResponseBody

@ResponseBody를 사용하기 전까지의 컨트롤러의 메서드들은 JSP를 뷰리졸버로 리턴한 후 브라우저에 결과를 표시했다. 그런데 컨트롤러의 특정 메서드에 @ResponseBody를 적용하면 JSP가 아닌 텍스트나 JSON으로 결과를 전송할 수 있다.

 

@ResponseEntity

@RestController는 별도의 View를 제공하지 않은 채 데이터를 전달하므로 전달 과정에서 예외가 발생 할 수 있다. 예외에 대해 좀 더 세밀한 제어가 필요한 경우 ResponseEntity 클래스를 사용하면 된다. ResponseEntity 클래스에는 body와 헤더정보, HTTP 상태코드 등을 담을 수 있으며, 앱으로 전송하도록 한다. 그러면 앱에서 HTTP 상태 코드를 인식할 수 있는 기능을 이용해 주문 상태나 예외 발생을 알려준다.

 

HTTP 상태 코드표

그룹 코드 상수 설명
정보 응답 100 CONTINUE 상태가 괜찮으며 클라이언트가 계속해서 요청하거나 요청이 완료된 경우에는 무시해도 된다는 정보를 알려준다.
101 SWITCHING_PROTOCOL 클라이언트가 보낸 upgrade 요청 헤더에 대한 응답으로, 서버에서 프로토콜을 변경할 것임을 알려준다.
성공 응답 200 OK 요청이 성공적으로 완료되었다는 의미이다.
201 CREATED 요청이 성공적이였으며 그 결과로 새로운 리로스가 생성되었다는 의미이다.
202 ACCEPTED 요청을 수신했지만 그에 응하여 행동할 수 없다는 의미이다.
리다이렉션 메시지 300 MULTIPLE_CHOICE 요청에 대해 하나 이상의 응답이 가능하다는 의미이다.
301 MOVED_PERMANENTLY 요청한 리소스의 URI가 변경되었다는 의미이다.
302 FOUND 요청한 리소스의 URI가 일시적으로 변경되었다는 의미이다.
303 SEE_OTHER 클라이언트가 요청한 리소스를 다른 URI에서 GET 요청을 통해 얻어야 할 경우 서버가 클라이언트로 직접 보내는 응답이다.
클라이언트 오류 응답 400 BAD_REQUEST 이 응답은 잘못된 문법으로 인해 서버가 요청을 이해할 수 없다는 의미이다.
401 UNAUTHORIZED 읹으되지 않았다는 의미이다.
403 FORBIDDEN 클라이언트가 콘텐츠에 접근할 권리를 가지고 있지 않다는 의미이다.
404 NOT_FOUND 서버는 요청 받은 리소스를 찾을 수 없다는 의미이다.
서버 오류 응답 500 INTERNAL_SERVER_ERROR 처리할 수 없는 내부 오류가 발생했다는 의미이다.
501 NOT_IMPLEMENTED 요청 메서드는 서버가 지원하지 않거나 처리할 수 없다는 의미이다.
503 SERVICE_UNAVAILABLE 서버는 요청을 처리할 준비가 되지 않았다는 의미이다.

REST 방식으로 URI 표현하기

서버에 데이터를 조회하는 것뿐만 아니라 추가, 수정, 삭제 기능도 REST 방식으로 요청해야 한다. 이때 서버에 어떤 행위를 요청할 것인가는 HTTP 메서드를 이용해 처리한다.

 

HTTP 메서드의 기능

메서드 설명
POST 추가(Create)
GET 조회(Select)
PUT 수정(Update)
DELECT 삭제(Delect)

 

다음은 각 작업을 REST 방식으로 요청하는 전형적인 URI의 예이다.

/작업명/기본키 + 메서드 + 데이터
  • 작업명 : 요청하는 작업 종류
  • 기본키 : 요청하는 작업에 해당하는 대상의 기본키
  • 메서드 : 요청하는 기능
  • 데이터 : 기능 수행에 필요한 JSON 데이터

 

REST로 게시판 기능 관련 URI 만들기

메서드 URI 설명
POST /boards + 데이터 새 글 등록하기
GET /boards/133 133번 글 조회하기
PUT /boards/133 + 데이터 133번 글 수정하기
DELECT /boards/133 133번 글 삭제하기

URI 항목에서 /boards는 게시판 작업을 의미하고 /133은 게시판 테이블의 133번 글에 대해 작업을 하겠다는 의미이다. 메서드는 각 URI의 구체적인 기능을 의미한다. 예를 들어 GET이면 '133번 글의 조회를 요청한다'의 의미이고, POST이면 '전달된 데이터를 새 글로 등록하겠다'라는 의미이다.

728x90
COMMENT