티스토리 뷰

변화된 서비스 환경  

예전에는 MVC 형태가 Web application을 만드는 표준이었습니다. 

컨트롤러가 데이터를 조회해서 화면에 내려 주면 화면은 그 데이터를 이용해서 화면을 만들어 줍니다. 

이러한 형태를 일반적으로 모노리틱 구조라고 합니다. 아직도 많은 서비스는 이러한 형태를 가집니다. 

그런데 모바일 서비스가 활성화 되고 외부 API 서비스를 제공하면서 이런 패턴이 변화하기 시작했습니다. 

서비스가 거대화 되면서 분산 서비스가 필요해지고 마이크로 서비스가 대두되었습니다. 


기존 서비스가 로직과 데이터를 처리하는 서비스들로 세분화 되고 각각의 서비스가 이를 이용하는 형태를 가집니다. 

대부분의 개발자들은 이런 추세를 실감하고 있을 것이고 이런 개발 요구사항을 많이 받고 있을 겁니다. 

예전에도 물론 이런 요청들이 많았습니다. 분산 서비스를 위해 EJB도 나오고 WEB SERVICE도 나왔지만 개발도 쉽지않고 그것을 이용하는 것도 쉽지 않다 보니 대부분 실패를 했습니다. 그 당시는 기술적으로도 어려움이 많았으나 요즘은 분산 서비스를 위한 많은 기술들이 쏟아져 나와 예전보다 훨씬 쉽고 저렴하게 구축할 수 있게 되었습니다. 

모두 알고 있는 사실을 구구절절 나열할 필요는 없을 거 같습니다. 간단한 예를 통해 어떻게 RESTful 서비스가 소비되는지 보겠습니다. 

간단한 예제

간단한 쇼핑몰을 구축하겠습니다. 그런데 모바일도 되어야 하고 관리자 시스템과 셀러 시스템이 필요하다고 합니다. 외부에서 상품 정보와 주문 정보를 제공해야 한다고 합니다. 그래서 우리가 구축해야 하는 시스템은 총 5개입니다. 

- Web application

- Mobile

- Admin site

- Seller site 

- API Service 

프로젝트 구조

두가지 형태가 있습니다. 내부적으로 모듈을 공유하는 형태와 분산서비스입니다. 

내부 모듈 공유

Maven 또는 Gradle을 이용해서 모듈을 만들고 depency를 설정합니다. 

서비스는 빌드를 통해서 패키징하고 배포합니다. 

프로젝트 구조로는 모바일 서비스를 제외하고 12개의 모듈로 나뉘어져 있고 패키징을 하면 5개를 만들 수 있습니다.  


화면에서 필요한 정보를 Ajax를 통해서 RESTService에 전달하고 Json형태의 결과값을 받아서 화면을 구성합니다. 


이런 형태의 서비스에서는 VueJs, AngularJS, ReactJS 등이 절대적 필요합니다. 이런 프레임워크들은 Json형태의 데이터를 아주 쉽고 깔끔하게 처리해 줍니다. 이런 구조로 설계가 되면 Business Logic 부분을 쉽게 재사용이 되며 관리할 수 있게 됩니다. 더불어 JSP, FREEMARKER, THYMELEAF 등의 코드가 화면에서 거의 사라지게 됩니다. 디자이너가 퍼블리싱 해준 HTML을 그대로 쓸 수 있습니다.   


분산서비스 형태 

그림으로는 내부 모듈을 공유하는 형태와 유사해 보이지만 실제로는 엄청나게 다릅니다. 

첫번째 형태는 5개의 서비스가 되지만 두번째 형태는 9개의 서비스로 나뉘어 집니다. 

REST Service가 독립적인 인스턴스를 실행되야 하며 API Gateway 역할도 매우 중요합니다. 

API Gateway를 없앤다고 해도 REST Service와 화면 서비스의 라이프 사이클이 달라져서 관리할 때 고려 사항이 많아집니다. 

아무래도 분산 서비스는 고려 사항이 많고 복잡해 질 수 밖에 없습니다. 

화면에서 API 관련 인증 서버도 누락이 되었네요. 다시 그릴려니 귀찮아서 스킵합니다. 

분산 서비스 구축이 주제가 아니라서 이 내용은 여기서 멈추고 다시 RESTful Service로 돌아 가겠습니다. 


두 서비스 모두 RESTService를 통해 쉽게 화면과 로직을 분리하고 재사용하는 모습을 볼 수 있습니다.

??? 응 ??? 무슨 소리지 ???  


"우리도 기존에 화면에서 ajax로 서비스 호출해서 값을 처리하는 형태입니다. 그럼 된건가요?"

굳이 REST 형태로 서비스를 만들지 않아도 잘 만들어서 이용한다면 문제는 없습니다. 

그런데 대부분이 제대로 만들지 않는 다는게 문제인겁니다. 

새로운 개발자가 입사를 했거나 새로운 서비스를 만들 때 회사의 설계 규칙을 자세히 설명하기가 쉽지 않습니다. 

그럴 때 "우리는 화면과 비즈니스 로직이 분리되어 있고 뒷단은 REST 형태로 개발합니다."라고 설명을 하면 기존해 REST 서비스를 개발한 개발자라면 쉽게 이해를 할 것입니다.  


이제 간단히 RESTful 서비스가  무엇인지 알아 보고 어떻게 설계하고 개발해야 하는지에 대한 주제로 넘어 가겠습니다. 


REST 서비스의 기본 이해 

REST 서비스의 주요 특성 및 구성요소

REST 서비스의 설계 가이드 

결과 메시지 설계 

예외 처리 


댓글
댓글쓰기 폼