728x90
Spring Boot Framework에서의 MVC Pattern은 일반 MVC Pattern과 조금 다르다.
스프링에서는 유저의 요청을 받는 DispathcerServlet이 핵심이며 이것이 Front Controller의 역할을 맡는다.
Reference : https://chanhuiseok.github.io/posts/spring-3/
Front Controller Pattern
Spring framework used Front Controller Pattern
- 요청을 분석하여 세부 컨트롤러들에게 필요한 작업을 분배
- 모든 리소스(Resource) 요청을 처리해주는 하나의 컨트롤러(Controller)를 두는 패턴
- MVC(Model-View-Controller) Pattern과 함께 사용하는 패턴
- 플로우를 추적 할 때에도 용이하다는 장점이 있다.
Spring Framework의 MVC에서 Model은 Service, DAO, DTO, VO로 나눌 수 있다
- Service
- 여러개의 DAO를 묶어 합쳐진 것
- 사용자의 요청을 처리하기 위한 기능을 제공
- 주로 DAO를 통해서 데이터에 접근하고 기능을 수행하는 데 필요한 로직을 구현
- DAO(Data Access Object) 데이터에 접근하는 객체
- 데이터를 조회하거나 조작하는 기능, CRUD 담당
- DB의 data에 access하는 트랜잭션 객체
- Service vs DAO
- DAO는 단일 데이터 접근/갱신만 처리
- Service는 여러 DAO를 호출하여 여러번의 데이터 접근/갱신 → 읽은 데이터에 대한 비즈니스 로직을 수행 → 그것을 하나의(혹은 여러개의) 트랜잭션으로 묶습니다.즉, Service가 트랜잭션 단위입니다.
- DTO(Data Transfer Object) 데이터를 교환(전송)하는 객체
- view-controller-service-dao 계층간 데이터 교환을 위해 사용한 객체 (java beans를 의미)
- 로직을 가지지 않는 데이터 객체, getter/setter메소드만 가진 클래스
- DB의 데이터가 Presentation Logic Tier로 넘어올때는 DTO로 변환되어 오고가는 것
- VO(Value Object) *read only-불변 클래스
- 단순히 값 타입을 표현하기 위해 불변 클래스(Read-only)를 만들어 사용
- VO의 핵심 역할은 eqials()와 hashcode()를 오버라이딩 하는 것
- VO 내부에 선언된 속성(필드)의 모든 값들이 VO객체마다 값이 같아야, 똑같은 객체라고 판별함
- VO는 Getter와 Setter를 가질 수 있으며, VO는 테이블 내에 있는 속성 외에 추가적인 속성을 가질 수 있으며, 여러 테이블(A, B, C)에 대한 공통 속성을 모아서 만든 BaseVO 클래스를 상속받아서 사용할 수 도있다.
- DTO vs VO
- DTO는 가변의 성격을 가진 클래스이며 데이터 전송을 위해 존재한다.(getter/setter)
- VO는 값 그 자체의 의미를 가진 불변 클래스(Read-Only)를 의미한다.(getter만 존재)
- DTO는 인스턴스 개념이라면 VO는 리터럴 개념. 즉, VO는 특정한 비즈니스 값을 담는 객체
Reference
기본 적인 MVC 패턴 - MVC pattern
728x90
'Spring > Spring Boot' 카테고리의 다른 글
JPA & PostgreSQL 연동 (0) | 2021.09.03 |
---|---|
JPA의 Entity (0) | 2021.08.27 |
JPA의 Entity와 DTO를 구분하여 사용해야하는 이유 (0) | 2021.08.20 |
JPA(Java Persistence API)란 (0) | 2021.08.06 |
REST API (0) | 2021.07.23 |
댓글