[Spring] DAO vs DTO vs VO 차이

limlim·2023년 4월 12일
0

Spring

목록 보기
4/8

서론

  • 스프링 공부를 시작하면서 어떤 곳에서는 DAO를 사용하고, 어떤 곳에서는 DTO, VO 등을 사용하는 것을 보고 개념을 명확히 할 필요가 있다고 생각해 아래와 같이 정리하였다.

DAO (Data Access Object)

  • DAO는 실제 DB의 data에 접근하기 위한 객체임
  • service와 DB를 연결하는 역할을 함
  • Repository package가 DAO임
    (즉, DAO와 Repository 같은 거라고 생각하면 됨)
  • Mybatis 사용 시 DB 연결 정보, SQL 쿼리문 등은 따로 정의되어 있고(xml 파일), DAO에서는 어떤 정의되어 있는 SQL을 사용할 건지 파라미터는 무엇인지 정의해주면 끝.
 // Mybatis 예제
 @Repository
 @RequiredArgsConstructor
 public class MemberRepository {
    // SQlSessionTemplate는 mybatis에서 제공하는 클래스
    private final SqlSessionTemplate sql;

    // 회원가입 처리 메서드
    public int save(MemberDTO memberDTO) {
        System.out.println("memberDTO = " + memberDTO);
        // Member.save는 memberMapper.xml에 있는 코드를 호출한다고 생각하면 됨
        return sql.insert("Member.save", memberDTO);
    }
  }

DTO (Data Transfer Object)

  • 계층 간 데이터 교환을 위한 객체임
    (여기서 계층이란 Controller, View, Business, Persistent 레이어 등을 말함)
  • 데이터 교환을 목적으로 갖는 객체이므로 서비스 로직을 갖고 있지 않음
  • @Getter, @Setter로 데이터 조작, 가져오기 가능
  • Lombok 라이브러리를 활용하면 가독성이 훨씬 좋아질 수 있음
// 3개 다 Lombok에 있는 걸로 @Getter 또는 @Setter를 선언해줄 경우, 모든 필드에 접근자와 설정자가 자동으로 생성됨
// @ToString은 객체가 가지고 있는 정보나 값들을 문자열로 만들어줌

@Getter
@Setter
@ToString

// MemberDTO의 역할
// 1. 회원가입을 받아줄 때 중간에 전달하는 역할
// 2. 조회 정보를 화면에다가 보여줄 떄 전달하는 역할
public class MemberDTO {
    private Long id;
    private String memberEmail;
    private String memberPassword;
    private String memberName;
    private int memberAge;
    private String memberMobile;
}

VO (Value Object)

  • DTO와 같이 많이 듣게 되는 개념으로 VO는 DTO와 다르게 setter가 존재하지 않음
  • DTO는 데이터 조작이 가능하지만, VO는 데이터를 담아서 이동만 함. 또한 새로운 값을 사용하기 위해서는 새로이 객체를 생성해야함
  • 즉, VO는 중간에 데이터 조작이 안되며, 읽기만 가능함

추가 개념) Entity

  • DB 테이블과 1:1 매핑되는 객체
  • JPA 사용 시 주로 사용됨
  • DTO와 분리하여 사용하여야 함
profile
不怕慢,只怕站 개발자

0개의 댓글