study/소프트웨어 공학

레이어드 아키텍처: 3-tier architecture

836586697769 2024. 7. 7. 17:05

3-tier architecture란?

애플리케이션을 세 개의 주요 레이어로 분리하여 구조화하는 소프트웨어 아키텍처 패턴 중 하나

// Presentation Layer (사용자 인터페이스)
const main = async () => {
    const userService = new UserService();    
    await userService.addUser('tester', 'tester@test.com');
};

// Business Logic Layer (비즈니스 로직)
export class UserService {
    private userRepository: UserRepository;
    constructor(userRepository: UserRepository) {
        this.userRepository = userRepository;
    }
    async addUser(name: string, email: string): Promise<void> {
        await this.userRepository.saveUser({ name, email });
    }
}

// Data Access Layer (데이터 접근)
export interface User {
    name: string;
    email: string;
}
export class UserRepository {
    async saveUser(user: User): Promise<void> {
        // 사용자 저장 로직
    }
}

장점

  • 각 레이어가 명확히 분리되어 있어 코드의 변경이 다른 레이어에 영향을 미치지 않음
  • 모듈성 향상: 각 레이어를 독립적으로 개발 가능
  • 테스트 용이성 향상: 각 레이어를 개별적으로 테스트 가능해서 효율적이고, 모의 객체를 활용할 수 있음
  • 재사용성 향상: 비즈니스 로직과 데이터 접근 코드를 여러 애플리케이션에서 재사용 가능
  • 시스템 확장성 향상: 각 레이어를 독립적으로 확장 가능

단점

  • 레이어의 분리로 인해 시스템이 더 복잡해질 수 있음
  • 레이어 간의 통신 오버헤드로 인해 성능이 저하될 수 있음
  • 초레이어 간의 명확한 인터페이스 정의 등으로 인해 초기 개발 속도가 느릴 수 있음