마이크로 서비스 환경에서는 서비스의 경계를 넘나드는 비즈니스 프로세스를 관리하는 문제를 적절히 느슨한 연결로 풀어나가야한다.
쇼핑몰에 회원 가입을 하게 되면 3개의 비즈니스로직을 수행한다고 가정해보자.
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 |
구독형 방식은 간단히 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
| You aren't going to Need it(YAGNI). 그 기능이 필요할 때 만들어라! (0) | 2024.01.04 |
|---|---|
| [번역]마틴파울러의 테스트 피라미드 (0) | 2021.08.06 |
| 마틴파울러의 마이크로서비스의 정의(Micro Service Architecture by Martin folwer) (1) | 2019.07.02 |
| 개발자에게 은총알(silver bullet)은 없다. (0) | 2018.05.22 |