DevLog

엔지니어링 블로그를 한 곳에서 탐색하고, 최근 발행 흐름을 빠르게 파악할 수 있는 서비스 입니다.

Quick Links

  • Latest Feed
  • Engineering Directory

Support

  • 소개
  • 개인정보처리방침

Contribute

  • 원하는 블로그 추가 (준비 중)
  • Feedback

© 2026 DevLog Inc. All rights reserved.

본 사이트는 공개 RSS 피드를 통해 콘텐츠를 수집하며, 모든 콘텐츠의 저작권은 원저작자에게 있습니다.

Back to Feed
Read Original

Contents

Continue Reading

  • More from 당근
  • Related reads#HexagonalArchitecture
#Backend

당근페이 백엔드 아키텍처가 걸어온 여정

당근페이 백엔드 아키텍처가 걸어온 여정
01

Summary

스파게티 코드에서 클린 아키텍처까지, 당근페이 백엔드의 4년 생존기

폭발적인 성장 속에서도 기술 부채를 정면 돌파하며 지속 가능한 시스템을 구축한 아키텍처 여정

당근페이 백엔드 팀이 초기 스타트업의 빠른 실행력을 유지하면서도 거대해진 시스템의 복잡도를 해결하기 위해 선택한 아키텍처 변화 과정을 소개합니다. 단순한 계층 구조에서 시작해 헥사고날을 거쳐 클린 아키텍처와 모노레포로 나아가는 과정에서 겪은 실제 시행착오와 기술적 의사결정 근거를 상세히 공유합니다. 이를 통해 팀의 커뮤니케이션 구조와 비즈니스 성격에 맞게 시스템을 진화시키는 실질적인 엔지니어링 인사이트를 제공합니다.

  • 01계층형 아키텍처의 의존성 문제를 구조적으로 제어하기 위한 헥사고날 아키텍처 도입 사례
  • 02Strangler Fig 패턴을 활용해 운영 중인 서비스를 안전하게 점진적으로 리팩터링하는 전략
  • 03모노레포 환경에서 수십 개의 마이크로서비스를 일관성 있게 관리하고 배포 독립성을 확보하는 방법
  • 04코드 라인이 2배 가까이 늘어도 빌드 속도를 유지하며 개발 생산성을 지켜낸 비결
  • 05코드 리뷰와 온콜 시스템 자동화를 통해 개인의 경험을 팀 전체의 지식으로 자산화한 과정

+RECOMMENDATION

비즈니스의 급격한 확장으로 인해 기존 아키텍처의 한계를 느끼고 있거나, 마이크로서비스 환경에서 도메인 간 결합도 문제를 해결하고자 하는 시니어 백엔드 개발자에게 강력히 추천합니다. 이론적인 클린 아키텍처 도입을 넘어, 실제 모노레포 환경에서 도메인을 분리하고 배포 효율을 극대화하는 실무적인 가이드가 될 것입니다.

The Problem

초기 계층형 아키텍처(Layered Architecture) 하에서 서비스가 급성장함에 따라 유스케이스 간 경계가 모호해지고, 서비스 클래스 간의 강한 결합과 순환 참조로 인해 유지보수 및 테스트가 어려워지는 기술 부채가 발생했습니다. 이후 도입한 헥사고날 아키텍처에서도 여러 도메인이 하나의 어댑터를 공유하면서 불필요한 의존성이 생기고, 특정 도메인 변경 시 관계없는 서비스까지 일괄 배포되는 비효율이 나타났습니다.

The Solution

도메인 로직과 외부 구현을 분리하는 헥사고날 아키텍처를 거쳐, 최종적으로 클린 아키텍처(Clean Architecture) 기반의 모노레포 구조로 전환하여 도메인 간 모듈 경계를 명확히 했습니다. Strangler Fig 패턴과 Feature Toggle을 활용해 점진적으로 기능을 이관했으며, bootstrap, core, infrastructure 등 6개의 계층으로 모듈을 세분화하여 의존성 역전 원칙을 철저히 준수하는 구조를 확립했습니다.

The Result

코드 라인 수가 전년 대비 192% 증가했음에도 불구하고 빌드 및 배포 속도를 효율적으로 유지하여 빠른 피드백 루프를 확보했으며, 도메인 단위의 독립 배포가 가능해졌습니다. 모노레포 도입을 통해 팀 내 기술적 성숙도가 상향 평준화되었고, PR 생성 및 코드 리뷰 참여도가 크게 상승하여 협업 문화와 시스템 안정성이 동시에 강화되는 정성적 성과를 거두었습니다.

