Phase 4레슨 16

Layered Architecture

Presentation, Business, Persistence, Database — 가장 전통적인 아키텍처

💡ELI5·

회사 조직도와 계층

Presentation  (UI — 사용자 요청/응답)
     ↓
Business      (비즈니스 로직 — 서비스)
     ↓
Persistence   (DB 접근 — Repository, DAO)
     ↓
Database      (데이터 저장)
💡 비유회사 조직도: 영업팀(Presentation)이 고객 응대 → 기획팀(Business)이 처리 → 회계팀(Persistence)이 기록 → 창고(Database). 위에서 아래로만 흐르고, 아래 팀은 위 팀을 모른다.
🔬Deep Dive·

4계층 구조

계층역할예시
Presentation사용자 입력, 화면 렌더링, API 엔드포인트Controller, View, React Component
Business비즈니스 규칙, 도메인 로직Service, Domain Model
PersistenceDB 조회/저장, ORM 매핑Repository, DAO, Entity
Database데이터 저장MySQL, PostgreSQL
// Presentation
class UserController {
  getUser(id: string) {
    return userService.getUser(id); // → Business
  }
}

// Business
class UserService {
  getUser(id: string) {
    return userRepository.findById(id); // → Persistence
  }
}

// Persistence
class UserRepository {
  findById(id: string) {
    return db.query('SELECT * FROM users WHERE id = ?', id);
  }
}
🔬Deep Dive·

Anemic Domain Model — 흔한 함정

Layered Architecture에서 비즈니스 계층이 'Service' 클래스로만 구성되고, 도메인 객체는 단순 데이터 홀더(getter/setter만 있는 DTO)가 되는 현상. 실제 로직은 Service나 Repository(SQL)에 흩어진다. 이를 Anemic Domain Model이라 한다.

문제: 비즈니스 규칙이 SQL이나 Service에 섞여 있어, 도메인 변경 시 여러 곳을 수정해야 하고 테스트가 어렵다. Martin Fowler는 이를 안티 패턴으로 분류했다.
⚖️Trade-off·

Layered의 장단점

장점단점
이해와 구현이 쉬움비즈니스 로직이 DB에 종속
빠른 개발 (CRUD에 적합)Anemic Domain Model 빠지기 쉬움
모든 계층이 같은 프로젝트계층 간 결합도 증가
작은 팀에 적합도메인 복잡 시 유지보수 비용 급증

❓ 체크포인트 질문

  1. 1.Layered Architecture의 각 계층이 의존하는 방향은?
  2. 2.Layered Architecture의 가장 흔한 안티 패턴은?
  3. 3.Layered Architecture가 작은 프로젝트에 적합한 이유는?
  4. 4.Layered Architecture가 커지면서 발생하는 문제는?
  5. 5.Layered에서 Clean/Hexagonal로 넘어가는 시점은?