더북(TheBook)

서비스란 무엇인가?

서비스는 어떤 기능이 구현되어 단독 배포가 가능한 소프트웨어 컴포넌트입니다. 서비스는 클라이언트가 자신이 서비스하는 기능(functionality)에 접근할 수 있도록 커맨드, 쿼리, 이벤트(event)로 구성된 API를 제공합니다. 서비스 작업은 크게 커맨드(command, 명령/CUD)와 쿼리(query, 조회/R)로 나뉩니다(예: createOrder() 커맨드는 주문 생성 후 데이터를 업데이트, findOrderById() 쿼리는 데이터를 조회합니다). 서비스는 클라이언트가 소비하는 OrderCreated 같은 이벤트를 발행하기도 합니다.

서비스 API는 내부 구현 상세를 캡슐화합니다. 모놀리스와 달리 개발자는 API를 우회하여 서비스에 접근하는 코드를 작성할 수 없으므로 마이크로서비스 아키텍처에서 애플리케이션 모듈성은 보장됩니다.

각각의 마이크로서비스는 자체 아키텍처를 갖고 있기 때문에 기술 스택을 독자적으로 구축할 수 있지만, 대부분 육각형 아키텍처 형태를 취합니다. API는 서비스에 구현된 비즈니스 로직과 소통하는 어댑터를 이용하여 구현합니다. 작업 어댑터(operations adapter)는 비즈니스 로직을 호출하고 이벤트 어댑터(events adapter)는 비즈니스 로직이 내어 준 이벤트를 발행합니다.

▲ 그림 2-4 서비스에는 구현체가 캡슐화된 API가 있다. 클라이언트가 호출하는 작업은 이 API에 정의되어 있다. 작업 종류는 데이터를 업데이트하는 커맨드, 데이터를 조회하는 쿼리, 두 가지다. 데이터 변경 시 서비스는 이벤트를 발행하고 클라이언트는 이 이벤트를 구독한다

12장에서 배포 기술을 다룰 때 이야기하겠지만, 서비스 구현 뷰는 스탠드얼론(standalone, 독립적으로 움직이는) 프로세스, 컨테이너 내부에서 실행되는 웹 애플리케이션, OSGI 번들, 서버리스 클라우드 기능 등 다양한 컴포넌트를 사용할 수 있습니다. 물론 서비스마다 자체 API를 갖고 독립적 배포가 가능해야 하는 핵심 요건은 동일합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.