코드의 여백

레이어드 아키텍처(Layered Architecture) 알아보기

by rowing0328

Intro

소프트웨어 개발을 공부하면서 자연스럽게 마주친 개념 중 하나가 레이어드 아키텍처다.

 

처음에는 단순히 "계층을 나눠서 개발하는 것"이라고만 생각했는데, 학습을 이어가면서 이 구조의 매력과 한계를 동시에 느낄 수 있었다.

 

그래서 이번 글에서는 내가 이해한 레이어드 아키텍처를 정리하면서, 이 구조가 왜 중요한지 그리고 어떤 점에서 고민할 만한 가치가 있는지 이야기해보려고 한다.

 

레이어드 아키텍처란

레이어드 아키텍처는 소프트웨어 시스템을 관심사 별로 여러 계층으로 분리한 아키텍처를 뜻한다.

각 계층이 애플리케이션 안에서 특정 역할과 책임을 맡고, 그 구분이 명확하게 이루어진다.

잘 설계된 레이어드 아키텍처는 구성 요소 간 관심사가 확실히 분리되어 있다는 점이 특징이다.

 

또한, 이들은 추상화된 인터페이스를 통해 소통하며, 상위 계층이 하위 계층에 요청을 보내는 방식으로 동작한다.

여기서 핵심은 단방향 의존성이다. 하위 계층은 상위 계층의 세부 구현에 의존하지 않는다.

 

4-tier 아키텍처의 구조

레이어드 아키텍처의 가장 일반적인 형태는 4-tier 아키텍처다.

이 구조는 다음과 같은 계층으로 구성된다 :

  • Presentation Layer
    사용자 또는 클라이언트 시스템과 직접적으로 연결되는 부분
    UI와 관련된 요소를 담당하며, 비즈니스 로직 등은 이 계층의 관심사가 아니다.
  • Business Layer
    시스템의 핵심 로직을 구현하는 계층
    사용자의 요청을 처리하며, 데이터 조작과 검증 같은 주요 로직을 담당한다.
  • Persistence Layer
    데이터의 영구 저장과 관리를 담당하는 계층
    데이터베이스와의 상호작용을 추상화하여, 데이터 저장 방식과 상관없이 로직을 처리할 수 있도록 한다.
  • Database Layer
    실제 데이터가 저장되는 데이터베이스 계층

 

관심사를 분리하는 이유

우리는 왜 이토록 관심사를 분리하고, 다른 계층에 영향받지 않는 독립적인 계층을 만들기 위해 노력할까?

 

첫눈에 보기에는 Presentation Layer에서 직접 DB에 접근하는 것이 더 빠르고 간단해 보일 수 있다.

그러나 이는 관심사가 분리되지 않은 구조로, 여러 문제를 야기할 수 있다.

 

만약 관심사를 제대로 분리하지 않는다면 어떤 일이 발생할까?

  • 변경에 대한 취약성
    DB 구조가 변경되거나 저장 방식이 바뀌면, Presentation Layer의 코드도 수정해야 한다.
    UI와 DB라는 서로 다른 관심사가 얽혀 있어, 수정할 부분을 찾기 어렵고, 변경의 영향 범위가 커진다.
  • 재사용성 감소
    DB에 접근하는 로직이 Presentation Layer에 섞여 있다면, 다른 UI 환경에서는 이를 재사용할 수 없다.
    결과적으로 동일한 기능을 여러 번 구현해야 하는 비효율이 발생한다.
  • 테스트의 복잡성 증가
    Presentation Layer와 Persistence Layer가 결합되어 있다면, 단위 테스트를 작성하기 어렵다.
    UI 테스트를 작성하면서 DB 연결까지 설정해야 하는 상황이 발생할 수 있다.
  • 코드 유지보수 비용 증가
    레이어 간 경계가 모호해지고, 시스템의 복잡도가 증가한다.
    특정 기능을 수정할 때 어디를 수정해야 할지 파악하기 어려워지고, 오류 가능성이 높아진다.

 

특정 요구사항에서의 유연성 필요

모든 요청이 항상 동일한 계층 흐름을 따라야 하는 것은 아니다.

특정 요청은 고유한 처리 단계를 요구할 수 있으며, 이에 따라 계층에 예외적인 처리가 필요할 때도 있다.

 

예를 들어, 이미지를 DB에 저장하기 전에 이미지 합성 계층을 추가해야 한다고 가정해보자.

이 경우, 이미지 합성 계층은 다른 요청과는 관계없이, 해당 요청에서만 작동하도록 설계될 수 있다.

 

이러한 유연성은 레이어드 아키텍처가 단순한 계층적 흐름만을 강요하는 것이 아니라, 요구사항에 맞게 확장 가능한 구조임을 보여준다.

 

마무리

레이어드 아키텍처는 소프트웨어 설계의 기본이자, 유지보수성과 확장성을 높이는 핵심적인 패턴이다.

특히 관심사의 분리와 계층 간 독립성은, 변경과 확장을 고려해야 하는 현대 소프트웨어 개발에서 그 가치를 발휘한다.

 

물론, 모든 상황에서 완벽한 해결책은 아니며, 특정 요구사항에 따라 계층 구조를 유연하게 설계하는 것이 중요하다.

이를 이해하고 활용하는 것이 소프트웨어 설계 역량을 한 단계 높이는 시작점이 될 것 이다.

 

참고 자료 : 

[소프트웨어 아키텍처] 레이어드 아키텍처(Layered Architecture)란?

 

[소프트웨어 아키텍처] 레이어드 아키텍처(Layered Architecture)란?

레이어드 아키텍처(Layered Architecture)가 무엇인지 알아보자. 소프트웨어 아키텍처란? 소프트웨어 아키텍처란, 소프트웨어 시스템의 전체적인 구조와 구성요소들 간의 상호작용을 설계하는 것을

xxeol.tistory.com

블로그의 정보

코드의 여백

rowing0328

활동하기