티스토리 뷰

Web

MVC 패턴과 데이터 접근

nooblette 2021. 7. 14. 16:59
반응형

MVC 패턴

이와같은 MVC패턴 구조를 갖도록 개발을 할때,

스프링부트(혹은 스프링)을 이용하면 데이터에 접근하기위해 DAO, DTO, VO, Entity라는 개념을 사용하게 된다.

이에 대해 한번 정리를 해보고자 한다.


 

Domain

소프트웨어로 해결하고자 하는 모든것을 통틀어서 부르는 말.

 

소프트웨어로 개발하려는 혹은 개발한 특정 개념들을 묶은 것이라고 이해하시면 됩니다.
예를들어, 크게는 쇼핑몰 도메인, 작게는 주문 도메인 등에 해당합니다.
출처 : OKKY - DAO, DTO, VO 개념이 정확히 뭔가요?

 

소프트웨어로 하고자하는 모든 것을 일컫는 표현이라고 받아들였다.

 


 

DAO - Data Access Object

실제로 DB에 접근에서 데이터에 대해 CRUD를 수행할 객체이다.

(데이터베이스를 객체로 표현하는 것은 한계가 있기때문에 DB와 완전히 1 대 1 대응되지는 않는다고 한다.)

서비스와 데이터베이스를 연결해주는 역할은 한다.

데이터베이스에 접근을 하는 로직과 비즈니스 로직을 분리하기위해 사용한다.

 


 

DTO - Data Transfer Object

Model, Controller, View, Bussniess Logic, DB, Repository 등 계층간 비동기적 데이터 교환을 위해 사용되는 객체이다.

그러기 위해 모든 객체들 사이에서 사용된다.

 

중요한 것은 DTO는 데이터를 전송하는 책임을 가진 객체로서,
각 계층을 명확히 구분해주는 역할 또한 하는 것입니다.
출처 : OKKY - DAO, DTO, VO 개념이 정확히 뭔가요?

 

데이터베이스에서 필요한 데이터를 얻어 이를 서비스나 컨트롤러로 반환할때 이 DTO 형태로 오고가고,

Controller Layer에서는 Response DTO 형태로 Client에 전달한다.

 

로직을 갖고 있지 않는 순수한 데이터 객체이며, getter/setter 메서드만을 갖는다.

DAO와 DTO와 함께 표현한 MVC 패턴

 

 


 

VO - Value Object

DTO와 비슷한(거의 동일한) 객체이지만 VO만의 특징은 Read-Only, 즉 getter 메소드만 갖는다는 것이다.

Entity의 특정개념(가령, 데이터 모델에서의 특정 값)을 나타내기 위해 사용된다.

 

예를들자면 상품 Entity 안에 할인률, 판매가, 할인가격 등 Price에 대한 필드들이 있고,
그 안에 고유한 개념이 담겨져 있다면 그것을 Price VO로 분리함으로써
좀 더 명확하게 도메인에 대한 개념을 표현하고,
다른 코드에서도 Price라는 개념을 통해 객체를 캡슐화하여 사용할 수 있습니다.
출처 : OKKY - DAO, DTO, VO 개념이 정확히 뭔가요?

 


 

Entity Class

Entity 클래스 또는 가장 Core한 클래스라고 부른다.

실제 DB의 테이블과 매칭될 클래스 즉, 테이블과 링크될 클래스임을 나타낸다.
최대한 외부에서 Entity 클래스의 getter method를 사용하지 않도록 해당 클래스 안에서 필요한 로직 method을 구현한다.

 


 

+ 참고 ) Entity 클래스와 DTO 클래스를 분리하는 이유



테이블과 매핑되는 Entity 클래스가 변경되면 여러 클래스에 영향을 끼치게 되는 반면,

View와 통신하는 DTO 클래스(Request / Response 클래스)는 자주 변경되므로 View Layer와 DB Layer의 역할을 철저하게 분리하기 위해서 분리해야 한다.

Domain Model을 아무리 잘 설계했다고 해도 각 View 내에서 Domain Model의 getter만을 이용해서 원하는 정보를 표시하기가 어려운 경우가 종종 있다. 이런 경우 Domain Model 내에 Presentation을 위한 필드나 로직을 추가하게 되는데, 이러한 방식이 모델링의 순수성을 깨고 Domain Model 객체를 망가뜨리게 된다.
또한, Domain Model을 복잡하게 조합한 형태의 Presentation 요구사항들이 있기 때문에 Domain Model을 직접 사용하는 것은 어렵다.
즉, DTO는 Domain Model을 복사한 형태에서 다양한 Presentation Logic을 추가한 정도로 사용하며
Domain Model 객체는 Persistenteny를 위해서 사용한다.
출처 :  https://gmlwjd9405.github.io/2018/12/25/difference-dao-dto-entity.html

 

 

위 개념을 사용하여 프로젝트의 전체 구조를 나타내면 아래와 같다.

https://gmlwjd9405.github.io/2018/12/25/difference-dao-dto-entity.html

 


 

출처 : OKKY - DAO, DTO, VO 개념이 정확히 뭔가요?

출처 : [DAO] DAO, DTO, Entity Class의 차이 - Heee's Development Blog (gmlwjd9405.github.io)

출처 : DAO, DTO, VO,Entity 차이 (velog.io)

반응형

'Web' 카테고리의 다른 글

URL과 URI의 차이  (0) 2021.07.26
HTTP 프로토콜  (0) 2021.07.21
[Django] MVC 패턴과 MTV 패턴  (0) 2021.07.14
Web Service - MVC 패턴  (0) 2021.07.14
Restful API 서버 구현과 JSON  (0) 2021.04.15
Comments