Files
2nd/10_Wiki/Topics/02_Architecture_Principles/Layered Architecture.md
T
2026-05-02 16:24:15 +09:00

9.1 KiB

id, category, confidence_score, tags, last_reinforced
id category confidence_score tags last_reinforced
P-REINFORCE-WIKI-16013C99 10_Wiki/💡 Topics/02_Architecture_Principles 0.95
layered-architecture
monolithic-architecture
hexagonal-architecture
clean-architecture
separation-of-concerns
architecture-principles
2026-05-02

Layered Architecture

📌 Brief 시 Summary

Layered Architecture(계층형 아키텍처)는 소프트웨어 시스템을 각기 다른 책임을 가진 수평적인 여러 계층(Layer)으로 나누어 구성하는 패턴으로, N-티어(N-tier) 아키텍처라고도 불린다 [1-3]. 일반적으로 프리젠테이션, 비즈니스 로직, 데이터 접근 계층 등으로 나뉘며, 각 계층은 관심사의 분리를 통해 서로 독립적으로 작동한다 [3-5]. 구조가 직관적이고 구현이 쉬워 단순한 애플리케이션이나 스타트업의 MVP(Minimum Viable Product) 개발에 널리 채택되지만, 고도의 확장성이나 복잡성을 감당하기에는 한계가 있다 [3, 6, 7].

