[System Architecture Patterns] 4계층 아키텍처 (4-Tier Architecture)

4계층 아키텍처 (4-Tier Architecture)

4계층 아키텍처는 애플리케이션을 논리적으로 분리된 네 개의 계층으로 구성하는 소프트웨어 설계 패턴입니다. 이 아키텍처는 관심사의 분리를 통해 유지보수성과 확장성을 향상시킵니다. 각 계층과 그 주요 요소들은 다음과 같습니다:

1. Presentation Layer (표현 계층)

- 주요 요소: View, Controller
- 역할: 사용자 인터페이스와 데이터 표현을 담당

2. Business Layer (비즈니스 계층)

- 주요 요소: Service, Domain Model
- 역할: 비즈니스 로직 처리 및 규칙 적용

3. Persistence Layer (영속성 계층)

- 주요 요소: Repository, DAO (Data Access Object)
- 역할: 데이터의 영속성 관리 및 데이터베이스 작업 처리

4. Database Layer (데이터베이스 계층)

- 주요 요소: 실제 데이터베이스 시스템 (예: MySQL, PostgreSQL)
- 역할: 데이터의 물리적 저장 및 관리

Service와 Repository 의존성 문제 해결

Service(고수준 모듈)가 Repository(저수준 모듈)에 직접 의존하는 문제는 의존성 역전 원칙(Dependency Inversion Principle, DIP)을 적용하여 해결할 수 있습니다. 주요 해결 방법은 다음과 같습니다:

1. 인터페이스 도입: Repository에 대한 인터페이스를 정의하고, Service는 이 인터페이스에 의존하도록 합니다

   public interface UserRepository {
       User findById(Long id);
       void save(User user);
   }

   @Service
   public class UserService {
       private final UserRepository userRepository;

       public UserService(UserRepository userRepository) {
           this.userRepository = userRepository;
       }
   }



2. 의존성 주입: 구체적인 Repository 구현체는 외부에서 주입받도록 설계합니다

3. 추상화 계층 도입: Repository 패턴을 사용하여 데이터 접근 로직을 추상화합니다

4. Facade 패턴 적용: 복잡한 하위 시스템에 대한 단순화된 인터페이스를 제공하는 Facade 객체를 도입하여 의존성을 관리합니다

   public class UserFacade {
       private final UserRepository userRepository;
       private final ProfileRepository profileRepository;

       public UserFacade(UserRepository userRepository, ProfileRepository profileRepository) {
           this.userRepository = userRepository;
           this.profileRepository = profileRepository;
       }

       public UserProfileDto getUserProfile(Long userId) {
           User user = userRepository.findById(userId);
           Profile profile = profileRepository.findByUserId(userId);
           return new UserProfileDto(user, profile);
       }
   }


이러한 접근 방식을 통해 고수준 모듈(Service)은 저수준 모듈(Repository)의 구체적인 구현에 의존하지 않고, 추상화된 인터페이스에 의존하게 됩니다. 이로써 시스템의 유연성과 테스트 용이성이 향상되며, 각 계층의 독립성이 보장됩니다

'System Architecture Patterns' 카테고리의 다른 글

[System Architecture Patterns] CQRS 패턴  (0) 2025.02.14