#Backend

모놀리식인데, 도메인 하나만 따로 띄웁니다

모놀리식인데, 도메인 하나만 따로 띄웁니다
01

Summary

모놀리식의 반전 매력, 명령 한 줄로 도메인 하나만 떼어 세운다

개발 생산성을 80% 끌어올리고 MSA 이행 경로까지 미리 확보하는 플렉스팀의 영리한 아키텍처 전략

모든 서비스를 통째로 띄워야 했던 거대한 모놀리식 백엔드에서 필요한 도메인만 골라 가볍게 독립 실행하는 'standalone' 빌드 환경 구축 과정을 소개합니다. 모듈러 모놀리식 구조의 강점을 살려 기동 대기 시간을 제거하고 개발 검증 루프를 초고속화한 실무 노하우를 담고 있습니다. 핵심 비즈니스 코드에 영향을 주지 않으면서도 로컬 테스트부터 향후 MSA 분리까지 유연하게 대응하는 아키텍처의 힘을 보여줍니다.

  • 01모듈러 모놀리식의 강점을 활용해 필요한 도메인 모듈만 골라 standalone 애플리케이션으로 기동하는 구조 구현
  • 02기동 시간을 90초에서 20초로 대폭 단축해 한 달 기준 개발자당 약 8시간의 대기 비용 및 맥락 전환 피로 감소
  • 03데이터 주입 시 직접 DB 행 삽입이 아닌 실제 도메인 UseCase를 거치도록 설계해 정합성 높은 시드 데이터 확보
  • 04Unit of Work 경계를 코드 단의 인터페이스로 추상화해 비즈니스 로직 변경 없이 결합 방식(로컬/분산)에 따라 부품 교체 가능
  • 05Swagger UI와 정적 프론트엔드 리소스를 내장하고 Docker 컨테이너 DB 주입을 자동화해 명령 한 줄로 동작하는 완전 독립형 검증 환경 완성

RECOMMENDATION

비대해진 모놀리식 시스템으로 인해 로컬 개발 및 테스트 실행 속도가 느려 답답함을 느끼거나, 향후 점진적인 MSA 전환을 구조적으로 깔끔하게 준비하고 싶은 모든 백엔드 엔지니어들에게 필독을 권합니다.

The Problem

모놀리식 백엔드 환경에서 특정 도메인의 API를 수정하고 테스트할 때 Gateway, 인증, 타 도메인 서비스까지 모든 인프라를 구동해야 하므로 기동 대기 시간이 길어지고 개발 루프의 속도가 느려지는 문제가 발생합니다.

The Solution

모듈러 모놀리식 구조를 이용해 필요한 도메인 모듈만 조립하여 독립 기동(standalone)할 수 있는 가벼운 애플리케이션 빌드를 구성하고, 트랜잭션 처리와 같은 도메인 간의 결합 경계를 인터페이스로 추상화하여 인프라를 유연하게 갈아 끼울 수 있도록 설계했습니다.

The Result

자체 추산 기준 기동 시간을 90초에서 20초로 대폭 단축하여 개발자 1인당 한 달에 약 8시간에 달하는 대기 시간을 절약하였으며, 장기적으로는 비즈니스 로직 수정 없이 해당 도메인을 완벽한 MSA 형태로 격리 분리할 수 있는 아키텍처 유연성을 확보했습니다.

Trade-off

완벽한 도메인 고립을 위해서는 빌드 파일에서 배제해야 할 프로덕션 전용 모듈을 명시적으로 관리해야 하며, 도메인 간 최소한의 비즈니스 연결을 위해 일부 인접 모듈이 의존성을 통해 함께 기동될 수 있음을 감안해야 합니다.

03

Key Concepts

Concept · 01

Modular Monolith

단일 배포 아키텍처 내에서 코드베이스를 기능적, 논리적 단위의 명확한 독립 모듈로 쪼개어 경계를 철저히 관리하는 아키텍처 기법입니다.

  • 도메인별, 계층별로 별도 빌드 모듈을 구성하여 빌드 파일 내에 명시적인 의존성만 성립하도록 통제
  • 전체 애플리케이션에서 특정 도메인 모듈만 선택적으로 조립하여 standalone 형태로 가볍게 기동할 수 있는 뼈대 제공
Concept · 02

Unit of Work

트랜잭션 내에서 처리되는 여러 상태 변화나 DB 영속화 작업을 하나의 원자적인 논리적 작업 단위로 묶어 관리하는 패턴입니다.

  • 채번과 저장을 하나의 단위로 묶는 비즈니스 트랜잭션 경계를 도메인 코드가 소유하는 인터페이스로 구현
  • 로컬 단일 트랜잭션뿐 아니라 분산 환경의 Saga 패턴 및 Outbox 패턴 적용 시에도 비즈니스 로직을 전혀 수정하지 않도록 분리
Concept · 03

Port and Adapter

핵심 비즈니스 규칙이 담긴 내부 도메인 영역을 데이터베이스나 외부 API 등의 인프라 세부 사항과 철저히 분리하고 인터페이스를 통해 상호작용하도록 설계하는 헥사고날 아키텍처 핵심 개념입니다.

  • 외부 시스템 대역이나 가상 시간 등 검증을 저해하는 요소를 상황에 맞게 유연하게 갈아 끼우는 기술적 기반 제공
  • standalone 구동 시 필요한 도메인 전용 어댑터를 제공하여 주변 시스템의 영향 없이 오직 타겟 도메인의 핵심 로직만 순수하게 검증