T_era
Layered Architecture (계층형 아키텍처) 본문
Layered Architecture (계층형 아키텍처)
Layered Architecture는 애플리케이션을 Presentation Layer, Business Layer (Service Layer), Data Access Layer (Repository Layer) 세 가지 주요 계층으로 분리하여 구조화하는 방식이다. 각 계층은 특정 책임을 가지며, 계층 간 명확한 역할 분담을 통해 코드 재사용성, 유지보수성, 확장성을 확보한다.
MVC 패턴의 한계
기존 MVC 패턴에서 Controller는 요청 처리, 예외 처리, View Template 또는 Data 응답, 비즈니스 로직 처리, DB 상호작용 등 다양한 역할을 수행하여 책임이 과중해진다. 이는 유지보수 어려움, 코드 재사용성 저하 등의 문제점을 야기한다.
Layered Architecture 구조
- Presentation Layer (표현 계층)
- 사용자의 요청을 수신하고 응답을 반환하는 역할을 수행한다.
- 화면 응답 또는 API 데이터 응답을 처리한다.
- Spring MVC의 Controller가 해당된다.
- Business Layer (Service Layer, 비즈니스 계층)
- 비즈니스 로직을 수행한다.
- Presentation Layer로부터 요청을 해석하여 Data Access Layer에 데이터 요청을 전달한다.
- 통상적으로 하나의 비즈니스 로직 처리는 하나의 트랜잭션으로 관리된다.
- Spring의 Service 컴포넌트 (@Service 어노테이션 사용)가 해당된다.
- Data Access Layer (Repository Layer, 데이터 접근 계층)
- 데이터베이스와 연동되어 실제 데이터를 관리한다.
- 데이터베이스 연결 관리 및 CRUD 작업을 처리한다.
- Spring Data JPA의 Repository 인터페이스 또는 @Repository 어노테이션 적용 컴포넌트가 해당된다. 과거 DAO (Data Access Object) 용어 사용 이력이 있다.
용어 설명
- DTO (Data Transfer Object): 계층 간 데이터 전달을 위해 사용되는 객체이다. 불변성을 지향하며, 단순 데이터 운반 역할을 수행한다.
- Model:
- Entity: JPA에서 데이터베이스 테이블과 매핑되는 객체로서, 데이터베이스 Row 정보를 담고 영속성을 관리한다. (JPA 관련 학습에서 상세히 다룬다.)
- View 전달 Model: Spring MVC에서 Controller가 View에 데이터 전달 시 사용하는 Map 형태 객체를 의미한다. (DTO, Entity와 구분 필요)
- DAO (Data Access Object): 과거 데이터베이스 접근 로직 담당 객체를 지칭하는 용어이다. 현재 Spring Data JPA Repository 또는 @Repository 적용 구현체가 해당 역할을 수행하는 경우가 많다.
Layered Architecture 적용

- Controller (Presentation Layer)
- 클라이언트 요청 수신 역할을 수행한다.
- 요청 처리를 Service Layer에 전달한다.
- Service Layer 처리 결과를 클라이언트에 응답한다.
- 사용 어노테이션: @Controller, @RestController
- Service (Business Layer)
- 사용자 요청 사항에 대한 핵심 비즈니스 로직을 처리한다.
- DB 상호작용 필요 시 Repository Layer에 데이터 접근을 요청한다.
- 사용 어노테이션: @Service
- Repository (Data Access Layer)
- 실제 데이터베이스와 상호작용하여 데이터를 관리한다.
- 데이터베이스 Connection 연결 및 해제 작업을 처리한다.
- CRUD 작업을 수행한다.
- 사용 어노테이션: @Repository (Spring Data JPA Repository 사용 시 별도 어노테이션 없을 수 있다.)
- DTO (Data Transfer Object)
- 각 계층 간 데이터 전달에 사용된다.
- 요청 데이터 담는 객체는 통상 RequestDto로 명명한다.
- 응답 데이터 담는 객체는 통상 ResponseDto로 명명한다.
Layered Architecture 적용을 통해 각 계층은 자신의 책임에 집중하고, 다른 계층과는 인터페이스를 통해 느슨하게 결합된다. 이는 코드 가독성, 유지보수성, 테스트 용이성을 향상시키고, 변화에 유연하게 대처 가능한 구조를 구축한다.
'Programing > Spring' 카테고리의 다른 글
| @Valid와 BindingResult의 관계 및 처리 방법 (0) | 2025.05.13 |
|---|---|
| Service계층과 Repository계층에서의 로직 작성 (0) | 2025.05.08 |
| Custom Exception 처리 심층 분석 및 구현 (0) | 2025.05.07 |
| Client <=> Server 호출 및 응답 요약 (0) | 2025.05.07 |
| HTTP Message Body 방식 (0) | 2025.05.07 |