Layered Architecture - 계층화 아키텍처
✔️ 아키텍처(Architecture)란?
시스템의 구조, 동작 등을 정의하는 개념적인 모형으로 목적을 달성하기 위해 시스템의 각 컴포넌트가 무엇이며 어떻게 상호작용 하는지, 정보가 어떻게 교환되는지를 설명한다.
"하나의 서비스가 어떻게 구성이 되며 어떻게 동작이 된다" - 서비스의 동작 원리
✔️ 계층화 아키텍처 (Layered Architecture)란?
- 아키텍처의 컴포넌트들은 각각 어플리케이션의 특정한 역할을 수행하도록 가로로 나누어져 계층을 이룬다.
- 가장 널리 알려진 아키텍처로 전통적인 IT workflow와 조직 구성이 잘 맞아 떨어져 많은 비즈니스에서 채택된다.
- 주로 3계층으로 이루어져 있다.
- 유저 + 브라우저와 상호작용하는 Presentation Layer
- 요청에 따른 비즈니스 로직을 수행하는 Business Layer
- 데이터를 저장, 관리하는 Persistence Layer
- 데이터베이스 그 자체인 Database Layer
1. Presentation Layer
이 계층은 클라이언트의 요청을 받고 응답하는 계층이다. 이 계층의 특징은 어떻게 클라이언트의 요청을 처리할 것인지는 관심이 없고 그저 요청을 어떻게 받고 응답을 어떻게 할지에 대해 관심이 있는 계층이다. 요청에 대한 처리는 Buseness Layer로 전달한다. ex) Spring의 Controller
2. Business Layer
비지니스 로직을 담당하는 계층으로 Presentation Layer가 클라이언트의 요청을 받아오면 Buseness는 실제 요청에 대한 처리를 하는 부분이다. 클라이언트가 웹이던 앱이던 혹은 database를 어떤 것을 사용하는지는 관심 없으며 그저 비지니스 로직을 처리한다. ex) Spring의 Service
3. Persistence Layer
데이터베이스에 접근하는 계층으로 Business의 요청 처리에 따라 데이터베이스에서 데이터를 저장, 조회, 삭제 등의 로직을 수행한다. ex) Spring의 Repository
4. Database Layer
말 그대로 데이터베이스 그 자체이다.
위 처럼 계층화되어있지 않으면 한 곳에서 모든 처리를 해야하므로 코드가 복잡해지고 중복된 코드가 많아져 유지보수가 어려울 것이다.
각각의 계층은 다른 계층과 상호작용하지만 다른 계층에서 발생하는 로직에는 신경쓰지 않아도 되는 특징을 갖는다.
예를들어, 데이터를 다루는 Persistence Layer는 그 데이터가 보여지는 Presentation Layer를 신경쓰지 않고 오로지 자신의 역할에 집중하면 된다.
✔️ 레이어드 아키텍처의 핵심 요소
계층화 아키텍처의 핵심요소는 단방향 의존성이다. 각각의 레이어는 오직 자기보다 하위에 있는 레이어에만 의존한다. 그러므로 Presentation Layer는 Business Layer에게 의존하고, Business Layer는 Persistence Layer 에게만 의존하게 된다.
또 라느 핵심요소로는 "sepration of concerns"이다. 각 레이어의 역할이 명확하다는 의미이다.
위와 같은 요소들 때문에 레이어드 아키텍처의 구조로 코드를 구현하면 각 레이어가 독립적이고 역할이 분명하므로 코드의 확장성이 높아진다. 코드의 구조를 파악하기 쉬울 뿐만 아니라 재사용성도 높아진다.
또한 역할이 명확하게 나뉘어져 있어 각 레이어를 테스트하는 테스트 코드의 작성이 수월하다는 장점을 가진다.
출처(참고)
https://www.oreilly.com/library/view/software-architecture-patterns/9781491971437/ch01.html
https://kimjingo.tistory.com/159
'IT knowledge > GoF & Architecture' 카테고리의 다른 글
DDD(Domain-Driven Design) 도메인 주도 설계란? (2) | 2023.04.07 |
---|---|
[디자인 패턴] 데코레이터 패턴(Decorator Pattern) 정리 및 예제 - 구조패턴 (0) | 2021.04.15 |
[디자인 패턴] 싱글톤 패턴(Singleton Pattern) 정리 및 예제 - 생성 패턴 (4) | 2021.04.14 |
[디자인 패턴] 디자인 패턴(Design Pattern) 이란? - 개념 및 분류(생성 패턴, 구조 패턴, 행동 패턴) (0) | 2021.04.13 |
[디자인 패턴] 어댑터 패턴(Adapter Pattern) 개념 정리 및 예제 - 구조 패턴 (0) | 2021.04.08 |