Restful Web Service 를 연습해보며 잘 풀리지 않는 부분이 있습니다

2016-08-22 01:58

안녕하세요 초보 개발자 입니다.

집에서 Restful Web Service 를 연습해보며 잘 풀리지 않는 부분이 있어

질문을 올리게 되었습니다.

개발 환경은

  • spring 4.x
  • html, jquery, javascript, json

입니다.

보통 jsp는 퍼블리싱과의 협업 과정에서 곤란한 부분이 있다고 생각했습니다.

그래서 .html로 뷰를 만들고 ajax를 통해서 데이터를 통신하고자 방향을 잡았었습니다.

게시판 10 번째 글 조회 시나리오 예시)

1 > 리스트중 10번 글 클릭 (GET /article/10)

2 > @Controller 에서 resource 주소 리턴, suffix .html 매핑

3 > article.html 페이지 리턴

4 > article.html 로딩중 ajax 요청 (GET /article/10)

5 > callback 구현

예시에서 1, 2, 3 이 html 페이지 요청 구간인데,

페이지 요청 로그도 찍어보고싶고 해서 일단 이 부분을 스프링 컨트롤러를 태웠습니다.

문제는 jsp 가 아니다 보니 PathVariable 로 얻은 데이터를 4로 전달하기 어려운것이 첫번째,

페이지 요청 자체를 스프링 컨트롤러를 태운것이 잘못된 생각인가가 두번째,

"클라이언트와 서버의 분리" 라는 컨셉을 가지려면

Restful Web Service 의 서버는 api서버와 web서버가 분리되야 하는가가 세번째,

이 3가지가 매듭이 잘 안풀리고 있습니다.

제가 Restful Service 에 대해 오해를 하고 있는건가 싶기도 하고..

이 문제들을 어떻게 풀어야 할까요?

선배님들의 조언 부탁드립니다.

더운날씨에 건강 유의하시길 바랍니다 (__)

2개의 의견 from SLiPP

2016-08-22 09:20

먼저 Restful Web Service 라는 용어가 있는지 잘 모르겠네요. Restful API를 제공하는 웹 애플리케이션을 Restful Web Service라고 보면 될까요? 일단 이런 기준 하에서 설명할께요.

Restful API를 통해 명확하게 서버와 클라이언트를 분리한다면 동적으로 html을 생성하는 모든 작업을 클라이언트가 담당해야 합니다. 즉, 기존에는 JSP와 같은 녀석을 활용해서 서버 측에서 동적인 html을 생성했다면 Restful API를 제공할 경우 서버측은 단순히 API만 제공하고, 클라이언트가 이 API 데이터를 활용해 동적으로 html을 생성하는 방식입니다.

이와 같이 구현할 경우 클라이언트에서 동적으로 html을 생성하는 작업을 위한 코드의 복잡도가 높아져 최근에는 이를 지원하는 클라이언트 프레임워크가 많이 등장했습니다. 이에 대한 구조에 대해 명확히 하고 싶으면 angular.js 예제 코드를 다운로드 받아 동작 방식을 이해해 보면 클라이언트와 서버의 역할에 대해 좀 더 명확히 이해할 수 있을 겁니다.

Restful API 구조를 가져간다고 해서 api 서버와 web 서버를 반드시 분리할 필요는 없습니다. 아무래도 서버를 분리하면 운영 비용이 발생하기 때문에 통합해서 운영하다 서비스 규모가 커지면 분리하는 구조를 가져갈 수 있습니다.

이와 관련해 다음과 같이 학습해 보면 좋겠네요.

  • 일단 angular.js 예제 코드를 통해 서버측에서 API를 제공하고, 클라이언트측에서 동적으로 html을 생성하는 구조에 대해 파악한다.
  • Web Api Design와 같은 문서를 통해 Restful API가 무엇을 의미하는지, 어떻게 설계해야 하는지 학습한다.

좋은 결과 있기를 바랍니다.

2016-08-22 16:12

@자바지기

안녕하세요! 바쁘신 와중에도 답변 감사드립니다. (__) 말씀해주신 방향으로 조금 더 공부를 해봐야 겠습니다. Rest uri 에선 ?index=1 이런 식의 쿼리스트링을 붙이지 않는것으로 제가 오해를 하고 있었던것 같습니다. 아니면 쿼리스트링이 보기에 좋은것 같지 않아 지양하려는 생각이 저도모르게 들었던..;

Restful Web Service 라는 용어는 구글링 하면서 접했는데요, 정확한 의미는 잘 모르고 말씀하신 내용과 같은 뉘앙스로 큰 의미 없이 썼던 문장인데, 잘못된 의미로 전달이 될 수 있겠다는 생각이 들어서 앞으로 주의해야겠다는 생각을 했습니다. 이 점 사과드립니다(__)

의견 추가하기

연관태그

← 목록으로