187. 스트랭글러 피그 패턴 (Strangler Fig Pattern)

⚠️ 이 문서는 수십 년간 얽히고설킨 낡은 거대 시스템(Monolithic)을 최신 마이크로서비스(MSA)로 한 번에 뒤엎으려다 프로젝트가 통째로 망하는 것을 막기 위해, **시스템 맨 앞단에 라우터(API Gateway)를 세워두고 노후된 기능을 아주 작은 조각부터 하나씩 새 서비스로 몰래 교체(가로채기)해 나가며 최종적으로 구형 시스템을 고사시키는 '점진적 마이그레이션 아키텍처 패턴'**을 다룹니다.

핵심 인사이트 (3줄 요약)

  1. 본질: 시스템 개편을 위해 기존 영업을 몇 달씩 중단하는 빅뱅(Big Bang) 방식의 리스크를 피하고, 헌 집을 그대로 쓰면서 그 옆에 새 방을 하나씩 덧대어 지은 뒤 문패(라우팅)만 슬쩍 바꿔치기하는 전략이다.
  2. 가치: 고객은 시스템이 교체되고 있다는 사실조차 눈치채지 못하며, 새 모듈(예: 새 결제 서비스)에 치명적 버그가 발생해도 즉시 API 라우터의 스위치를 원래 옛날 결제 모듈로 돌려버리면(Rollback) 되므로 심리적 안전감이 극대화된다.
  3. 이름의 유래: 호주에 서식하는 '교살자 무화과나무(Strangler Fig)'가 기존의 거대한 숙주 나무의 씨앗에서 자라나 점차 뿌리와 덩굴로 숙주 나무 전체를 감싸버리고, 수년 뒤 원래의 나무가 죽어 썩어 없어지면 자신의 껍질만 남아 새로운 거대한 나무가 되는 생태계의 모습에서 마틴 파울러(Martin Fowler)가 영감을 얻었다.

Ⅰ. 빅뱅(Big Bang) 마이그레이션의 재앙

"다음 주말 서버 점검 시간 동안 시스템을 전면 교체합니다"라는 말은 무덤으로 가는 주문이다.

  1. 모놀리식(Monolithic)의 저주:
    • 10년 된 은행 시스템 안에는 계좌, 대출, 카드 로직이 스파게티처럼 엉켜 있다. 이것을 2년 동안 외부 업체(SI)에 맡겨 최신 언어의 MSA로 새로 짜오게 한다.
  2. 오픈 당일의 셧다운 (Big Bang):
    • D-day에 낡은 서버 전원을 끄고 새로운 MSA 서버를 켠다.
    • 하지만 2년 동안 쌓인 데이터 포맷이 안 맞고, 숨겨져 있던 낡은 의존성이 터지면서 전국 지점의 업무가 3일 동안 마비되는 대참사가 터진다. 결국 울며 겨자 먹기로 낡은 시스템으로 다시 복구(Rollback)하고 수백억의 예산을 날린다.

📢 섹션 요약 비유: 달리는 자동차를 최신형 전기차로 바꾸고 싶은데, 차를 통째로 정비소에 맡겨 일주일 동안 출근을 못 하는 대신 차를 뜯어고쳤더니 막상 시동이 안 걸려 지각하는 최악의 시나리오입니다.


Ⅱ. 스트랭글러 피그 패턴의 작동 원리 (가로채기)

이 패턴의 핵심은 사용자 요청의 '목덜미'를 쥐고 있는 똑똑한 문지기다.

  1. Facade (퍼사드) / API Gateway 배치:
    • 제일 먼저 할 일은 낡은 모놀리식 시스템 바로 앞단에 API Gateway(라우터)를 하나 세우는 것이다.
    • 현재는 사용자가 /login, /pay 등 어떤 요청을 보내든 게이트웨이가 100% 낡은 시스템으로 토스해 준다. (준비 단계)
  2. 조각 내기와 새로운 서비스 런칭 (Strangling):
    • 개발팀이 낡은 기능 중 가장 만만한 '리뷰 작성' 기능만 최신 MSA 기반의 새 모듈(컨테이너)로 몰래 하나 만들어 클라우드에 띄운다.
    • ┌────────────────────────────────────────────────────────┐ │ [사용자] ---> [API Gateway] ---> /login, /pay ---> [낡은 모놀리식 시스템] │ │ ---> /review ------------> [신규 MSA 리뷰 모듈] │ └────────────────────────────────────────────────────────┘
  3. 점진적 라우팅 스위치 변경:
    • 게이트웨이의 설정만 살짝 바꿔, 앞으로 /review 요청이 오면 낡은 시스템이 아니라 새로 띄운 MSA 모듈로 가도록 트래픽을 가로챈다.
    • 새 모듈이 잘 돌아가면 이번엔 '장바구니', 다음 달엔 '결제' 등 덩굴(새 서비스)을 하나씩 늘려간다.
  4. 숙주 시스템의 폐기 (Retire):
    • 1~2년 뒤, 게이트웨이가 모든 트래픽을 새 MSA 서비스들로만 보내게 되면, 트래픽을 전혀 받지 못하게 된 거대한 낡은 모놀리식 시스템(숙주)은 영광스럽게 전원을 뽑아 폐기한다.

📢 섹션 요약 비유: 낡은 백화점 문 앞에 안내원(API Gateway)을 세워둡니다. 처음엔 손님을 모두 구관으로 안내하다가, 옆 공터에 신관 화장실부터 하나 지어놓고 화장실 찾는 손님만 신관으로 보냅니다. 다음 달엔 신관에 식당을 짓고 식당 손님을 보냅니다. 나중에 신관이 다 지어지면 모든 손님이 신관으로만 가고, 아무도 안 가는 구관 건물은 조용히 철거하는 완벽하고 우아한 이사 방법입니다.


Ⅲ. 마이그레이션 시 주의할 트레이드오프

덩굴을 감는 과정이 너무 오래 걸리면 나무 두 그루를 부양해야 한다.

  1. 데이터베이스 분리의 고통:
    • 코드를 분리하는 것은 쉽지만, 낡은 시스템과 새 시스템이 동일한 하나의 구형 DB를 바라보고 있다면 진정한 MSA 분리라고 할 수 없다.
    • 결국 새 시스템 전용 DB를 새로 팠을 때, 낡은 DB와 새 DB 간의 실시간 데이터 동기화(CDC, Change Data Capture)를 어떻게 완벽하게 구축할 것인가가 스트랭글러 패턴 성공의 최대 난관이다.
  2. 과도기적 복잡성과 롤백 전략:
    • 1년의 마이그레이션 기간 동안 회사는 낡은 모놀리식 코드와 최신 MSA 코드를 동시에 유지보수해야 하므로 운영팀의 스트레스가 배가된다.
    • 새 모듈로 트래픽을 돌렸을 때 장애가 발생하면, 즉시 API 게이트웨이 룰을 원복(Rollback)하여 구형 시스템이 다시 요청을 처리하도록 철저한 비상 계획이 세워져 있어야 한다.

📢 섹션 요약 비유: 이사하는 몇 달 동안 구관과 신관 양쪽 건물 모두에 전기세와 경비원 월급(유지보수 비용)을 이중으로 내야 하는 부담이 있습니다. 가장 어려운 점은, 구관 창고에 있는 물건(DB)을 신관 손님과 구관 손님이 동시에 써야 해서 양쪽 창고의 물건 위치를 실시간 쌍둥이처럼 똑같이 맞춰놓는 텔레파시(CDC 동기화) 마법을 유지해야 한다는 것입니다.