어깨서기 개발자

RESTful 웹서비스의 이해 본문

Open API

RESTful 웹서비스의 이해

직장인쏠트 2018. 8. 24. 09:48

AnuglarJS  앱의 도메인 모델 로직은 클라이언트와 서버 사이에 분산돼있다.

서버에는 주로 데이터베이스와 같은 영속성 저장소가 있으며, 이를 관리하는 로직이 들어 있다.


예를 들어 SQL 데이터베이스일 경우 필요한 로직으로 데이터베이스 서버 커넥션을 여는 로직, SQL 쿼리 실행 로직, 결과를 클라이언트로 보낼 수 있게 처리하는 로직등이 포함된다.


클라이언트사이드 코드에서는 데이터 저장소에 직접 접근하지 않는 것이 좋다. 이렇게 하면 클라이언트와 데이터 저장소 사이의 의존도가 높아져 단위 테스트를 하는게 어려워지고, 클라이언트 코드를 바꾸지 않고 데이터 저장소를 바꾸기도 그만큼 어려워진다. 


서버를 사용해 데이터 저장소에 대한 접근을 중재하면 이와 같은 의존성을 줄일 수가 있다. 클라이언트의 코드에서는 서버로부터 데이터를 가져오고 전달하는 책임은 있지만 데이터가 내부적으로 어떻게 저장되고 어떤 식으로 접근하지는지에 대한 상세 정보는 모른다.


클라이언트와 서버 사이에 데이터를 주고 받는 방식에는 여러 가지가 있다. 이 중 가장 많이 사용하는 방식으로 Ajax(비동기식 자바스크립트 및 xml) 요청을 서버사이드 코드로 보내 서버에서 JSON을 전송하게 하고, HTML 폼을 사용해 데이터를 변형하는 방식이 있다.



이 방식을 잘 동작하며, HTTP 요청의 성격을 그대로 사용해 데이터의 생성, 조회, 수정, 삭제(CRUD)작업을 수행하는 RESTful 웹서비스의 기초가 된다.



RESTful 웹 서비스와 관련된 표준 URL 명세는 없지만 기본적으로 URL이 가리키는 내용을 바로 알 수 있는 URL을 사용하는 게 관례다. 


http://www.devsoon.com/developer/soon


이 경우 developer이라는 데이터 객체 컬렉션이 존재하고, 이 URL이 soon이라는 컬렉션 내 특정 객체를 가리키는 것을 알 수 있다.



방식 

설명 

GET

URL을 통해 지정한 데이터를 조회한다. 

PUT

URL을 통해 지정한 데이터를 업데이트한다. 

POST

주로 폼 데이터 값을 데이터 필드로 사용해 새 데이터 객체를 생성한다. 

DELETE 

URL을 통해 지정한 데이터를 삭제한다. 




HTTP 방식과 데이터 저장소에서의 작업 사이의 매핑은 어떤 형식으로든 구현할 수 있지만 앞의 표에 설명한 관례를 가능한 한 충실히 따를 것을 권장한다.


일반적인 방식에서 벗어날 경우에는 HTTP 명세에 정의된 HTTP 방식의 성격을 존중하도록 주의해야 된다. 예를 들어 GET방식은 수행하는 응답에서 데이터를 조회하기만 하고 수정해서는 안된다.



PUT과 DELETE 방식은 멱등적이다. 이 말은 여러 개의 동일한 요청이 단일 요청과 동일한 효과를 지녀야 한다는 것이다. 따라서 /developer/soon URL을 지정해 DELETE 방식을 사용하면 첫번 째 요청에서는 developer 컬렉션에서 soon 객체를 삭제하고, 이후 요청에서는 아무 일도 하지 말아야 한다.


POST 방식은 효과가 없지도, 멱등적이지도 않다. 그래서 RESTful 최적화 과정에서 객체 생성 및 수정을 처리하는데 이 방식을 자주 사용하고 한다. soon 객체가 없을 경우 POST 방식을 사용하면 객체를 생성하고, 이후 같은 URL로 POST 요청을 보내면 이 요청에서는 생성된 객체를 업데이트하게 된다.



Comments