
폭발적인 성장 속에서도 기술 부채를 정면 돌파하며 지속 가능한 시스템을 구축한 아키텍처 여정
당근페이 백엔드 팀이 초기 스타트업의 빠른 실행력을 유지하면서도 거대해진 시스템의 복잡도를 해결하기 위해 선택한 아키텍처 변화 과정을 소개합니다. 단순한 계층 구조에서 시작해 헥사고날을 거쳐 클린 아키텍처와 모노레포로 나아가는 과정에서 겪은 실제 시행착오와 기술적 의사결정 근거를 상세히 공유합니다. 이를 통해 팀의 커뮤니케이션 구조와 비즈니스 성격에 맞게 시스템을 진화시키는 실질적인 엔지니어링 인사이트를 제공합니다.
비즈니스의 급격한 확장으로 인해 기존 아키텍처의 한계를 느끼고 있거나, 마이크로서비스 환경에서 도메인 간 결합도 문제를 해결하고자 하는 시니어 백엔드 개발자에게 강력히 추천합니다. 이론적인 클린 아키텍처 도입을 넘어, 실제 모노레포 환경에서 도메인을 분리하고 배포 효율을 극대화하는 실무적인 가이드가 될 것입니다.
초기 계층형 아키텍처(Layered Architecture) 하에서 서비스가 급성장함에 따라 유스케이스 간 경계가 모호해지고, 서비스 클래스 간의 강한 결합과 순환 참조로 인해 유지보수 및 테스트가 어려워지는 기술 부채가 발생했습니다. 이후 도입한 헥사고날 아키텍처에서도 여러 도메인이 하나의 어댑터를 공유하면서 불필요한 의존성이 생기고, 특정 도메인 변경 시 관계없는 서비스까지 일괄 배포되는 비효율이 나타났습니다.
도메인 로직과 외부 구현을 분리하는 헥사고날 아키텍처를 거쳐, 최종적으로 클린 아키텍처(Clean Architecture) 기반의 모노레포 구조로 전환하여 도메인 간 모듈 경계를 명확히 했습니다. Strangler Fig 패턴과 Feature Toggle을 활용해 점진적으로 기능을 이관했으며, bootstrap, core, infrastructure 등 6개의 계층으로 모듈을 세분화하여 의존성 역전 원칙을 철저히 준수하는 구조를 확립했습니다.
코드 라인 수가 전년 대비 192% 증가했음에도 불구하고 빌드 및 배포 속도를 효율적으로 유지하여 빠른 피드백 루프를 확보했으며, 도메인 단위의 독립 배포가 가능해졌습니다. 모노레포 도입을 통해 팀 내 기술적 성숙도가 상향 평준화되었고, PR 생성 및 코드 리뷰 참여도가 크게 상승하여 협업 문화와 시스템 안정성이 동시에 강화되는 정성적 성과를 거두었습니다.
Trade-off
시스템 구조가 고도화됨에 따라 모듈과 레이어 경계에 대한 팀원 간 해석 차이가 발생할 수 있으며, 코드베이스가 거대해짐에 따른 인지 부하 증가의 위험이 존재합니다. 본문에서는 모노레포가 모든 조직에 정답은 아니며, 팀 규모와 비즈니스 상황에 따라 지속적인 아키텍처 개선 비용이 발생할 수 있음을 언급하고 있습니다.
애플리케이션의 핵심 비즈니스 로직을 외부 기술(DB, UI, API 등)로부터 독립시키기 위해 포트와 어댑터를 사용하는 아키텍처입니다.
여러 프로젝트나 마이크로서비스의 코드를 하나의 리포지토리에서 관리하며 표준화된 규칙을 적용하는 방식입니다.
기존 시스템을 한 번에 교체하지 않고, 기능 단위로 새 시스템으로 옮겨가며 점진적으로 대체하는 현대화 전략입니다.









