티스토리 뷰

728x90
반응형

계층형 아키텍쳐

Software Architecture 정의

모든 소프트웨어 시스템의 기본 구조를 의미하며, 시스템 기능을 정상적으로 동작시키는 것을 의미한다.

소프트웨어 시스템에서는 컴포넌트의 설계, 컴포넌트간의 관계, 사용자간의 상호작용, 시스템에서의 사용자의 요구등을 포함한다.

  • 예: Micro Kernel, Micro Services, Client Servers 가 해당한다.

 

Layerd Architecture 정의

N-계층 아키텍쳐. 소프트웨어 개발에서 가장 보편적이고 널리 사용되는 아키텍쳐 프레임워크를 의미한다.

단일 소프트웨어 단위들로 구성되어있는 수평계층 아키텍쳐 패턴이다.

컴포넌트와 코드들을 논리적으로 구분하여 층을 나눈다.

 

 

위의 그림처럼, 레이어1은 레이어2와 연결되어있고, 레이어2는 레이어3과 연결되어있는 것처럼

레이어1에서 레이어3으로 이동하려면 레이어2를 거쳐야한다.

레이어마다 독립적이므로, 특정 레이어가 변경한다해서 변경된 레이어에서만 적용될뿐

연결된 다음레이어나 다른 레이어에는 영향을 미치지 않는다.

계층형 아키텍쳐의 계층수는 일반적으로 소프트웨어 설계자와 개발자에따라 달라진다.

 

보통은 '사용자 상호작용계층(UI Laeyr, User Interactions Layer)', '데이터 처리계층(Data Processing Layer)' 이 있다.

 

 

1. Presentation Layer

  • UI 레이어인 클라이언트와 밀접한 레이어이다.
  • 사용자의 요청에 대해 해석하고 응답하는 일을 책임지는 계층.
  • Client로부터 Request를 받고, Response를 응답하는 API 를 정의한다.

 

2. Application/Business Layer

  • 기능적인 요구사항을 수행하는 레이어이다.
  • 비즈니스 로직을 정의하고 정상적으로 수행될 수 있도록 도메인 계층과 인프라 계층을 연결해주는 역할을 하는 계층이다.
  • 실질적인 데이터의 상태변화 등의 처리는 도메인 계층에서 진행할 수 있도록 위임하는 것이 중요하다.
  • 트랜잭션의 단위, DTO의 변환, 엔티티 조회 및 저장

 

3. Domain Layer

  • 알고리즘, 프로그래밍 컴포넌트를 담당하는 레이어이다.
  • 비즈니스 규칙, 정보에 대한 실질적인 도메인에 대한 정보를 가지고 있으며 이 모든 것을 책임지는 계층이다.
  • 도메인 로직을 실행하는데 엔티티를 활용하고 상태를 제어하는 역할에 집중하는 계층이다.

 

Domain

사전적인 의미로는 '영역', '집합' 이다.
실세계에서 사건이 발생하는 집합.
비즈니스 도메인. 업무의 집합.

 

Domain 과 Object 의 차이점

객체는 추상화 또는 구체화할 수 있는 특정요소를 표현할 수 있다.
도메인은 사용자가 사용하는 모든 것을 설명할 수 있다.

 

 

4. Infra Structure / Persistence / Database Layer

  • 데이터와 데이터베이스를 다루는 레이어이다.
  • 외부와의 통신(데이터베이스, 메시징 시스템 등)을 담당하는 계층이다.
  • 해당 계층에서 얻어온 정보를 응용계층, 도메인 계층에 전달하는 것이 주역할이다.

 

 

각각의 도메인들을 위와 같은 레이어로 분리하여 만드는 것이 DDD(Domain Driven Design)의 핵심설계방식이다.

 

 

Layerd Architecture 를 사용하는 경우

  • 단순하고 작은 애플리케이션
  • 단순한 프레임워크
  • 아키텍쳐 지식이 부족해도 쉽게 짤 수 있다.

 

Layerd Architecture 장점과 단점

장점

  • 단순한 프레임워크이고, 학습이나 구현이 용이하다.
  • 분리된 계층으로 의존성이 감소된다.
  • 컴포넌트가 분리되어있기 때문에 각 컴포넌트를 개별적으로 테스트할 수 있다.
  • cost 오버헤드가 낮다.

 

단점

  • 프레임워크의 확장성이 어렵다.
  • 확장성이 어렵다.
  • 유지보수가 어렵다. 단일 레이어의 변경은 단일 유닛으로 동작하기 때문에 전체 시스템에 영향을 줄 수 있다.
  • 위의 레이어가 존재한다면, 위의 레이어에 의존하기 때문에 상호의존성이 있어서 병렬처리가 불가능하다.

 

 

마치며

아래 참고글을 번역해서 이해를 했지만, 내게는 '계층별 아키텍쳐' 라는 용어가 어색했고 더많은 자료조사와 이해가 필요하다는 것을 깨달았다.

이 글을 보고 떠오른 생각을 나만의 언어로 표현하자면, 클라이언트부터 서버 사이드까지의 요청에서 응답까지의 과정을 층으로 분리시켜서 나타낸게 아닌가 싶다.

참고자료 : baeldung - Layered Architecture
참고자료: coco3o Tistory - DDD계층구조 알아보기

728x90
반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함