웹 개발을 공부하거나 채용 사이트에서 웹 개발에 관한 항목에 항상 뜨는 REST, 사실 나도 대학교 졸업 작품을 만들면서 MVC 구조도 모르고, REST API 조차 모르는 상황에서 머리부터 부딪혀 가며 만들었던 기억이 난다.
그렇기에 Controller에 모든 로직이 쓰여져 있고, RESTful하지도 않은 로직으로 겨우 구동만 되는 수준의 프로그램을 만들었었다 ㅡㅡ;;
그렇기에 더욱 공부해야만 하지 않을까?
그래서 이번에는 REST API에 대해서 공부해보려고 한다.
REST란 Representational State Transfer의 약자로 다른 블로그 글의 경우 자원의 대표와 상태 전달이라고 해석하고 있었다.
또한 REST라는 개념은 2000년의 로이 필딩(Roy Fielding)이라는 사람으로부터 만들어졌다.
간단한 의미로는, 웹 상의 자료를 HTTP위에서 SOAP이나 쿠키를 통한 세션 트랙킹 같은 별도의 전송 계층 없이 전송하기 위한 아주 간단한 인터페이스를 말한다고 한다.
그러니까 HTTP의 우수성을 제대로 활용하기 위한 아키텍처로써 간단하지만 강력하다고 한다.
REST 4가지 속성 및 장점
내가 공부한 바에 따르면 4가지 속성이 존재한다고 한다.
- 서버에 있는 모든 리소스는 각 리소스당 클라이언트에 접근할 수 있는 고유의 URI가 존재.
- 모든 요청은 클라이언트가 원하는 정보를 보내므로 세션 정보를 보관할 필요가 없음.
- HTTP메소드를 사용 -> GET, POST, PUT, DELETE
- 서비스 내에 하나의 resource가 주변에 연관 된 리소스들과 연결되어 표현이 되어야 한다.
*여기서 말하는 리소스는 이미지, 영상, 문서, 파일 등등의 모든 것들을 말함
여기서 많이 다룰 내용은 아마도 3번 항목이 되지 않을까 싶다.
RESTful한 URI
RESTful하게 짜여진 URI는 어떤 모습을 하고 있을까?
내가 공부한 바로는 이러한 리소스들이 가급적이면 "동사"보다는 "명사"의 형태를 띄고 있는 것이 좋다고 한다.
예를 들어보자.
http://www.restful.com/habit/ski/2020
여기서 알 수 있는 것은 점차적으로 슬래시를 기준으로 세부 사항으로 나아간다는 것이다.
취미 -> 스키 -> 2020년도 라고 알 수 있듯이 명사로 URI를 이루게 되면 계층 구조를 알 수 있게 된다.
또한 슬래시(/)는 계층을 나타내므로 마지막에는 '/' 를 쓰면 안된다.
간단히 리스트로 정리하자면 이렇다.
- URI는 동사보다는 명사를 써라.
- 슬래시는 계층 구조로 쓰인다.
- '_'(언더바) 보다는 '-'(하이픈)을 써라.
- 파일의 확장자는 표시하지 않는다.
HTTP의 메소드 -> CRUD
여기가 내가 생각하는 가장 중요한 부분이다.
CRUD기능을 HTTP 메소드로 구분과 구현을 할 수 있다.
옛날의 나 같았으면 업로드 하는데 uploadPost 같은 이름을 쓰거나, 지운다면 deletePost같은 이름을 썼을 것이다. (그리고 URI에서는 되도록이면 소문자를 써야한다.)
또한 모든 요청을 RequestMapping으로 받았을 것이고, 그로 인해 데이터 길이 제한과 난잡하고 이해하기 힘든 코드들로 점칠되어 있을 것이다 ㅡㅡ;;
이러한 문제점을 REST API는 꽤나 간단 명료하고, 흔히들 말하는 '스마트'하다는 느낌이 나한테 팍! 오게 되었다.
REST API를 겉핥기 식으로 알고만 있었지 이렇게 깊게 파고든 적은 정말 오랜만인 것 같다.
기본 URI를 정하고 비교해보자. -> http://www.restful.com
- POST : 리소스를 생성하는 데에 쓰인다. -> http://www.restful.com/post
- GET : 리소스나 리소스들의 내용이나 목록을 표시하는데 쓰인다. -> http://www.restful.com/post/1 또는 http://www.restful.com/post
- PUT : 리소스의 내용을 수정할 때 쓰인다. -> http://restful.com/post/3 (여기서 신기한 점은 POST와 PUT의 차이인데, POST와는 다르게 PUT은 별도의 식별자가 필요하다는 것이다.)
- DELETE : 리소스를 삭제하는데 쓰인다. -> http://restful.com/post/1
여기까지 간단히 RESTful하게 개발하는 규칙에 대해서 알아보았다.
굉장히 간단하고 효율적인 API라는 것에 새삼 놀라고, 이 것을 좀 더 일찍 알았다면.. 하고 후회하고 있다.
앞으로 웹 개발을 할 때 제대로 RESTful하게 짜도록 해봐야겠다.
'Spring & Boot' 카테고리의 다른 글
[Spring] @ResponseBody와 @RequestBody (0) | 2020.09.02 |
---|---|
[Spring] MVC 패턴 - Model1, Model2 (0) | 2020.09.02 |
[Spring] D.I (Dependency Injection) 의존성 주입, 도대체 뭘까? (0) | 2020.09.02 |
[Spring] Spring Framework, 왜 쓸까? (0) | 2020.09.01 |