당근페이 백엔드 아키텍처가 걸어온 여정
아키텍처
당근페이 백엔드 아키텍처가 걸어온 여정
두줄요약
당근페이 백엔드가 계층형 아키텍처에서 헥사고날 아키텍처를 거쳐 클린 아키텍처와 모노레포로 진화한 과정을 소개했습니다. 서비스 성장에 따른 결합도와 배포 복잡도를 줄이기 위해 도메인 분리와 의존성 역전을 강화했습니다.
핵심 내용
- 당근페이 백엔드가 계층형 아키텍처에서 헥사고날 아키텍처, 이어서 클린 아키텍처와 모노레포로 진화한 과정 정리
- 서비스 성장에 따라 도메인과 프로젝트가 늘어나며 결합도, 중복 코드, 배포 범위, 테스트 난이도 문제가 커진 배경 설명
- 구조로 의존성을 제어하고 도메인별 경계와 배포 독립성, 테스트 용이성을 확보하려는 방향 제시
구조와 흐름
- 초기 Money 프로젝트는 Controller-Service-Repository 형태의 단순한 계층형 구조로 빠른 출시를 지원
- 이후 domain, usecase, adapter로 나눈 헥사고날 구조로 전환하며 비즈니스 로직과 외부 구현을 분리
- 더 나아가 클린 아키텍처 기반 모노레포로 도메인별 모듈을 분리하고 의존성 역전과 독립 배포를 지향
선택 이유
- Service 간 강결합, 순환 참조, Spring 침투로 인해 변경 영향 범위가 커진 문제를 해결하기 위해 구조적 제약을 선택
- 도메인 간 경계가 없는 상태에서 여러 서비스가 한 프로젝트에 공존하며 배포와 유지보수 비용이 증가한 점을 개선하려는 목적
- 잘 지키자는 규칙보다 구조가 올바른 방향으로 유도해야 한다는 판단
성능/운영 포인트
- Strangler Fig Pattern과 Feature Toggle로 점진 전환해 리스크를 낮춤
- trunk-based development 환경에서 특정 도메인 변경이 불필요한 서비스 배포로 이어지는 문제를 완화하려는 시도
- 모듈별 테스트, Fixture, Stubbing으로 외부 의존성 없이 검증 가능한 구조 지향