주니어 기초 코딩공부/Spring 기초

프로젝트 기초 개념_DTO, DAO, VO 넌 누구냐?

jju_developer 2023. 2. 23. 00:50
728x90

안녕하세요 jju_developer입니다.

이번시간에는 프로젝트를 진행하면서 헷갈렸던 기초 개념에 대해 정리를 해보겠습니다.

 

프로젝트를 시작하게 되면 DTO, DAO, VO에 대한 용어에 대하여 많이 접하게 됩니다.

 

DTO, DAO, VO 무엇인가...

DAO

  • DAO(Data Access Object)
    dao는 데이터베이스의 data에 접근하기 위한 객체입니다. 
    DataBase에 접근 하기 위한 로직 & 비지니스 로직을 분리하기 위해 사용합니다.
  • DAO는 DB의 data에 접근하기 위한 객체이기 때문에
    직접 DB에 접근하여 데이터를 삽입, 삭제, 조회 등 조작할 수 있는 기능을 수행합니다.

DTO

  • DTO(Data Transfer Object) 
    dto는 계층 간 데이터 교환을 하기 위해 사용하는 객체로,
    DTO는 로직을 가지지 않는 순수한 데이터 객체(getter & setter 만 가진 클래스)입니다.
  • 유저가 입력한 데이터를 DB에 넣는 과정을 보겠습니다.
    • 유저가 자신의 브라우저에서 데이터를 입력하여 form에 있는 데이터를 DTO에 넣어서 전송합니다.
    • 해당 DTO를 받은 서버가 DAO를 이용하여 데이터베이스로 데이터를 집어넣습니다.

다시말하자면,

dto는 이름 그대로 데이터 전송(이동) 객체라는 의미를 가지고 있습니다.
계층간 데이터 교환을 위한 객체(Java Beans)입니다.
DB의 데이터를 Service나 Controller 등으로 보낼 때 사용하는 객체를 말합니다.
즉, DB의 데이터가 Presentation Logic Tier로 넘어올때는 DTO로 변환되어 오고가는 것입니다.
로직을 갖고 있지 않는 순수한 데이터 객체이며, getter/setter 메서드만을 갖고있으며,
Controller Layer에서 Response DTO 형태로 Client에 전달합니다.

@Getter @Setter
class customerDTO {
  private String id;
  private String pwd;
  private String phoneNumber;
}

 

VO

  • VO(Value Object) 값 object로써 값을 위해 쓰입니다.
    read-Only 특징(사용하는 도중에 변경 불가능하며 오직 읽기만 가능)을 가집니다.
  • DTO와 유사하지만 DTO는 setter를 가지고 있어 값이 변할 수 있습니다.

다시 정리하자면,

VO는 자바에서 단순히 값 타입을 표현하기 위해 불변 클래스(Read-Only)를 만들어 사용합니다.


색으로 예를 들면 분홍은 Color.PINK, 빨강은 Color.RED 이렇게 단순히 값만 표현하기 위해 getter기능만 존재하는 것 입니다.

VO의 핵심 역할은 equals()와 hashcode() 를 오버라이딩 하는 것입니다.
VO 내부에 선언된 속성(필드)의 모든 값들이 VO 객체마다 값이 같아야, 똑같은 객체라고 판별합니다.

VO는 Getter와 Setter를 가질 수 있으며, VO는 테이블 내에 있는 속성 외에 추가적인 속성을 가질 수 있으며, 여러 테이블(A, B, C)에 대한 공통 속성을 모아서 만든 BaseVO 클래스를 상속받아서 사용할 수 도있습니다.

 

[맥쌤 꿀팁] VO(Value Object)와 DTO(Data Transfer Object)
DTO와 VO의 용도는 데이터의 수집과 전달에 사용할 수 있다는 공통점이 있다.
양쪽 모두 파 라미터나 리턴 타입으로 사용하는 것이 가능하다.

다만 VO가 보다 데이터베이스와의 거리가 가깝다.
즉, VO는 테이블의 구조를 이용해서 작성되는 경우가 더 많다.

DTO의 경우는 보다 화면과 가깝다.
화면에서 전달되는 데이터를 수집하는 용도로 사용하는 경우가 많다.  

스프링 MVC를 이용하는 경우 DTO는 검증을 위한 처리가 들어간다.
스프링은 Controller에 전 달되는 데이터에 대해서 검증하는 기능을 추가할 수 있는데,
이러한 상황에서는 별도의 DTO 를 구성해서 사용한다.

 

아직은 정확하게 감은 안오지만 우선,

개념만 정리하고 차차 프로젝트 하면서 감을 잡으며!

예시도 같이 첨부해서 올리도록 하겠습니다.

 

그럼 오늘도 수고하셨습니다

728x90