MSA해설/Monolith to MSA

Monolith to MSA (Refactoring a monolith to microservices)

kooangelo 2022. 3. 9. 08:21

https://microservices.io/refactoring/index.html
Refactoring a monolith to microservices
Monolith를 MSA로 어떻게 전환할 것인가에 대한 위의 내용 요약 + 첨언

ASIS가 없는 신규 시스템이 거의 없듯이 맨땅에 MSA를 구축하는 일도 드물다.
MSA를 도입하려는 대부분의 조직은 이미 Monolith를 가지고 있고 그것을 MSA로 전환해야기 때문에, 어떻게 전환할 것인가에 대한 고민을 하지 않을수 없다. 이 전환 전략중 하나로 Strangler Pattern의 개념을 도입해서 Incrementally Refactoring (점진적 개선) 하는 이행전략이 필요하다. (참고 https://blog.daum.net/kooangelo/110)

 

[참고] Monolith to MSA : 10가지 원칙
https://blog.daum.net/kooangelo/113

Implement new functionality as services

새로운 기능이 필요하면 Monolith를 더이상 뚱뚱하게 하지 말고 New Service로 만들라는 이야기

이는 ASIS Monolith to MSA보다는 쉬울것이다.

문제는 다음 Extract services from the monolith 이다.

 

Extract services from the monolith 의 궁극적인 모습은 아래와 같다

ASIS Monlith에서 특정 모듈 하나 (Delivery) 를 서비스로 떼어내겠다는 것이다.

이때 어떤 절차에 걸쳐 떼어낼지를 아래 Step별로 소개하고 있다.

 

Step 0 : Review AS-IS code
Monlith에는 여러 모듈이 뒤섞여있다. (여기서는 예를들어 Order와 Delivery)

그 중에서 분리하려는 모듈을 선정한다.


Step 1 : Split the code
우선 'Monolith안에서' loosely coupled module로 코드를 분리하고 별도의 Delivery로 전환/변환.

코드를 분리한다는 의미는 Code를 Refactoring해서 API 등으로 연결되도록 분리해야함

그럴려면 기존 모듈간의 이해도가 높아야함


Step 2 : Split the database
DB를 분리하고 Delivery관련 스키마 정의


Step 3 : Define a standalone Delivery Service
독립된 Delivery서비스를 구성하고 배포
바로 production traffic을 처리하진 않고 운영환경에서 테스트 가능하도록


Step 4 : Use the standalone Delivery Service
독립된 Delivery Service 운영 traffic 처리

API Gateway에서 New Service로 Direction 등의 처리 필요


Step 5 : Remove the delivery management functionality from the FTGO monolith
Monolith의 Delivery 제거


이러한 분리는 반드시 연습이 필요하다.

우선 간단한 기능, 업무에 지장이 별로 없는 부분에 대해 연습 후 익숙해지면 점차 확대하는 방안이 필요하겠다.