본문 바로가기

DevOps/소프트웨어공학

예제로 풀어보는 구독형 아키텍쳐(Subscribe architecture) for Micoro Service Architecture(MSA)


마이크로 서비스 환경에서는 서비스의 경계를 넘나드는 비즈니스 프로세스를 관리하는 문제를 적절히 느슨한 연결로 풀어나가야한다.


예제 - 쇼핑몰 회원가입 프로세스

  • 고객 회원가입
    • welcome sms 발송
    • welcome email 발송
    • 신규회원 쿠폰 생성
  • 완료

쇼핑몰에 회원 가입을 하게 되면 3개의 비즈니스로직을 수행한다고 가정해보자.


레거시(Legacy) 아키텍쳐 방식 - 오케스트레이션(orchestration)

기존 방식(not MSA)으로는 오케스트라 지휘자 처럼 한개의 프로세스가 뇌가 된듯 세부 작업을 아래와 같이 직접 method를 요청할 것이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void registerMember(String memberName, ...){
 
    @Autowired
    DispatchManager dispatchManager; // 발송관련 비즈니스로직 포함된 class
    @Autowired
    CouponManager couponManager;     // 쿠폰관련 비즈니스로직 포함된 class
 
    //회원가입 기타 비즈니스로직..
    // ...
 
    dispatchManager.sendSmsToNewMember();      // 신규회원 welcome sms
    dispatchManager.sendEmailToNewMember();    // 신규회원 welcome email
    couponManager.makeNewCouponForNewMember(); // 신규회원을 위한 쿠폰 
 
}
cs

오케스트레이션 방식에서는 회원가입이라는 서비스에 지나치게 많은 중앙 관리 권한이 부여된다는 단점이 있으며, 강력한 연결(Tightly coupled)로 인하여 높은 변경 비용을 수반한다.

마이크로 서비스 아키텍쳐(MSA) 방식 - 구독형(subscribe)

구독형 방식은 간단히 eventlistener 방식이라고 보면 된다. '고객이 회원가입했다' 라는 이벤트를 발산하면 나머지 필요한 비즈니스조직에서는 이벤트에 적절히 반응하면 되는 것이다. 간단히 요약해서 설계하면 아래와 같은 코드와 방식으로 수행가능할 것이다.


1
2
3
4
5
6
7
8
9
10
11
void registerMember(String memberName, ...){
 
    @Autowired
    AmqpManager amqpManager; // 구독형 서비스 연동 class
 
    //회원가입 기타 비즈니스로직..
    // ...
 
    ampqManager.push(memberName, memberEmail, ..);
 
}
cs


그림. 구독형으로 비즈니스로직을 풀었다.


구독형 시스템으로 회원가입 프로세스는 전반적으로 더 느슨히 결합하고 유연하고 변경을 보다 쉽게 수용하게 된 것을 알 수 있다. 구독형 시스템은 아래와 같은 특징이 있는 것으로 정리 할 수 있다.


  • 장점

    • 비동기로 수행하는 비즈니스로직 쉽게 적용가능

    • 느슨한 결합으로 인해 각 비즈니스로직에 대해 유연하게 변경가능

    • 배포없이 추가적인 구독자 추가로 비즈니스 로직 추가 가능

  • 단점

    • 각 구독형 비즈니스로직이 정상적으로 동작하고 있다는 것을 맹목적으로 믿어야함.
      -> 비즈니스 프로세스 뷰와 명확히 대응하는 모니터링 시스템 구축 필요.

End of Document