> 해당 글은 엔터프라이즈 자바 마이크로 서비스 를 보고 작성합니다.
언젠간 모놀리틱 서비스에서 마이크로서비스로 마이그레션 할 일이 있을 것이라 생각을 하며,,,,
모놀리틱 서비스에서 마이크로서비스로 마이그레이션 할 때 여러가지 패턴이 존재한다.
- 빅뱅 패턴 (Big Bang)
- 스트랭글러 패턴 (Strangler)
- 하이브리드 패턴 (Hybrid)
빅뱅 패턴
빅뱅 패턴은 쉽게 말해 기존 모놀리틱 서비스에서 한 번에 바로 마이크로서비스로 변환하는 패턴을 말한다.
급격하게 변하기 때문에 사이드이펙트가 크고 비즈니스에 큰 타격이 갈 가능성이 존재한다.
예를 들면 마이크로서비스로 한 번에 변환했는데 어느 부분에서 갑자기 서비스가 먹통이 돼 CS 폭주 등,, 근데 시스템이 먹통인 상태에서 오류를 고치는데는 시간이 많이 걸리는 상태,, 기존 모놀리틱 서비스로 옮기는 것도 쉽지 않은 상황.. 그러므로 큰 타격이 갈 가능성이 존재한다는 것 같다.
스트랭글러 패턴
유명한 파틴 파울러가 정의한 패턴이다.
기존 시스템(모놀리틱)에 점점 새로운 시스템(마이크로서비스)를 만들어 나가는 방식으로 전체 시스템을 점진적? 으로 변환하는 것을 말한다. 새 시스템은 점점 기존 시스템을 대체하게 되면 대체된 기존 시스템은 점점 줄어들어 더 이상 존재하지 않게 된다.
이렇게 되면 빅뱅 패턴보다는 위험을 상당히 줄여주며 전환 중 발생하는 문제점에 대흥하여 전환 과정을 조정할 수 있다.
예를 들면 배달의 민족과 같은 서비스를 모놀리틱으로 개발했을 때, 유저와 관련된 부분만 우선적으로 마이크로서비스로 분리하는 식으로 점진적으로 옮기기
하이브리드 패턴
하이브리드 패턴은 스트랭글러 패턴과 비슷한 형태로 시작하나 기존 시스템을 완전히 없애지 않는 점에서 차이가 있다.
모놀리틱 시스템에 몇 가지 기능을 계속 유지하고 그 기능을 새로운 마이크로서비스에 통합하는 식으로 한다.
예를 들어 배달의 민족과 같은 서비스를 모놀리틱으로 개발했을 때, 주문 기능만 다른 마이크로서비스에 통합하는 식으로 한다거나?
결론은 만약 모놀리틱 서비스을 마이크로서비스로 마이그레이션 한다면 하이브리드 패턴과 같이 특정 기능부터 옮기는 식으로 해야 기존 큰 부담없이 천천히 전환할 수 있어보인다.
또한, 모놀리틱에서 마이크로서비스로 옮긴다면 여러 개의 서비스로 분리가 될텐데 이 때의 모니터링 시스템과 로깅시스템이 잘 구축이 되고 에러 발생 시 어떻게 할 것인가에 대한 고민이 필요하다. (추후 포스팅 예정)
만약 내가 spring boot 로 구축된 모놀리틱 서비스를 전환한다면 이렇게 전환을 할 것 같다.
1. eureka 서버 생성
2. 기존 특정 기능만 따로 서비스 분리 후 eureka 에 서비스 등록. 주문에 대한 취소 기능이라면 주문 서비스로 분리하여 해당 서비스에 기능 추가
3. 기존 서비스에서 특정 기능에 대한 요청이 온다면 위에서 추가한 서비스로 요청
4. 이런 식으로 기능을 옮기면 도메인 별로 서비스가 분리될 것이고 각 분리된 서비스는 eureka 에 서비스 등록 시켜 서비스 간 통신을 하도록 한다.