Spring Boot MVC Pattern(Service, DAO, DTO, VO)
본문 바로가기
Spring/Spring Boot

Spring Boot MVC Pattern(Service, DAO, DTO, VO)

by IYK2h 2021. 7. 9.
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를 통해서 데이터에 접근하고 기능을 수행하는 데 필요한 로직을 구현
    Reference : JSP 2.3 웹 프로그래밍, 최범균
  • 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 

 

MVC pattern

MVC패턴은 디자인 패턴 중 하나이다. 상황에 따라 간편하게 적용해서 쓸 수 있는 것을 정리하며 특정한 "규약"을 통해 쉽게 유지보수하고 또 다른 이들과 공유할 때 쉽게 하기 위함 MVC는 Model, View,

iyk2h.tistory.com

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

댓글