시스템 작업을 서비스로 배정
제일 먼저 어느 서비스가 요청의 진입점인지 결정해야 합니다. 대부분의 시스템 작업은 자연스레 서비스로 매핑되지만, 간혹 매핑 관계가 분명하지 않을 때도 있습니다. 예를 들어 배달원의 위치를 업데이트하는 noteUpdatedLocation()은 당연히 배달원과 관련이 있기 때문에 배달원 서비스에 배정되어야 할 작업으로 보입니다. 그러나 달리 생각해 보면 배달원의 위치가 필요한 주체는 배달 서비스입니다. 어떤 작업이 제공하는 정보가 필요한 서비스에 그 작업을 배정하는 것이 더 합리적이겠죠. 물론 작업을 처리하는 데 필요한 정보를 갖고 있는 서비스에 배정하는 것이 더 타당한 경우도 있을 것입니다.
▼ 표 2-2 시스템 작업을 애플리케이션 서비스에 매핑
서비스 |
작업 |
소비자 서비스 |
createConsumer() |
주문 서비스 |
createOrder() |
음식점 서비스 |
findAvailableRestaurants() |
주방 서비스 |
acceptOrder() noteOrderReadyForPickup() |
배달 서비스 |
noteUpdatedLocation() noteDeliveryPickedUp() noteDeliveryDelivered() |
이렇게 시스템 작업을 각 서비스에 배정한 후, 각 시스템 작업을 처리하기 위해 서비스가 어떻게 협동해야 할지 정합니다.