시스템 아키텍트백엔드 개발자

레이어드 아키텍처(Layered Architecture)가 무엇인지, 그리고 그 주요 장점과 제한 사항은 무엇인지 설명해 주세요.

Hintsage AI 어시스턴트로 면접 통과

답변.

레이어드 아키텍처는 IT 시스템을 구성하는 전통적인 방법으로, 애플리케이션이 각각의 추상화 레벨을 구현하는 여러 계층으로 구조화됩니다: 사용자 인터페이스, 비즈니스 로직, 데이터 접근 및 인프라 메커니즘. 일반적으로 Presentation Layer (UI), Business Logic Layer, Data Access Layer 및 Data Layer로 구분됩니다.

각 계층은 인접한 계층과만 상호작용하며, 이는 모듈성을 촉진하고 코드 유지보수를 단순화합니다. 이러한 접근 방식은 시스템의 개별 부분을 쉽게 테스트하고 리팩토링할 수 있게 해줍니다.

코드 예시 (파이썬의 레이어드 아키텍처):

# Data Layer class UserRepository: def get_user(self, user_id): # DB에서 사용자 가져오기 pass # Business Logic Layer class UserService: def __init__(self, repo): self.repo = repo def get_user_profile(self, user_id): user = self.repo.get_user(user_id) # 비즈니스 로직 return user # Presentation Layer class UserController: def __init__(self, service): self.service = service def get(self, user_id): user_profile = self.service.get_user_profile(user_id) return user_profile

주요 특징:

  • 시스템 내에서 계층 간의 책임을 명확히 분리
  • 개별 구성 요소의 유지보수 및 테스트 단순화
  • 충분히 엄격한 격리가 이루어지지 않을 경우 계층 간의 의존성이 과도해질 수 있음

함정 질문.

상위 계층에서 하위 계층으로 바로 접근할 수 있습니까, 중간 계층을 건너뛰면서?

아니요, 레이어드 아키텍처의 개념에 따르면 각 계층은 바로 아래의 계층과만 상호작용합니다. 이 원칙을 위반하면 강한 결합을 초래하고 유지보수를 악화시킵니다.

레이어드 아키텍처가 확장성이 떨어진다고 할 수 있습니까?

항상 그런 것은 아닙니다. 확장이 가능하지만 마이크로서비스와 비교할 때 더 복잡할 수 있습니다. 개별 계층(예: 백엔드 서비스)의 수평적 확장은 표준적인 관행입니다.

하나의 계층이 여러 계층에 걸친 로직을 구현할 수 있습니까?

이론적으로는 아니오. 교차 비즈니스 로직은 혼란을 초래하고 유지보수를 복잡하게 만듭니다. 함수와 클래스는 해당 계층에 있어야 합니다.