계층화 아키텍쳐(Layered Architecture)

503·2022년 10월 3일
1

발표스터디

목록 보기
2/4

안녕하세요, 503입니다.
이전 포스팅에서 DTO, VO, Entity가 무엇인지에 대해 정리해보았습니다.
그러면서 아래와 같이 3-tier 아키텍쳐를 그려보면서 설명을 했었는데요.

그래서 이번엔 이 계층화 아키텍처란 무엇인가에 대해 정리해보려고 합니다.


계층화 아키텍쳐란?

계층화 아키텍쳐(Layered Architecture)는 소프트웨어 개발에서 가장 일반적으로 널리 사용되는 아키텍쳐입니다. 구성되는 계층의 숫자에 따라 N계층 아키텍쳐(N-tier Architecture)라고도 합니다. 각 레이어는 코드나 컴포넌트의 논리적인 분리입니다. 유사한 컴포넌트를 한 계층에 배치시킵니다.

주요 특징은 계층이 바로 아래에 있는 계층과만 연결된다는 것입니다. 또한 어떤 계층이 수정되어도 다른 계층에 영향을 주지 않습니다.

클라이언트와 가까운 계층부터 차례로 설명해보겠습니다.

- Presentation layer : View + Controller

Presentation Layer(화면 계층)은 화면에 보여주는 기술을 사용하는 영역입니다. 소프트웨어 시스템과의 사용자 상호 작용을 담당합니다. view와 controller를 모두 포함하고 있지만, 컨트롤러를 빼서 Controler Layer로 떼내기도 합니다.

view에 해당하는 layer은 말 그대로 사용자 인터페이스에 불과합니다. 표현과 이벤트 처리, 데이터 포맷을 책임집니다.

controller에 해당하는 layer은 구성 요소 간 처리 흐름을 제어하고 데이터 조작 의뢰, 데이터 변환 및 연산, Exception과 Error 처리를 합니다.

- Application/Business layer : Service

비즈니스 계층은 기능의 요구사항 충족과 관련된 일을 처리 도메인 계층입니다.
즉, 고객이 원하는 요구 사항을 반영하는 계층으로 고객의 요구사항과 정확히 일치하도록 설계해야하며
메서드 이름은 고객들이 사용하는 용어를 그대로 사용하는 것이 좋습니다.

Control layer와 Persistence layer를 연결하는 역할입니다.

+ Domain layer

그렇다면 도메인 계층은 무엇인가? 비즈니스 로직이 담기는 곳으로 어플리케이션 가치를 결정하는 중요한 계층입니다. 순수한 비즈니스 로직만 담아야하며 알고리즘 및 프로그래밍 구성 요소를 담당합니다.

- Persistence layer : DAO(Repository)

영속 계층, 데이터 계층이라고 불립니다. 어떤 방식으로 데이터를 보관 혹은 사용하는가에 대한 설계가 들어가는 계층입니다.

영구 데이터를 빼내어 객체화 시키며, 영구 저장소에 데이터를 저장, 수정, 삭제하는 계층입니다. 데이터베이스나 파일에 접근하여 데이터를 CRUD하는 계층이며, 이처럼 일반적으로 데이터베이스를 많이 이용하지만 경우에 따라 네트워크 호출이나 원격 호출 등의 기술이 접목될 수 있습니다.

Repository DAO는 거의 같다고 봐도 무방하고 깊게 보자면 Repository는 엔티티 객체를 보관하는 저장소, DAO는 데이터에 접근하도록 DB 접근 관련 로직을 모아둔 객체입니다. 하지만 개념 차이일 뿐이고 실무에서는 비슷하게 사용된다고 합니다.

- Database Layer : VO

관계형 데이터베이스의 엔티티와 비슷한 개념을 가지는 것으로 데이터 객체를 말한다.


정리

위처럼 Presentation, Busniess, Presentation layer와 같이 3-tier로 구성하는게 가장 일반적입니다. service 계층을 application layer과 domain layer와 같이 2개로 나누는 4-tier도 있습니다.

이러한 layer 간의 데이터 교환, 매핑을 위해 사용하는 객체들이 DTO와 Entity인 것입니다!



🔗 참고

profile
얼레벌레 개발자로 살아가기. 개발하면서 만났던 이슈를 기록합니다.

1개의 댓글

comment-user-thumbnail
2024년 1월 2일

Presentation, Busniess, Presentation layer
혹시 하나는 Persistence 아닌가용

답글 달기