늦은 프로그래밍 이야기
Layered Architecture (계층형 구조) 본문
Layered Architecture
3계층 구조

Presentation
- 사용자와 상호 작용 처리
- CLI, HTTP 요청, HTTP 처리 등을 담당
- HTTP 요청 처리 및 HTML 렌더링에 대해 알고 있는 웹 계층
- 흔히 말하는 MVC (Model / View / Controller) 도 이 계층에 속한다
- 스프링에서는 @Controller 어노테이션을 사용하여 표현
Domain (Business or Service)
- 서비스 / 시스템의 핵심 로직
- 유효성 검사 및 계산을 포함하는 business 논리 계층
- 애플리케이션이 수행해야 하는 도메인과 관련된 작업들을 담당
- 입력 / 저장된 데이터를 기반으로 계산
- Presentation 계층에서 받은 데이터의 유효성 (Validation) 검사
- 어떤 Data Access를 선택할지 결정
- 스프링에서는 @Service 어노테이션을 사용하여 표현
Data Access (Persistence) 계층
- DAO 계층
- Database / Message Queue / 외부 API와의 통신 등 처리
- 데이터베이스 또는 원격 서비스에서 영구 데이터를 관리하는 방법을 분류하는 데이터 접근 계층
- 스프링에서는 @Repository 어노테이션을 사용하여 표현
3계층 외에도 각 시스템의 상황에 따른 다양한 N계층이 있다.

DTO (Data Transfer Object)
- 기능이 제한된 도메인 객체, 혹은 View 전용 등의 도메인과 무관하게 데이터 전달만을 위한 객체
- 도메인 객체가 도메인 계층을 벗어나지 못하도록 지원
- Presentation 영역에서 필요한 로직과 도메인 로직을 분리할 수 있다.
- 도메인 로직의 오염을 방지
Domain
- Business 로직만 담당하며, 외부의 특정 기술이나 구현 의존성을 최대한 피한다.
Service
- 기반 서비스 계층 혹은 어플리케이션 계층 등으로 불린다.
- 도메인 로직과 함께 사용되는 기반 환경의 로직들을 수행
- Transaction
- 메일 & SMS 발송 등 다른 인프라와의 통신을 담당하는 역할도 한다.
계층화의 원칙
- 각 계층은 응집도가 높으면서, 다른 계층과는 낮은 결합도를 가진다.
- 기본적으로 상위 계층은 하위 계층을 사용할 수 있지만, 하위 계층은 본인의 상위 계층으로 누가 있는지 인식 못하도록 해야한다.
계층화를 해야하는 이유
- 관심범위 축소 (관심사 분리)
- 모듈 교체의 용이성
- 좀 더 용이한 테스트
관심범위 축소 (관심사 분리)
- 격리성 (Closed)
- 계층에서 계층으로 요청이 이동할 때 바로 아래의 계층을 거쳐야 해당 계층 아래의 다음 계층으로 이동할 수 있음을 의미
- 아키텍쳐의 한 계층의 변경이 다른 계층의 구성 요소에 영향을 미치지 않도록 한다.
- 격리성이 없는 계층화는 계층간 결합도가 매우 높은 애플리케이션이 되는 것 (변경하기가 매우 어렵고 수정에 대한 비용이 많이 든다)
- 충분히 격리된 계층화를 사용하게 되면 한번에 한 계층에만 집중할 수 있는 환경을 구축할 수 있다.
출처 : https://jojoldu.tistory.com/603
계층형 아키텍처
학교 다닐때 잠깐 JAVA 관련 수업을 들은적이 있다. 그때 수업 내용은 넷빈즈(Netbeans) IDE를 통해 JAVA로 윈도우 애플리케이션을 만드는 것이였다. 간단한 시간표 관리 프로그램을 만드는 과제는 얼
jojoldu.tistory.com
'내일배움캠프 > Spring' 카테고리의 다른 글
| Annotation (1) | 2022.12.21 |
|---|---|
| UnsatisfiedDependencyException 에러 해결 (0) | 2022.12.16 |
| Spring MVC (0) | 2022.12.07 |
| JPA (0) | 2022.12.06 |
| Database, SQL (0) | 2022.12.06 |