반응형
Layered Architecture
효율적인 개발과 유지보수를 위해 어플리케이션을 계층화하여 개발하는 것을 말한다. 대체적으로 중/대규모 어플리케이션에서 사용하고 있다.
Pressentation Layer
- 사용자와 가장 가까운 계층을 말하며, 사용자와 상호작용을 한다.
- Spring MVC 객체를 말하며, 프론트 컨트롤러(DispatcherServlet), 컨트롤러, 뷰, 모델이 포함된다.
Business Layer (Service Layer)
- 실제 비지니스 로직을 수행하는 컴포넌트로 트랜잭션 및 기능을 수행한다.
- 컨트롤러(presentation layer)에서 요청을 보내면 DAO(data access layer)를 이용해 실제로 비지니스 로직을 수행한다.
- 보통 하나의 비지니스 로직은 하나의 트랜잭션으로 동작(ACID 특징 가짐)한다.
Data Access Layer (Repository Layer)
- 데이터베이스에 연동되어 데이터의 저장과 조회를 담당한다.
- DB에 값을 저장하거나 가져오기 위해 JDBC, Mybatis, JPA 등을 사용해 구현한 DAO이다.
Layered Architecture 동작 과정
① Client 에서 요청이 들어오면 먼저 Presentation Layer 에서 DispatcherServlet 이 HandelerMapping 을 통해
Controller 에게 Client 요청이 무엇인지 알리고,Controller 는 Client 요청을 처리를 Business Layer 에게 요구한다.
이 때, Business Layer 에 넘겨줄 데이터(Client 가 요청한 데이터)가 있으면 Domain Object 에 담는다.
② Business Layer 는 Presentation Layer 와 Interface 를 통해서 통신하며, Client 요청을 적절히 처리한 후 데이터베이스에 데이터를 저장하거나 데이터를 꺼내기 위해 Data Access Layer 에 요청한다.
이 때, 비지니스 로직을 수행하기 위해 데이터가 필요하면 Domain Object 에서 가져오고, Data Access Layer 넘겨줄 데이터가 있으면 Domain Object 에 담는다.
이 때, 비지니스 로직을 수행하기 위해 데이터가 필요하면 Domain Object 에서 가져오고, Data Access Layer 넘겨줄 데이터가 있으면 Domain Object 에 담는다.
③ Data Access Layer 역시 Business Layer 와 Interface 를 통해서 통신하며, Business Layer 의 요청을 처리한다.
이 때, 데이터베이스에 저장하기 위해 필요한 데이터를 Domain Object 에서 가져오고, 데이터베이스에서 데이터를 가져와 반환할 데이터가 있다면 Domain Object 에 저장한다.
이 때, 데이터베이스에 저장하기 위해 필요한 데이터를 Domain Object 에서 가져오고, 데이터베이스에서 데이터를 가져와 반환할 데이터가 있다면 Domain Object 에 저장한다.
④ 모든 처리가 끝나면 Controller 는 Client 요청이 처리된 데이터와 사용할 View 정보를 Domain Object 에서 가져와서 ModelAndView에 담는다. 그리고 ModelAndView 객체를 DispatcherServlet 에 넘긴다.
⑤ ModelAndView 객체가 DispatcherServlet 에 전달되면, DispatcherServlet 은 ViewResolver 를 통해서 View 를 선택하고 Client 에게 요청이 처리된 데이터를 화면에 출력한다.
반응형
'Back-End > Spring' 카테고리의 다른 글
[Spring] Spring boot, MyBatis 환경 log4jdbc 설정 (0) | 2022.12.30 |
---|---|
[Spring] cannot deserialize from Object value (no delegate- or property-based Creator) 에러 (0) | 2022.06.13 |
[Spring] Spring Boot 로 Hello world 실행하기 (0) | 2022.06.12 |
[Spring] Template Engines (0) | 2022.02.25 |
[Spring] 스프링 부트 (Spring Boot)란? (0) | 2022.02.25 |
최근댓글