티스토리 뷰

Web

[아키텍쳐] Layered pattern

HAN_PY 2022. 3. 10. 19:59
반응형

Layered Pattern

 계층화 패턴(Layered pattern)에 대해 알아보자. 기본적으로 계층을 분리하는 이유는 한 곳에서 작업이 모두 이루어진다면, 코드의 복잡성 증가, 유지보수의 어려움, 중복 코드 증가, 확장성 감소와 같은 문제가 발생한다. 즉, 계층화 패턴은 이러한 문제를 해결하기 위해, 계층을 나눈 패턴이다. 각 계층은 다음 상위 계층에 서비스를 제공하고. 각 하위 모듈들은 특정한 수준의 추상화를 제공한다. 계층에 정답은 없다. 구현하는 도메인에 따라 최정화된 계층은 다르기 때문이다. 일반적으로 공통적으로 볼 수 있는 계층은 아래와 같다. 

 

3계층으로 나눌 시 아래와 같다.

Presentation layer (표현계층)
Business logic layer (서비스계층)
Persistence layer (영속성 계층)

 

4계층으로 나눌 시 아래와 같다.

Presentation layer = UI layer
Application layer = Service layer
Business logic layer = Domain layer
Data access layer = Persistence layer

 

DDD(도메인 기반 설계 = domain driven design)에 따른 계층은 아래와 같다. 위의 4 계층과 비슷하지만, 가장 아래 Infra layer가 존재함을 알 수 있다.

 

Presentation layer 
Application layer 
Domain layer
Infra layer

 

Latered pattern의 개념과 주요 layer들을 우선적으로 알아보고, 추가적인 다른 layer들에 대해서도 알아보자.

 

 

기본 개념

layered pattern의 기본적인 구조는 이름과 같이 계층으로 되어 있다. 그리고 각 계층들끼리 의존성을 가진다.

layer 1 (최상위 레이어)
 
layer 2
 
layer 3
...
layer n (최하위 레이어)
  • layer 1은 하위 layer 2에 의존한다
  • layer 2는 하위 layer 3에 의존한다.
  • layer 2와 연관있는 layer는 자기 자신 layer2와 layer3이고, 상위 layer나 다른 layer는 관련이 없다.

 

 

Layerd Pattern 특징

가장 쉽기도 하고 많이 사용되서, 필요 이상으로 남용되기도 한다. 반드시 비즈니스 로직에 따른 아키택처를 만들어야 한다. 독립적인 layer로 구분되는 특징 때문에 때문에 개발자끼리 코드를 공유하기 좋다. 또한, 구분되는 layer 때문에 layer 간의 결합도를 낮추고 응집도를 높여주기 때문에, 특정 모듈 업데이트 시 다른 모듈이 받는 영향은 최소화된다.

 

Layerd Pattern 주의사항

상위 layer는 하위 레이어만 이용하도록 한 방향으로 흘러야 한다. 따라서, 각 레이어는 해당 레이어가 의존하는 직접적인 하위 레이어만 알면 되기 때문에 추상화 작업이 필요하다. 하위 레이어가 제공하는 기능을 상위 레이어가 이용하기 때문에 레이어의 구조가 단순하다. 그러나 처음 아키텍처 구성 시 layer가 너무 많으면 구현이 어렵다.

 

 

Layer 종류

Presentation layer 

사용자 인터페이스 부분이라 할 수 있다. 사용자의 요청에 대해 해석하고 응답하는 일을 한다. 일반적인 예시로 API 호출에 대한 응답을 한다. 

 

Application layer

응용 계층으로 비즈니스 로직을 정의하고 정상적으로 수행될 수 있도록 도메인 계층infra 계층(or DB)을 연결해 준다. 여기서의 핵심은 많은 정보를 가지고 있지 않게 해야 한다. 따라서 transaction 관리, DTO 변관, 그리고 모듈 간의 연계 등을 진행한다. 실 데이터의 상태 변화는 domain layer로 위임하여야 한다. 비즈니스 또는 도메인 관련 논리를 포함하지 않는다. 비즈니스 use case를 반영하진 않고, 세용자의 세션 상태나 작업 상태는 관리 가능하다.

 

Domain layer

소프트웨어의 핵심이다. 비즈니스 규칙, 정보에 대한 실질적인 도메인 정보를 포함하고 있으며 이를 책임지는 계층이다. 따라서 특정 상황에 따라서는 가장 중요한 layer라고 할 수 있다.

Presentation layer = UI layer
Application layer = Service layer
Business logic layer = Domain layer
Data access layer = Persistence layer

 

 

Infra layer

가장 아래 계층으로 상위 계층을 지원하는 일반화된 기술을 제공하는 계층으로 얻어온 정보를 application layer나 domain layer로 전달하는 것을 주역할로 한다. 보통은 외부 시스템을 호출하는 역할을 담당한다.

 

 

 

 

Layered pattern 활용

웹 애플리케이션과 같이 다양한 기술을 조합해 만드는 복잡한 시스템에서는 MVC 모델과 함께 레이서 패턴을 함께 이용한다. 최근 spring, django 같은 프레임워크가 기본적으로 model view controller 모델로 사용되어진다. 여기에 위의 Layer Pattern을 적용해보면서 어떤 로직으로 데이터를 흐르게 할지를 한 번쯤 고민해 보면서 코드를 짜길 추천한다. 나 자신도 조금 더 좋은 코드를 작성하기 위해 오늘도 고민 중이다.

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함