이 가이드는 모든 변경이 전체에 영향을 미쳐 제품 출시 속도가 느린 SaaS 창업자, CTO, 엔지니어링 리더를 위한 것입니다. 실제 결제 테넌트가 있는 라이브 제품을 전제로 합니다. 첫 번째 버전 구축은 SaaS MVP 아키텍처 로드맵에서, 전체적인 그림은 SaaS 플랫폼 엔지니어링 가이드에서, 리빌드·리팩터·리플랫포밍 선택에 대한 전반적인 내용은 디지털 전환 및 현대화 가이드에서 다룹니다.
이 가이드의 목차
- 모놀리스가 정말 문제인가?
- 목표: 서비스 분리 전 모듈형 모놀리스
- 접근 방식 선택
- 이음새를 찾고 경계를 설정하라
- 단계별 모듈화 경로
- 이전 중 테넌트, 결제, 데이터 관리
- 현대화에서의 AI 활용
- 존재하는 납품 실적과 존재하지 않는 것
- 대안: 작업을 누가 주도하는가
- 이 가이드의 한계
- 자주 묻는 질문
- 다음 단계
모놀리스가 정말 문제인가?
모놀리스는 하나의 단위로 배포되는 하나의 애플리케이션입니다. 이 자체가 결함은 아닙니다. Martin Fowler의 "monolith first" 조언은 성공적인 마이크로서비스 사례의 거의 대부분이 너무 커진 모놀리스에서 시작되었으며, 도메인을 알기 전에는 안정적인 서비스 경계를 설정하기 어렵다고 지적합니다. 구조를 변경하기 전에 다음 징후를 확인하십시오.
- 변경이 충돌합니다. 여러 팀이 동일한 파일을 편집하고, 릴리스가 서로를 기다리며, 작은 수정에도 전체 회귀 테스트가 필요합니다.
- 하나의 장애가 전체를 중단시킵니다. 무거운 리포트나 임포트가 모든 테넌트의 로그인과 결제를 느리게 만듭니다.
- 일부 코드를 설명할 수 있는 사람이 없습니다. 코드가 다른 코드의 데이터에 직접 접근하여, 한 영역의 변경이 다른 영역을 손상시킵니다.
- 특정 워크로드에 다른 처리가 필요합니다. 검색, 미디어 처리 또는 AI 기능은 나머지와 다른 하드웨어, 스케일링 또는 릴리스 규칙이 필요합니다.
다른 원인의 문제를 위해 구조를 변경하지 마십시오. 느린 페이지는 인덱스 누락인 경우가 많고, 불안정한 릴리스는 테스트 누락, 높은 비용은 비용 귀속 누락인 경우가 많으며, 이는 클라우드 비용 관리 가이드에서 다룹니다. 시스템이 오래되었거나, 지원이 중단되었거나, 전체적으로 불투명하다면 먼저 레거시 시스템 평가 체크리스트를 실행하십시오.
목표: 서비스 분리 전 모듈형 모놀리스
모듈형 모놀리스는 여전히 하나의 배포 가능한 애플리케이션이지만, 코드가 명확한 공개 인터페이스와 자체 데이터를 가진 모듈로 분리됩니다. Shopify 엔지니어링 팀은 대규모 Rails 애플리케이션에 이 방식을 적용했습니다. 개발자가 관련 부분에서만 작업하고, 전체가 아닌 하나의 컴포넌트에 대해서만 테스트를 실행할 수 있도록 정의된 경계를 가진 컴포넌트를 구성했습니다. 같은 글에서 팀이 다시 시작한다면 다르게 적용할 교훈들을 나열하고 있으므로, 반복적인 개선을 계획하십시오.
폴더가 아닌 진정한 모듈을 만드는 요소:
- 공개 인터페이스. 다른 모듈은 함수를 호출하거나 이벤트를 전송합니다. 내부에 직접 접근하지 않습니다.
- 데이터 소유. 각 모듈은 자체 테이블을 소유합니다. 다른 모듈이 직접 읽거나 조인하지 않습니다.
- 담당팀. 한 팀이 모듈의 동작과 테스트에 책임을 집니다.
- 강제된 규칙. 모듈이 다른 모듈의 내부를 임포트하면 빌드에서 실패합니다.
SaaS 제품에서 일반적인 모듈은 신원 및 접근 관리, 테넌트 및 권한, 결제 및 구독, 핵심 제품 도메인, 알림 및 리포팅입니다. 테넌트 컨텍스트는 모든 모듈을 통과합니다. 멀티 테넌트 아키텍처 가이드에서 이 결정의 기반이 되는 격리 방식을 설명합니다.
접근 방식 선택
| 방식 | 장점 | 위험 | 선택 기준 |
|---|---|---|---|
| 모놀리스 강화: 테스트, 모니터링, 쿼리 및 릴리스 개선 | 가장 저렴한 변경; 증상을 제거하는 경우가 많음 | 구조가 여전히 얽혀 있음 | 문제가 속도나 안정성이며 커플링이 아닌 경우 |
| 현재 위치에서 모듈형 모놀리스로, 한 번에 하나의 모듈씩 | 단일 배포, 단일 데이터베이스 엔진, 모듈 간 네트워크 없음 | 규율 필요; 점검 없이는 경계가 무너짐 | 커플링이 팀을 느리게 하지만 규모는 관리 가능한 경우 |
| 스트랭글러 방식으로 선택된 서비스 추출 | 핫 패스 또는 규제 영역 격리 | 분산 장애, 데이터 동기화, 운영 부담 증가 | 검증된 모듈이 자체 스케일링, 릴리스 주기 또는 격리가 필요한 경우 |
| 마이크로서비스로 전면 재작성 | 모든 부분을 새로운 상태로 시작 | 가장 긴 지연, 기존 규칙 재학습, 기능 동결 | 거의 없음; 기존 코드를 전혀 발전시킬 수 없을 때만 |
대부분의 제품은 모듈형 코어와 제로에서 몇 개의 추출된 서비스로 마무리됩니다. 팀은 완전한 마이크로서비스 구조를 달성해야 할 목적지로 여겨야 하며, 출발점으로 삼아서는 안 됩니다.
이음새를 찾고 경계를 설정하라
이음새(seam)는 코드의 한 부분을 거의 변경 없이 나머지와 분리할 수 있는 지점입니다. 아키텍처 다이어그램이 아닌 실증 자료에서 찾으십시오.
- 의존성 맵. 실제 임포트 그래프를 생성합니다. 인바운드 호출이 많고 아웃바운드가 적은 모듈이 좋은 첫 번째 후보입니다. 복잡하게 얽힌 코어는 마지막에 처리합니다.
- 데이터 소유권. 각 테이블에 대해 어떤 코드가 읽고 쓰는지 나열합니다. 여러 영역에서 쓰는 테이블은 아직 존재하지 않는 경계를 보여줍니다.
- 변경 이력. 함께 변경되는 파일은 보통 함께 속합니다. 독립적으로 변경되는 파일은 경계를 암시합니다.
- 비즈니스 언어. 결제와 로그인에서 "account"처럼 다른 곳에서 다른 의미를 가진 이름이 도메인 간의 경계를 표시합니다.
첫 번째 모듈은 위험이 낮고 학습 효과가 높은 것으로 선택하십시오. 명확한 기능, 작은 인터페이스, 공유 데이터가 적은 것이 좋습니다. 알림이나 리포팅이 종종 적합합니다. 결제와 신원 관리는 방법이 검증될 때까지 미루고, 그 후에는 오류가 모든 테넌트에 영향을 미치기 때문에 특별히 주의하여 처리하십시오.
단계별 모듈화 경로
-
모놀리스를 안전하게 변경할 수 있도록 만듭니다
모니터링, 반복 가능한 릴리스, 그리고 이상한 동작을 포함하여 시스템이 현재 하는 일을 기록하는 특성 테스트를 추가합니다.
-
모듈을 매핑하고 이름을 정합니다
목록, 각 모듈의 담당자, 의도된 의존성 방향에 합의합니다.
-
빌드에서 경계를 강제합니다
금지된 임포트에서 실패하는 규칙을 추가합니다. 보고 전용 모드에서 시작하여 모듈별로 강화합니다.
-
데이터를 분리합니다
소유 모듈의 인터페이스를 호출하여 모듈 간 조인을 제거한 후, 해당 인터페이스 뒤로 테이블이나 스키마를 이동합니다. 모든 레코드에 테넌트 식별자를 유지합니다.
-
내부 호출을 인터페이스와 이벤트로 대체합니다
이메일, 사용량 이벤트 등 느리거나 선택적인 작업을 모놀리스 내부의 비동기 이벤트로 이동합니다.
-
조건이 충족될 때만 추출합니다
후보는 측정된 필요성을 보여야 합니다. 자체 스케일링 프로파일, 자체 릴리스 주기, 보안 또는 컴플라이언스 경계, 또는 엔드 투 엔드로 소유해야 하는 팀이 있어야 합니다.
-
점진적으로 이동하고 되돌아갈 방법을 유지합니다
앞에 라우팅 레이어를 배치하고, 일부 테넌트를 새 컴포넌트로 보내고 결과를 비교합니다. Microsoft의 스트랭글러 피그 패턴은 이 점진적 교체를 설명하며, 안티 커럽션 레이어는 구 모델과 신 모델이 서로 침범하지 않도록 유지합니다.
각 단계는 독립적으로 출시됩니다. 4단계 이후에 프로그램이 중단되더라도 제품은 여전히 이전보다 나아진 상태입니다.
이전 중 테넌트, 결제, 데이터 관리
멀티 테넌시는 구조 변경이 조용히 잘못되는 영역입니다. 세 가지 규칙이 도움이 됩니다.
- 테넌트 컨텍스트는 선택 사항이 아닙니다. 모든 모듈과 새 서비스는 테넌트 식별자를 수신하고 강제해야 하며, 이상적으로는 수동 반복이 아닌 공유 코드에서 처리합니다.
- 테넌트를 코호트 단위로 이동합니다. 내부 및 우호적인 테넌트부터 시작하여 오류와 성능을 모니터링한 후 확대합니다. 소규모 10개 테넌트에 작동하는 마이그레이션이 수년간의 데이터를 가진 하나의 테넌트에는 작동하지 않을 수 있습니다.
- 결제와 권한을 계약으로 취급합니다. 사용량 이벤트와 플랜 한도는 코드가 변경되는 동안 고객에게 동일하게 유지되어야 합니다. 전환 전에 구 경로와 신 경로의 청구서와 권한 결과를 비교하십시오.
데이터 이동에는 전환 중 읽기와 쓰기에 대한 계획이 필요합니다. 이중 쓰기, 변경 캡처, 또는 짧은 동결 중 하나를 선택하며, 각각 이후에 조정 검사가 필요합니다.
현대화에서의 AI 활용
AI는 엔지니어가 모든 결정을 유지하는 동안 모듈화의 읽기 및 문서화 부분을 가속화할 수 있습니다. 문서화되지 않은 모듈의 기능 요약, 의존성 그래프에서 후보 경계 제안, 검토를 위한 특성 테스트 초안 작성이 유용한 영역입니다. 생성된 코드와 테스트는 사람이 검토하고 테스트 스위트가 통과한 후에만 병합됩니다. Netbase JSC는 프로젝트별로 선택된 주요 상용 및 오픈 소스 AI 모델과 협력합니다. 아래 각 항목은 Netbase JSC에서의 성숙도를 명시합니다.
-
납품 완료: 상품 추천 엔진
4over4의 온라인 인쇄 스토어를 위해 브라우징 및 구매 이력을 기반으로 구축되었습니다. 현대화 도구가 아닙니다.
-
성장 역량: AI 지원 코드 매핑 및 테스트 초안 작성
엔지니어링 팀을 위한 머신러닝 및 생성형 AI 기능. 아직 공개된 현대화 사례와 연결되어 있지 않습니다.
존재하는 납품 실적과 존재하지 않는 것
Netbase JSC는 이 가이드가 작성된 환경인 멀티 테넌트 SaaS 제품을 구축하고 운영합니다.
- Cloodo Workspace. CRM, HRM, Cloud ERP 및 AI 모듈이 하나의 제품에 통합된 업무 관리 디지털 워크플레이스로, Netbase JSC 비즈니스 부문으로 구축 및 운영됩니다 (Cloodo 실적).
- 미국 고객사(미공개)를 위한 Cloud ERP. Netbase JSC가 2020년부터 오프쇼어 개발 및 관리 파트너로 개발해온 멀티 테넌트 클라우드 ERP입니다 (클라우드 ERP 실적).
- Printcart. Netbase JSC 비즈니스 부문의 Web to Print SaaS입니다 (Printcart 실적).
- Netztech. 35 영업일 만에 Magento 1에서 Magento 2 Commerce로 이전한 스토어입니다 (Netztech 실적). 이는 플랫폼 마이그레이션이며 모놀리스 분해가 아닙니다.
Netbase JSC의 납품 라이프사이클에는 모듈형 및 제품화된 컴포넌트가 포함되어 있으며, SaaS 제품 액셀러레이터는 재사용 가능한 모듈로 구축됩니다.
존재하지 않는 것. 공개된 Netbase JSC 실적 중 라이브 SaaS 모놀리스를 모듈이나 서비스로 분해한 것을 설명하는 것은 없으며, 이러한 작업에 대한 기간, 배포 빈도, 비용 또는 성능 결과를 공개한 것도 없습니다. 위의 방법은 인용된 출처와 일반적인 엔지니어링 관행에서 나온 것이며, Netbase JSC의 측정된 결과에서 나온 것이 아닙니다.
대안: 작업을 누가 주도하는가
| 방식 | 장점 | 선택 기준 |
|---|---|---|
| 자체 팀 | 가장 깊은 제품 지식 | 역량이 있고 모듈화를 경험한 사람이 있는 경우 |
| 이후에도 제품을 운영하는 제품 에이전시 | 빠른 시작과 연속성 | 설계, 변경 및 운영을 한 파트너에게 맡기고 싶은 경우 |
| 아키텍처 검토 후 혼합 팀 | 약정 전 이음새와 우선순위에 대한 독립적 관점 | 팀이 과부하 상태이고 작업 순서가 불명확한 경우 |
네 가지 기준이 결정합니다. 테스트와 모니터링이 존재하는지, 기존 코드를 이해하는 사람이 얼마나 되는지, 이전 중에 얼마나 많은 로드맵 작업을 계속해야 하는지, 그리고 이후에 아키텍처를 누가 소유해야 하는지입니다. Netbase JSC는 테넌시, 결제, 보안 및 비용에 대한 아키텍처 검토부터 시작하여 슬라이스를 계획합니다. Netbase JSC 커스텀 개발에서 클라이언트는 자신을 위해 생성된 IP를 소유하며, 대부분의 프로젝트는 디스커버리 후 합의된 고정가 계약으로 진행됩니다. 서비스는 SaaS 개발과 클라우드 플랫폼 엔지니어링에 있습니다.
이 가이드의 한계
- 모든 코드베이스는 다릅니다. 첫 번째 의존성 맵이 계획을 바꾸는 경우가 많습니다.
- 프레임워크와 언어마다 경계를 강제하는 도구가 다릅니다. 사용하는 환경이 무엇을 지원하는지 확인하십시오.
- 출처는 문서화된 내용에 대해 인용됩니다. 속도, 비용 또는 신뢰성 수치는 주장하지 않습니다.
자주 묻는 질문
보통 첫 번째 단계로는 아닙니다. 하나의 애플리케이션 내에서 모듈로 구조화하고, 별도의 스케일링, 릴리스 주기 또는 격리에 대한 측정된 필요성이 있는 모듈에 대해서만 서비스를 추출하십시오.
코드 크기, 테스트 커버리지, 데이터가 얼마나 얽혀 있는지에 따라 다릅니다. Netbase JSC는 아키텍처 검토와 첫 번째 의존성 맵 이후에 추정하며, 일반적인 기간을 공개하지 않습니다.
작업이 슬라이스 단위로 출시되고 빌드가 새로운 경계를 나타나는 대로 강제한다면 가능합니다. 두 가지 모두를 위한 역량을 계획하십시오.
먼저 평가하십시오. 플랫폼이 지원 중단되었거나 규칙을 알 수 없다면, 리플랫포밍이나 디스커버리가 모듈화보다 먼저 올 수 있습니다.
다음 단계
현재 제품이 어떻게 배포되는지, 몇 개의 팀이 변경하는지, 어느 부분이 가장 어려운지 알려주시면, 솔루션 검토를 예약하여 이음새를 매핑하고 첫 번째 모듈을 제안해 드립니다. Netbase JSC 인사이트에서 더 많은 내용을 읽을 수도 있습니다.
관련 서비스 및 솔루션
AI 지원 SaaS 개발 - 자체 SaaS를 운영하는 팀
Netbase JSC는 창업자와 제품 팀이 고객이 비용을 지불할 AI 기능을 갖춘 멀티테넌트 구독 소프트웨어를 출시하고 확장할 수 있도록 SaaS 개발 서비스를 제공합니다. 자체 SaaS 플랫폼인 Printcart와 AI 기반 Cloodo 워크플레이스를 직접 구축·운영하며 그 경험을 고객 제품에 적용합니다. 일반적인 SaaS MVP는 범위, 통합 및 검토 속도에 따라 8~12주가 소요됩니다.
더 알아보기
SaaS·커머스 워크로드를 위한 AI 대응 클라우드 플랫폼 엔지니어링
Netbase JSC는 AWS, Google Cloud, DigitalOcean 또는 Cloudflare에서 소프트웨어와 AI 기능을 위한 안전하고 반복 가능한 환경이 필요한 SaaS 및 커머스 팀을 위한 클라우드 플랫폼 엔지니어링을 제공합니다. 아키텍처 설계, 코드형 환경 작성, 관리형 및 AI 서비스 연결, 팀이 운영할 수 있는 플랫폼 인수인계를 수행하며, 저희가 자체 플랫폼을 운영하는 방식으로 구축합니다.
더 알아보기
SaaS 제품 액셀러레이터: 검증된 Netbase JSC 모듈로 AI 지원 SaaS 출시
SaaS 제품 액셀러레이터는 계정, 결제, 역할 및 통합을 위한 재사용 가능한 Netbase JSC 모듈 세트로, 창업자와 제품 팀이 구독형 소프트웨어를 더 빠르게 출시하고 첫 번째 릴리스부터 인앱 AI를 도입할 수 있도록 지원합니다. 이 모듈을 재사용하면 개발 기간을 최대 60% 단축할 수 있으며, 이 접근 방식은 Netbase JSC의 자체 웹투프린트 SaaS인 Printcart를 통해 검증되었습니다.
더 알아보기
프로젝트 논의
Netbase JSC는 조직이 디지털 제품과 AI 기반 비즈니스 시스템을 설계, 구축, 현대화 및 운영할 수 있도록 지원합니다.+84 937 869 689
91 Nguyen Chi Thanh, Dong Da, Hanoi, Vietnam
연락하기
구축, 현대화 또는 운영하고자 하는 내용을 알려주세요.