DTO랑 DAO의 차이

이규훈·2023년 7월 6일
0

스프링 정리

목록 보기
29/30

DAO

Data Access Object의 약자로 데이터 접근 객체를 의미한다. 소프트 웨어 개발에서 데이터베이스나 다른 데이터 저장소에 접근하여 데이터를 조작하고 관리하는 데 사용되는 객체이다.

DAO는 비즈니스 계층과 데이터 저장 계층사이의 인터페이스 역활을 한다. 비즈니스 로직은 DAO를 통해서 데이터 저장소에 접근하고 필요한 데이터를 가져오거나 업데이트 할 수 있다. 이를 통해 데이터 저장소에 대한 추상화를 제공하고, 비즈니스 로직과 데이터베이스 간의 결합도를 낮출 수 있다.

DAO는 주로 CRUD작업을 수행하는 메서드를 포함하고있다.

DTO

DTO는 Data Trnasfer Object의 약자로 데이터 전송 객체를 의미한다. DTO는 비즈니스 계층과 데이터 접근 계층 사이에서 데이터를 전송하는데 사용된다.

둘의 차이

  1. 역할
  • DAO: 데이터베이스나 다른 데이터 저장소에 접근하여 데이터를 조작하고 관리하는 역할을 수행한다. 주로 데이터 엑세스 로직을 포함하며, 데이터베이스와의 상호 작용을 추상화하고 모듈화한다.
  • DTO: 데이터를 전송하기 위해 사용되는 객체로 비즈니스 계층과 데이터 접근 계층 사이에서 데이터 전달에 사용된다.
  1. 데이터 처리:
  • DAO: 데이터베이스나 다른 데이터 저장소에 접근하여 데이터를 조작하고 관리하는 객체이다. 주로 데이터 엑세스 로직을 포함하며, 데이터 베이스 작업을 추상화하여 비즈니스 로직과 분리한다.
  • DTO: 데이터 전송을 위한 객체로, 데이터의 캡슐화와 필요한 정보의 전송에 중점을 둔다.
  1. 구조:
  • DTO: 주로 데이터의 전송을 위해 사용되는 객체로, 필요한 데이터만을 포함합니다. 일반적으로 데이터베이스의 엔티티와 1:1로 매핑되지는 않습니다.
  • DAO: 데이터베이스와의 상호 작용을 담당하고, 주로 데이터베이스의 엔티티와 1:1로 매핑됩니다. 데이터베이스에서 데이터를 읽거나 쓰는 데 사용되는 메서드를 포함합니다.
  1. 사용 목적:
  • DTO: 데이터의 전송 효율성과 보안을 향상시키기 위해 사용됩니다. 비즈니스 계층과 데이터 접근 계층 사이에서 데이터 전달에 사용됩니다.
  • DAO: 데이터베이스나 다른 데이터 저장소에 접근하여 데이터를 조작하고 관리하기 위해 사용됩니다. 비즈니스 로직과 데이터베이스 간의 결합도를 낮추고, 데이터 액세스 로직을 분리하여 유지 보수성을 개선합니다.

정리
DTO -> 데이터 전달하기 위한 클래스, 객체
DAO -> 데이터에 대한 CRUD 메서드들을 가지고 있음


DAO 예시

@Repository
public class UserRepository {
    private final EntityManager entityManager;

    public UserRepository(EntityManager entityManager) {
        this.entityManager = entityManager;
    }

    public <T> T save(T entity) {
        return entityManager.merge(entity);
    }

    public <T> T findById(Class<T> entityClass, Long id) {
        return entityManager.find(entityClass, id);
    }

    public <T> List<T> findAll(Class<T> entityClass) {
        CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
        CriteriaQuery<T> query = criteriaBuilder.createQuery(entityClass);
        Root<T> root = query.from(entityClass);
        query.select(root);
        return entityManager.createQuery(query).getResultList();
    }

    public <T> void deleteById(Class<T> entityClass, Long id) {
        T entity = entityManager.find(entityClass, id);
        if (entity != null) {
            entityManager.remove(entity);
        }
    }
}

DTO 예시

// DTO 예시
public class UserDTO {
    private Long id;
    private String username;
    private String email;

    // Getter와 Setter 메서드 생략

    // 생성자 등 추가적인 메서드 생략
}
profile
개발취준생

0개의 댓글

관련 채용 정보