
레이어드 아키텍처는 소프트웨어 시스템을 관심사(Concern) 별로 수직적으로 분리하여 구성하는 아키텍처 스타일입니다. 관심사란 예를 들어 "사용자 인터페이스 처리", "비즈니스 로직", "데이터 저장/조회"처럼 유사한 책임이 모인 영역을 뜻합니다.
대표적으로는 아래의 3계층으로 구성됩니다:
🔎 이외에도 DTO 매핑을 담당하는 Application Layer를 분리하거나, CQRS 구조에서는 Read/Write Layer를 분리하는 등 확장도 가능합니다.
레이어드 아키텍처에서는 상위 레이어 → 중간 레이어 → 하위 레이어로 요청이 흐르는데, 가끔 중간 레이어(Service)가 아무 일도 하지 않으면서 단순히 하위 레이어의 메서드를 호출만 하는 경우가 생깁니다.
예시 코드:
@Service
public class OrderService {
private final OrderDao orderDao;
public OrderResponse getOrder(Long orderId) {
// 아무 비즈니스 로직도 없이 단순 전달
return orderDao.getOrderById(orderId);
}
}
이러한 구조를 싱크홀 안티패턴이라 부릅니다.
항상 그런 것은 아닙니다.
레이어드 아키텍처는 명확한 책임 분리를 통해 소프트웨어 구조를 정돈할 수 있는 강력한 도구입니다. 하지만 구조만 따르다 보면 형식적인 계층 분리에 그쳐 싱크홀 안티패턴과 같은 비효율이 발생할 수 있습니다.
중요한 것은 "왜 이 계층이 존재하는가?", "어떤 책임을 맡아야 하는가?"에 대한 고민입니다. 팀의 상황, 프로젝트의 복잡도, 유지보수 주체에 따라 유연하게 적용해보세요.