📖 Core Content

  • 기본 구조 및 계층의 분리: 이 패턴은 애플리케이션을 여러 계층으로 쌓아 올린 형태로 구성하며, 일반적으로 사용자 인터페이스를 담당하는 프리젠테이션 계층(Presentation Layer), 애플리케이션의 워크플로우를 조정하는 애플리케이션/서비스 계층(Application/Service Layer), 핵심 비즈니스 규칙이 위치하는 비즈니스/도메인 계층(Business/Domain Layer), 그리고 데이터 저장 및 조회를 관리하는 **퍼시스턴스/데이터 계층(Persistence/Data Layer)**으로 나뉜다 [3-5].

  • 계층의 격리 (Layers of Isolation): 계층형 아키텍처의 핵심 원칙 중 하나는 각 계층이 고유한 책임만 수행하며, 원칙적으로 바로 인접한 계층(주로 하위 계층)과만 통신한다는 점이다 [3, 4, 8]. 한 계층의 내부 구현이 변경되더라도, 잘 정의된 인터페이스를 통한다면 다른 계층에 영향을 주지 않으므로 모듈성과 유지보수성이 향상된다 [3, 4, 8].

  • 콘웨이의 법칙(Conway's Law)과 거시적 구조: 계층형 아키텍처의 수평적 구조는 소프트웨어를 넘어 개발 조직의 구조와 직접적으로 매핑되는 거시적(Macro) 아키텍처의 특성을 띤다 [9]. 예를 들어, 프론트엔드 팀(UI/UX 개발)은 프리젠테이션 계층을, 백엔드 팀(Java 등의 개발자)은 비즈니스 계층을, DBA는 데이터베이스 계층을 각각 전담하는 방식으로 조직 구조와 아키텍처가 일치하는 경향을 보인다 [9].

  • 적용 및 활용 환경: 이 패턴은 개념을 이해하고 구현하기가 매우 쉬워 초보자 및 교육 목적, 혹은 역할 분담이 명확한 중소규모 팀에 적합하다 [6, 7, 10]. 초기 인프라 설정 비용이 적게 들고 배포가 간단하기 때문에 기능이 복잡하지 않은 CRUD 기반 시스템이나 빠른 시장 출시가 필요한 스타트업에서 유용하게 쓰인다 [1, 6, 7].

⚖️ Trade-offs & Caveats

  • 성능 병목 현상 및 지연 시간(Latency): 단순한 요청이라 하더라도 프리젠테이션 계층에서 데이터베이스 계층에 이르기까지 모든 계층을 순차적으로 통과해야만 하므로, 이러한 프로세스는 성능 병목과 통신 지연(Latency)을 유발할 수 있다 [10, 11].
  • 확장성의 구조적 한계: 일부 컴포넌트나 특정 계층에만 부하가 집중되더라도 해당 부분만 독립적으로 확장하기 어려우며, 애플리케이션 전체를 하나의 단위로 확장해야 하므로 고부하 및 실시간 시스템에는 부적합하다 [6, 10, 11].
  • 강한 결합(Tight Coupling)과 구조적 붕괴: 시간이 지남에 따라 엄격한 계층 분리가 느슨해지면, 비즈니스 로직이 프리젠테이션이나 데이터 접근 계층으로 유출되는 누수 현상이 발생할 수 있다 [8, 10]. 이러한 계층 건너뛰기와 강한 결합은 코드 수정을 어렵게 하고 유연성을 크게 떨어뜨린다 [8, 10, 11].
  • 보안 및 감사(Auditing)의 취약점: 명확한 경계가 무너지면, 입력 검증이나 데이터 정제 같은 보안 로직이 여러 계층에 중복되거나 누락될 위험이 커진다 [12, 13]. 예를 들어 UI 계층에서 입력을 검증하고 서비스 계층에서 이를 재검증하지 않으면 SQL 인젝션 등의 위험이 발생할 수 있어, 일관된 보안 정책 적용이나 감사 추적이 어려워진다 [12, 13].
  • 테스트 복잡도 증가: 시스템이 커지고 계층 간 결합도가 높아지면, 특정 비즈니스 로직만을 격리하여 단위 테스트하기가 힘들어지며, 복잡한 모킹(Mocking)이 필요한 통합 테스트에 의존하게 되어 테스트의 효율성이 저하된다 [14].

🔗 Knowledge Connections

[아키텍처 및 기반 설계 기술]

  • Monolithic Architecture
    • 연결 이유: Layered Architecture는 주로 모든 컴포넌트가 하나의 통합된 코드베이스로 배포되는 모놀리식 아키텍처의 내부 구조 패턴으로 흔히 사용된다 [15, 16].
    • 이 개념을 통해 더 깊게 이해할 수 있는 부분: 마이크로서비스와 대비되는 단일 배포 시스템의 특징, 그리고 단일 시스템 내에서의 내부 모듈화 한계를 이해할 수 있다.
  • Hexagonal Architecture / Clean Architecture
    • 연결 이유: Layered Architecture의 단점(데이터베이스 중심의 강한 결합 등)을 극복하기 위해, 비즈니스 도메인을 중심에 두고 의존성을 역전시킨 발전된 설계 패턴들이다 [17-19].
    • 이 개념을 통해 더 깊게 이해할 수 있는 부분: 아키텍처에서 기술적 요소(UI, DB)와 비즈니스 로직을 완벽히 분리하고, 테스트 용이성을 극대화하는 방법을 비교 학습할 수 있다.

[소프트웨어 공학 및 설계 원리]

  • Separation of Concerns
    • 연결 이유: Layered Architecture가 UI, 비즈니스 규칙, 데이터 처리 등을 각각의 계층으로 나누는 근간이 되는 핵심 공학 원리이다 [4].
    • 이 개념을 통해 더 깊게 이해할 수 있는 부분: 시스템의 복잡성을 낮추고 특정 책임을 가진 코드만 수정할 수 있게 만드는 모듈화의 중요성을 배울 수 있다.

Deeper Research Questions

  • 성능 오버헤드를 줄이기 위해 Layered Architecture에서 일부 계층을 우회하는 '계층 건너뛰기'를 허용할 때, 시스템의 유지보수성에 미치는 치명적인 영향은 무엇인가?
  • 초기 MVP를 Layered Architecture로 구축한 스타트업이 향후 시스템 복잡도가 증가함에 따라 Clean Architecture나 Microservices로 전환(Refactoring)할 때 고려해야 할 단계별 전략은 무엇인가?
  • 비즈니스 로직이 데이터 계층이나 프리젠테이션 계층으로 누수(Leak)되는 것을 방지하기 위해, 코드 리뷰 및 정적 분석 도구를 어떻게 활용할 수 있는가?
  • Layered Architecture에서 계층별로 독립적인 단위 테스트를 작성할 때, Mocking의 과도한 사용이 테스트의 취약성(Brittle Tests)을 높이는 문제를 어떻게 해결할 수 있는가?
  • 의존성 주입(Dependency Injection) 프레임워크가 Layered Architecture의 강한 결합을 완화하는 데 어떤 기여를 하는가?

Practical Application Contexts

  • Implementation: 디렉토리 및 패키지 구조를 controller(프리젠테이션), service(비즈니스 로직), repository(데이터 접근) 등으로 명확히 나누어 코드를 물리적으로 분리하여 구현한다.
  • System Design: 사용자의 트래픽이 많지 않고 요구사항이 비교적 단순한 사내 관리용 백오피스 툴이나 기본적인 CRUD 웹 애플리케이션을 설계할 때 가장 우선적으로 고려할 수 있다.
  • Operation / Maintenance: 특정 데이터베이스 공급업체를 변경하거나 새로운 프론트엔드 프레임워크를 적용할 때, 해당 계층의 코드만 수정하여 유지보수 비용을 최소화하는 운영 전략에 활용된다.
  • Learning Path: 복잡한 설계 패턴(DDD, Clean Architecture 등)을 배우기 전, 소프트웨어의 관심사를 어떻게 분리하고 구성하는지에 대한 기본 개념을 학습하는 가장 좋은 출발점이 된다.
  • My Project Relevance: 한정된 예산과 짧은 기간 내에 시장의 반응을 확인해야 하는 신규 서비스 개발에서, 복잡한 인프라 오버헤드 없이 신속하게 시스템을 구축할 때 적용할 수 있다.

Adjacent Topics

  • Conway's Law
    • 확장 방향: 아키텍처의 수평적 분할이 실제 기업 내 프론트엔드, 백엔드, DBA 팀 구조와 어떻게 상호작용하고 진화하는지 조직 공학적 관점에서 탐구한다.
  • Microservices Architecture Pattern
    • 확장 방향: 계층형 모놀리스의 확장성 한계를 넘어섰을 때, 애플리케이션을 수직적이고 자율적인 비즈니스 단위의 분산 서비스로 쪼개는 아키텍처로의 전환을 이해한다.

Last updated: 2026-05-02