Layered Architecture
애플리케이션을 세 가지 주요 계층으로 나누어 구조화하는 방법으로 각 계층은 특정한 책임을 갖고 있으며, 계층 간에는 명확한 역할 분담이 이루어져 코드의 재사용성, 유지보수성, 확장성을 높이는 데 도움을 준다.
- MVC패턴

- 기존의 MVC 패턴에서 Controller는 역할이 무수히 많다.
- 요청에 대한 처리
- 예외처리
- View Template 응답 or Data 응답
- 비지니스 로직 처리
- DB 상호작용
- 문제점
- Controller에서 요청에 대한 모든 처리를 수행한다. 즉, 책임이 너무 많다.
- 기능 추가, 수정, 삭제 등의 유지보수가 힘들어진다.
- 코드의 재사용성이 떨어진다. 메서드로 분리하여도 메서드를 호출하는 중복 코드가 발생한다.
- Layered Architecture 구조

-
Presentation Layer
- 사용자의 요청을 받고 응답하는 역할을 수행한다.
- 화면을 응답하거나 데이터를 응답하는 API를 정의한다.
-
Business Layer(Service Layer)
- 비지니스 로직을 수행한다.
- 요청을 해석하여 Repository Layer에 전달한다.
- 일반적으로 하나의 비지니스 로직은 하나의 트랜잭션으로 동작한다.
-
Data Access Layer(Repository Layer)
- 데이터베이스와 연동되어 실제 데이터를 관리한다.
-
용어 설명
- DTO(Data Transfer Object)
- 계층간 데이터 전달을 위해 사용되는 객체이다.
- Model
- Entity
- JPA에서는 Entity라는 형태로 데이터를 반환한다.
- DAO(Data Access Object)
Layered Architecture 적용

1.Controller

- 클라이언트의 요청을 받는 역할을 수행한다.
- 요청에 대한 처리를 Service Layer에 전달한다.
- Service에서 처리 완료된 결과를 클라이언트에 응답한다.
- 사용하는 Annotation :
@Controller, @RestController
2. Service

- 사용자의 요청 사항을 처리한다.
- DB와 상호작용이 필요한 경우, Repository Layer에게 요청한다.
- 사용하는 Annotation:
@Service
3. Repository

- DB와 상호작용을 수행한다.
- Connection 연결, 해제
- CRUD 작업 처리
- 사용하는 Annotation:
@Repository
4. DTO(Data Transfer Object)

- 계층간 데이터 전달을 위해 사용된다.
- 요청 데이터를 처리하는 객체는 일반적으로
RequestDto로 명명한다.
- 응답 데이터를 처리하는 객체는 일반적으로
ResponseDto로 명명한다.