관리 메뉴

공부한것들을 정리하는 블로그 입니다.

질문 및 답변 : Restful의 정의에 대해 잘 모르겠습니다. 본문

잡담/개발자로서 읽을거리

질문 및 답변 : Restful의 정의에 대해 잘 모르겠습니다.

호 두 2019. 12. 20. 14:50
반응형

 

 

저도 REST에 대해 처음 공부했을때 이런 의문을 품었던 것 같습니다.
만약 그때로 돌아간다면, 당시의 저에게 해주고픈 간단한 내용이, 답변으로 적당히 있어서 공유합니다.

 

 

질문 :

Restful의 정의에 대해 잘 모르겠습니다.

안녕하세요.
한국와서 구직활동하면서 Restful API라는 기술 요구를 굉장히 많이 봐서 공부하고싶습니다.
이번 업무에서도 사용하는 것 같구요.
그런데 조사를 해봐도 정의가 애매모호 하고 좀 어려운 것 같습니다.
이전 일본 근무에서도 이게 Restful API다 라는 말은 못들었지만 사실상 내가 썻던게 Restful API기술아니였나? 싶기도 하구요.

일단 제가 조사해서 이해하고있는 것은 이렇습니다.
스프링의 MVC나 파이썬의 MVT를 예로들면.
기본적으로 컨트롤러에서 Url을 맵핑하고, 사용자가 그 URL을 부르면 정해진 처리 후 HTML 파일을 리턴하여 화면을 표시합니다.
이게 Restful API가 아닌 일반 웹.
HTML이 아닌 데이터(변수, 리스트, 클래스 등등)을 리턴해주는것이 Restful API.
간단하게 이렇게 이해하였는데 맞나요?
정보를 많이 찾아볼수록 더 헤깔립니다. 어렵게 설명된 글을 볼떄마다 이해하고 있는게 틀린 것 같다는 느낌도 들구요.
제가 이해한게 맞다면, 파이썬으로 치면 Render를 리턴하면 Restful API개발 방식이 아니고.
Model이나 값을 HttpResponse로 리턴하면 Restful API다.
라고 이해하고 있습니다.
잘못이해하고 있는 부분이나 보완할 부분이 있다면 알려주시면 감사하겠습니다


 

답변 :

RESTful 은 특별한 기술이 아니라 그냥 개념 같은겁니다.
뭘 리턴하던 그건 RESTful이랑은 상관없으니 조사하고 이해하신건 잊으세요.

가장 먼저 통신을 할때(프론트-백 or service-service 등등) RESTful 하게 API를 쓴다. 라고 이해하셔야 하고
RESTful 하다는게 뭐냐하면
자원을 URL 에 표기하고 그 동작을 http method(get, post, delete, put) 로 정의하는 겁니다.

예를 들어 게시판의 1번 글을 가지고 올때
/board?id=1 이렇게 보내는게 아니라
(GET) /board/1 URL을 이렇게 해서 http method GET로 서버에 호출하는겁니다.

다시 또 다른 예로 게시판의 1번 글을 지우려고 할때
/board/delete?id=1 이게 아니라
(DELETE) /board/1 이렇게 보내는게 RESTful 하다는 겁니다.

이런 규칙으로 만들어진 API를 RESTful API라고 합니다.

 

 

위에 분이 잘 설명 하셨네요.
근본적으로 restfull이 뜬이유는 web service를 쉽게 사용하기 위함. 입니다.
WSDL 의 복잡한 web service가 범용적이지 않은 이유는 규격문서의 복잡성 입니다.
restfull은 web service를 누구나 쉽게 사용하자는 취지에서 나왔다고 볼수있습니다.
때문에. http 문서의 header url 과 method 를 이용하여 하려는 action에 대한 이해를 할 수 있어야 하고, url만 봤을때, resource에 대한 이해가 쉽게 된다면, restfull api 라고 판단하시면 될것 같아요.

 

 

 

 

 

질문2 :

두분 다 답변 감사합니다. 알려주신 내용과 지난 업무 기억을 되살려 좀더 여쭤보고싶습니다.
알려주신 내용대로면 Restful은 객체지향이 없으면 개발을 못하는 기술같은게 아니라 유지보수를 편하게 하기위한(그외의 목적도 있겠고) 개발 "방식" 인것처럼 Restful도 하나의 개발 방식인것이고.
기본적으로 Restful이라고 하려면 자원(URL), 동작(get, post, delete, put)을 정의해야함.
최신의 프레임워크나 파이썬등이 이런 개발 방식을 쉽게 구현할 수 있게 해놓았음.
제가 이해한건대충 이렇습니다.

제 지난 업무 경험에 근거해서 의문점을 좀 더 여쭤보자면
지난 업무에서 스프링 프레임워크를 이용한 MVC 방식의 개발을 했습니다.
Controller에 @RequestMapping(URL) 을 기재해서 자원을 표시하였고.
RequestMethod에서 Get또는 Post를 지정하였습니다.
이렇게 보면 제가 했던 개발방식은 Restful 개발방식이네요. 맞나요?

그런데 한가지 더 의문은, 전 지난 개발중에 단 한번도 PUT과 DELETE는 본적이 없습니다.
오로지 GET, POST만 사용하였고, 또 예를들어 POST 메쏘드의 처리라고해서 "입력" 처리만 한것도 아닙니다.
제가 웹개발 초보라 GET과 POST를 검색했을때 GET은 URL에 정보를 가짐, POST는 안가저서 GET보다 안전. 이정도 차이만 알았고 기존의 프로그래밍 된 소스들은 기존 개발자들이 용도에 맞게 GET과 POST를 지정하고 있는거라 생각했을뿐, GET이 검색,습득을 위한 처리, POST는 삽입을 위한처리라는 개념은 전혀없었습니다. 실제 소스도 그랬다고 기억하고 있구요...
그럼 제가 해온건 역시 Restful 개발방식과는 다른건지? 아직 실험은 못해봐서 실제로 가능한지는 모르겠지만 메쏘드는 PUT으로 해놓고 처리는 삭제처리를 한다던지...하는게 실제로 가능하고. 이런 프로그램의 경우 뭐 방식은 Restful방식을 사용하려 했지만 올바르게 사용하지 못한 "예"라고 보면 맞을지 궁금하네요.

 

 

 

답변2 :

결론적으로는 RESTful 은 아니었던 것이죠.
단지 http 프로토콜을 사용하여 호출 했을 뿐.
언급하신 예에서 GET / POST는 동작의 구분으로 사용되어 진게 아니라,
단지 파리미터를 어디에 포함(url or header)해서 전송시킬거냐의 차이 뿐이니깐요.
기존 개발자들이 GET/POST만 사용하고 다른 것은 사용하지 않는것 역시 RESTful 하지 않게 사용한겁니다.

하지만 반드시 RESTful하게 사용해야 한다는 강제성은 없습니다.
RESTful하게 API를 정의 했을때 더 이점이 많아서 권장하는 분위기 일 뿐입니다.

 

 

 

get과 post만 사용하셨다고 하셨죠
CRUD로 보면 get = R, post = C, put = U, delete = D에 해당한다고 볼 수 있습니다
다만 브라우저가 put방식과 delete방식을 지원하지않습니다
폼에서 post로 넘기고 _method 파라미터의 값에 put과 delete를 넣고
컨트롤러에서는 put과 delete로 받습니다

 

 

 

 

 

 

참고:

https://okky.kr/article/647018

반응형
Comments