Trade-off

시스템 구조가 고도화됨에 따라 모듈과 레이어 경계에 대한 팀원 간 해석 차이가 발생할 수 있으며, 코드베이스가 거대해짐에 따른 인지 부하 증가의 위험이 존재합니다. 본문에서는 모노레포가 모든 조직에 정답은 아니며, 팀 규모와 비즈니스 상황에 따라 지속적인 아키텍처 개선 비용이 발생할 수 있음을 언급하고 있습니다.

03

Key Concepts

Concept · 01

Hexagonal Architecture (Ports & Adapters)

애플리케이션의 핵심 비즈니스 로직을 외부 기술(DB, UI, API 등)로부터 독립시키기 위해 포트와 어댑터를 사용하는 아키텍처입니다.

  • Domain 모듈을 POJO로 구성하여 프레임워크나 외부 기술 의존성을 완전히 제거
  • UseCase 모듈에서 사용자 시나리오 단위로 비즈니스 로직을 응집하여 재사용성 증대
  • 인터페이스 기반의 의존성 연결로 잘못된 의존성 생성을 구조적으로 방지
Concept · 02

Monorepo

여러 프로젝트나 마이크로서비스의 코드를 하나의 리포지토리에서 관리하며 표준화된 규칙을 적용하는 방식입니다.

  • 공통 설정, 라이브러리, 인프라 코드를 원자적으로 관리하여 시스템 일관성 확보
  • Scaffolding 도구를 통해 새로운 서비스 구축 시 보일러플레이트 제거 및 개발 속도 향상
  • 모든 서비스에 대한 가시성을 높여 문제 발생 시 전사적 대응 및 기술 공유 활성화
Concept · 03

Strangler Fig Pattern

기존 시스템을 한 번에 교체하지 않고, 기능 단위로 새 시스템으로 옮겨가며 점진적으로 대체하는 현대화 전략입니다.

  • Feature Toggle과 병행하여 실시간 서비스 중단 없이 아키텍처 마이그레이션 수행
  • 리스크가 큰 대규모 빅뱅 방식 대신 안전한 단계별 전환 가능
  • 안정화된 기능부터 순차적으로 이관함으로써 시스템 신뢰도 유지
Continue reading · same source

당근More from 당근

View all posts from 당근
  • 혼자 시작해 전국 오픈까지, 당근 레슨/과외 빌딩 로그

    MarketplaceProduct Market FitFunnel Optimization
    2주 전
  • 디자인시스템 팀은 디자인시스템만 잘 만들면 될까

    Design SystemAI in DesignUX Patterns
    1개월 전
  • 당근 200+개 DB 를 옮기는 ELT 플랫폼, DT Platform 을 만든 이야기

    ELTApache SparkApache Airflow
    1개월 전
  • 누구나 찾아볼 수 있는 중고거래 서버 LLM 릴리즈 노트 도입기

    LLMGitHub ActionsNotion
    2개월 전
  • How We Protect Karrot’s Internal PyPI Proxy from Supply Chain Attacks

    PyPIAWS CodeArtifactSecurity Cooldown
    2개월 전

Related reads#HexagonalArchitecture

Explore #HexagonalArchitecture
Flex·Gradle

되도록 최신 버전을 사용하는게 왜 이렇게 어려울까?

#HexagonalArchitecture4일 전
Flex·IaC

[인프라를 소프트웨어처럼 4/5] plan은 동작을 모른다: 인프라를 테스트·재현한다는 것

#HexagonalArchitecture1주 전
Flex

[AI가 읽을 수 있는 코드베이스 3/5] Standalone App: 도메인 슬라이스 독립 실행

#HexagonalArchitecture1개월 전
Flex

[AI가 읽을 수 있는 코드베이스 1/5] 프롬프트보다 구조가 먼저다

#HexagonalArchitecture1개월 전
Flex

[코드가 환경을 모르는 구조 4/7] 타임머신 — 시간 축을 교체한다

#HexagonalArchitecture2개월 전

Source

당근
당근
Engineering Blog

Published · January 15, 2026

Topics

Hexagonal ArchitectureClean ArchitectureMonorepoRefactoringDomain-Driven DesignKotlinMicroservicesStrangler Fig Pattern