Spring에서의 REST설계

roon2020·2021년 3월 3일

spring

목록 보기
6/16
post-thumbnail

간략한 REST 소개

서버 역할의 변화

모바일 환경의 큰 성장으로 인한 서버에 대한 요구사항 변화.

과거 서버의 역할

  • 서버가 HTML 형태로 데이터를 가공해서 브라우저에 제공.

현대 서버의 역할 변화

  • 클라이언트가 브라우저뿐만 아니라 app이 생기면서 순수 데이터를 제공하는 쪽으로 변화. 클라이언트쪽에서 데이터만 받아서 가공하여 사용자에게 보여주는 방식.

REST

  • Representational ~의 줄임말입니다. 말이 길어서 뒷부분은 생략했습니다. 뒷부분을 몰라도 "Representational" 부분이 핵심입니다. "Representational" 이란 말은 무언가를 대표한다는 것입니다.
    URI가 어떤 자원(Resources)들을 대표하도록 설계하는 것이 REST 방식입니다. URI가 단순 주소가 아니라 자원과 의미를 연관지어진 주소가 되는 것입니다. 서버가 데이터를 반환하는 쪽으로 변화하면서 REST 방식의 사용이 증가하게 됐다고 합니다.

예시
/Students/getList
REST 방식으로 설계된 URL이라면 위 URL로 요청했을 때 Student의 리스트를 반환할 것이라 예상할 수 있습니다.

Spring에서 사용

spring도 rest 방식의 데이터 처리를 지원합니다.

어노테이션

@RestController

기존의 컨트롤러는 클래스에 @Controller 어노테이션을 붙였습니다.
@Controller는 model에 데이터를 담아서 view로 전달했습니다.
리턴의 용도는 주로 view의 jsp의 경로를 명시하는 것이었습니다.

@RestController가 붙은 클래스는 모델로 반환하는 것이 아니라 곧바로 데이터를 반환합니다.

파라미터

  1. @PathVariable
    REST 방식의 url에서 변수인 부분을 @PathVariable로 지정할 수 있습니다.
  • 예시
GetMapping(value="/{rno}",produces= {
		MediaType.APPLICATION_XML_VALUE,
		MediaType.APPLICATION_JSON_VALUE})
public ResponseEntity<ReplyVO> get(@PathVariable("rno") Long rno){
...
}
  1. @RequestBody
    클라이언트가 요청한 데이터의 내용의 타입을 변환해 줄 수 있습니다.
    예시로 클라이언트가 json 데이터를 보내오면 java 타입의 데이터로 변환해서 돌려줄 수 있습니다.

@ResponseEntity 타입

데이터를 요청한 클라이언트가 서버가 반환한 데이터가 정상적으로 처리된 데이터인지 확인하기 위해 사용됩니다.
service.remove(댓글번호)를 호출해서 정상 처리됐다면 OK 상태와 데이터를, 아니면 서버에러 상태와 데이터(비정상) ResponseEntity타입에 실어서 보냅니다.

example

@DeleteMapping(value="/{rno}",produces= {
			MediaType.APPLICATION_XML_VALUE,
			MediaType.APPLICATION_JSON_VALUE})
public ResponseEntity<String> remove(@PathVariable("rno") Long rno){
	log.info("remove:" +rno);
	return service.remove(rno)==1 ? 
	new ResponseEntity<>("success",HttpStatus.OK) 
	: new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
}

test

크롬 확장 도구 중에 "Yet Another Rest Client"를 이용해서 rest 방식의 요청을 test 해볼 수 있습니다.

profile
keep in positive mindset

0개의 댓글