Programming/Web

스트랭글러 패턴(Strangler Pattern) 개념 정리

Jan92 2023. 5. 31. 02:09

Strangler figs

지난 5월 AWS Summit Seoul에서 '스트랭글러 패턴(Strangler Pattern)'에 대한 개념을 처음 접하게 되었는데요.

29cm에서 기존의 모놀리식 애플리케이션을 현대적 애플리케이션(MSA, MicroService Architecture)으로 전환하는 과정에서 스트랭글러 패턴이 주로 사용되었다고 하며, 시스템이 정상적으로 돌아가면서 점진적으로 서비스 아키텍처로 분리해 간다는 방식이 궁금증을 자아냈습니다.

 

*Strangler Pattern의 어원은 Martin Fowler가 호주에서 본 Strangler figs라는 식물에서 기원되었습니다.

 


 

Strangler Pattern

스트랭글러 패턴은 '소프트웨어 시스템을 점진적으로 재구축하기 위한 디자인 패턴'으로, 이 패턴은 기존에 구축된 레거시 시스템을 한 번에 완전히 대체하는 대신, 시스템의 일부를 점진적으로 대체하면서 새로운 시스템으로 전환하는 방식입니다.

 

예를 들어 모놀리식 아키텍처를 MSA로 전환한다고 했을 때, 기존에 구축된 기능들을 한 번에 서비스 아키텍처의 서비스로 옮기는 것은 예상치 못한 여러 가지 문제가 발생할 수 있습니다.

때문에 전체 시스템은 정상적으로 동작하는 상태에서 일부분씩 서비스 아키텍처로 코드를 분리해 나가는 것이 바로 스트랭글러 패턴입니다.

 

 

이미지 출처: https://microservices.io/patterns/refactoring/strangler-application.html

 

  • 레거시 시스템의 일부를 새로운 애플리케이션 또는 서비스로 교체합니다.
  • 일정 기간이 지난 후(새로운 애플리케이션 또는 서비스가 정상적으로 동작한다면), 대체된 레거시 기능을 제거합니다.

 

실제로 스트랭글러 패턴을 적용하여 시스템을 마이그레이션 하는 과정은 위 두 작업을 계속 반복하는 것인데요.

당연하게도 이 과정은 기존의 레거시 시스템의 규모가 크면 클수록 많은 시간이 걸리게 됩니다.

(스트랭글러 패턴에서 프록시 서버를 통해 기존의 앤드포인트로 요청되던 백엔드 요청을 가로채 새로운 서비스로 보내주는 작업이 필요합니다.)

 

***

큰 규모의 시스템을 점진적으로 교체하는 방식이기 때문에 소규모 시스템에는 잘 쓰이지 않으며, 백엔드 서비스에 대한 요청을 가로챌 수 없는 경우 스트랭글러 패턴을 사용할 수 없습니다.

또한 프록시 서버로 인해 단일 장애 지점이나 성능 병목 현상이 발생할 수 있다는 주의점이 있습니다.

 

 

 

< 참고 자료 >

https://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/modernization-decomposing-monoliths/strangler-fig.html