마이크로 서비스 환경에서는 서비스의 경계를 넘나드는 비즈니스 프로세스를 관리하는 문제를 적절히 느슨한 연결로 풀어나가야한다.
예제 - 쇼핑몰 회원가입 프로세스
- 고객 회원가입
- 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
반응형
'DevOps > 소프트웨어공학' 카테고리의 다른 글
You aren't going to Need it(YAGNI). 그 기능이 필요할 때 만들어라! (0) | 2024.01.04 |
---|---|
[번역]마틴파울러의 테스트 피라미드 (0) | 2021.08.06 |
마틴파울러의 마이크로서비스의 정의(Micro Service Architecture by Martin folwer) (388) | 2019.07.02 |
개발자에게 은총알(silver bullet)은 없다. (960) | 2018.05.22 |