REST 설명

시작하기 전에

Cafe24 챌린지 Back-End분야에서 REST를 몰라서 코딩테스트에 이상한 답을 적어 보낸 기억이 난다. 이렇게 떡하니 물어본걸 보면 그만큼 업게예서 REST를 자주 쓰고 있고 활용할 수 있는 능력을 중요시 여기는 것 같다. 물론 난 몰랐어서 광탈했지만 말이다.

REST란?

정의로보면, REpresentational State Transfer 약자이다. Representational 표현 State 상태를 Transfer 주고받는다라는 말이다. 이 때 주고받는 대상은 자원이다. 자원을 GET 보기, POST 등록, PUT 수정, DELETE 삭제라는 CRUD 형태로 다루게 된다. 이 때 자원이란 DTO나 DB에 있던 값을 의미한다. 문서, 그림, 데이터, 해당 소프트웨어 자체도 모두 포함한다.

이렇게 표현된 자원들은 클라이언트와 서버쪽에서 서로 주고받는다. 주고받는 형태는 JSON 또는 XML을 통해 데이터를 주고받게 된다. REST는 즉, 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기위해 사용하는 아키텍처 스타일이다. 설계자에 따라 상품이 다른 것이 나오듯 자원을 어떻게 사용할 것인가를 설계하는 것이다.

REST 는 Client와 Server 사이의 통신 방식 중 하나이다. HTTP URI(Uniform Resource Identifier)를 통해 자원을 명시하고, 해당 자원에 CRUD을 적용하는 것을 의미한다. 지금까지 Create(POST), Read(GET) 은 많이 접했었지만, Update(PUT), Delete(DELETE)는 많이 못 본 개념이었다.

POST나 GET은 지금까지 많이 본 개념이니 너무 어려워하지 않고 설계할 수 있다. RESTful 은 누군가 공식적으로 발표한 적은 없지만, REST처럼 쓰기위한 방법은 무엇일까 고민해서 만들어진 통념적인 개념이다. 예를 들어 Java를 클래스 개념없이, 아니면 객체 지향의 개념없이 쓴다면 Java를 제대로 쓴다고 보기 힘들다. 이를 사용하지 않는다고 누군가 Java를 사용하지 않는거라고 표준을 정해둔 건 아니다. 하지만 Java를 개념있게 쓴다고 보기 힘든 것처럼, REST 또한 가이드라인을 지키지 않는다면 제대로 쓴다고 볼 수 없다. REST를 REST처럼 쓰기 위한 4가지는 다음과 같다.

  • 자원 식별
  • 메시지를 통한 리소스 조작
  • 자기 서술적 메시지
  • 하이퍼 미디어

REST 설계

'네트워크 아키텍처 원리'라고 볼 수 있다. 설계기준은 다음과 같다.

  • URI는 명사를 사용해야 한다.
  • 슬래시( / )로 계층 관계를 표현한다. 하지만, URI 마지막은 슬래시를 붙이지 않는다.
  • URI는 소문자로만 구성한다.
  • 하이픈(-)을 사용할 수 있지만, 언더바는 사용하지 않는다.

설계 자체는 아래와 같이 만들 수 있다.

기능자원HTTP 메소드
목록/articlesGET
등록하기/articlesPOST
상세보기/articles/{articleNo}GET
수정하기/articles/{articleNo}PUT
삭제하기/articles/{articleNo}DELETE

REST API 문서화

설계가 끝나고 그대로 Spring을 사용한다면 Controller 에 설계가 된대로 메소드를 구현하면 된다. 메소드 구현이 끝나고나면, Swagger2 를 쓰면 이를 문서화 할 수 있다.

Spring 의 Controller 에서 요렇게 써주면, 밑의 파란색이 띄워지는 것처럼 자동으로 문서화된다.

@GetMapping
public ResponseEntity<List<Article>> list(){
	log.info("list");
		
	List<Article> articleList = new ArrayList<>();
	
	Article article = articleService.articleList();
    
	ResponseEntity<List<Article>> entity = new ResponseEntity<List<Article>>(articleList, HttpStatus.OK);
		
	return entity;
}

마무리하며

이번에 배우면서 REST는 웹 설계 황무지에 개척할 수 있는 한 기준을 제시한 도구 같았다. 평소 마음대로 매핑명을 정했더라면, 이번 REST를 쓰면서 가독성 좋게 체계적으로 정리할 수 있었다. 지금까지 매핑명을 정할 때도 동사형을 사용했었는데 REST에선 명사형을 추천해주고 있다. 명사형도 사용해보고 적용에 신경 쓰려고 한다.

좋은 웹페이지 즐겨찾기