주뇽's 저장소
[Spring] DAO, DTO의 차이 본문
728x90
반응형
DAO(Data Access Object)와 DTO(Data Transfer Object)
DAO(Data Access Object)와 DTO(Data Transfer Object)는 소프트웨어 개발, 특히 데이터베이스와의 상호작용을 다룰 때 자주 사용되는 개념이다. 이 둘은 명확히 다른 역할을 하지만, 때때로 혼동되기도 한다.
DAO (Data Access Object)
- 목적 : DAO는 데이터베이스 접근하는 객체로, 데이터베이스의 CRUD(Create, Read, Update, Delete)작업을 처리
- 특징 :
- DAO는 데이터베이스 쿼리를 실행하고 결과를 반환하는 메서드를 포함한다.
- DAO는 데이터베이스와의 상호작용을 추상화하고, 비즈니스 로직과 데이터베이스 사이의 중간 계층 역할을 한다.
- 예시 : 예를 들어, 'UserDAO'라는 클래스가 있다면, 이 클래스는 사용자 데이터를 데이터베이스에서 생성, 조회, 업데이트, 삭제하는 메서드를 제공한다.
DTO (Data Transfer Object)
- 목적 : DTO는 계층간 데이터 교환을 위한 객체로, 데이터베이스 레코드의 데이터를 담기 위해 사용된다.
- 특징
- DTO는 주로 데이터베이스 테이블의 레코드에 해당하는 데이터 필드를 포함한다.
- DTO는 로직을 포함하지 않고, 순수한 데이터 객체이며, 다른 계층간 데이터 전달에 사용된다.
- 예시 : 'UserDTO'라는 클래스가 있다면, 이 클래스는 사용자의 이름, 이메일, 나이 등 사용자 정보를 필드로 가질 것이다. 이 DTO는 데이터베이스로부터 데이터를 읽어와 사용자에게 보여주거나, 사용자로부터 받은 데이터를 데이터베이스에 저장하는 데 사용한다.
목적 | 데이터베이스 혹은 영속성 계층에 접근하여 데이터를 조회하거나 조작하는 로직을 담당 | 서로 다른 계층 간에 데이터를 전달하는 데 사용되는 객체 |
특징 | - 데이터베이스의 CRUD 작업을 수행 - 데이터베이스와 상호작용하는 메서드를 포함 |
순수한 데이터 객체 비즈니스 로직을 포함하지 않음 |
용도 | 데이터베이스 쿼리 실행, 결과 처리 | 데이터 전송, 뷰 렌더링, API 응답 등 |
예시 | UserDao 클래스는 사용자 정보를 데이터베이스에서 조회하거나 업데이트하는 메서드를 포함 | UserDto 클래스는 사용자 이름, 이메일 등의 정보를 담고 있어 다른 계층으로 데이터 전송에 사용 |
UserDTO 예시(순수한 데이터 객체, 비즈니즈 로직X)
package com.junrestwebservice.restfulsnsproject.user;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.time.LocalDate;
@Getter
@Setter
@ToString
@AllArgsConstructor
public class User {
private Integer Id;
private String name;
private LocalDate birthDate;
}
UserDAO 예시(CRUD 작업과 비즈니스 로직을 수행)
package com.junrestwebservice.restfulsnsproject.user;
import org.springframework.stereotype.Component;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;
@Component
public class UserDaoService {
private static List<User> users = new ArrayList<>();
static {
users.add(new User(1, "Adam", LocalDate.now().minusYears(30)));
users.add(new User(2, "Eve", LocalDate.now().minusYears(25)));
users.add(new User(3, "Jun", LocalDate.now().minusYears(20)));
}
private int userCount = 3;
public List<User> findAll(){
return users;
}
public User findOne(Integer id){
Predicate<? super User> predicate =
user -> user.getId().equals(id);
return users.stream().filter(predicate).findFirst().get();
}
public void save(User user){
user.setId(++userCount);
users.add(user);
}
}
이렇게 보면, DAO와 DTO는 서로 다른 목적과 기능을 가진 객체라는 것을 알 수 있다.
DAO는 데이터베이스 작업을 처리하고, DTO는 이러한 작업을 통해 얻은 데이터를 전달하는 역할을 한다.
'웹개발 > SpringBoot' 카테고리의 다른 글
[Warning] Spring Security csrf 경고 문장 (5) | 2023.12.11 |
---|---|
[Spring JPA] Docker를 이용하여 MySQL 데이터베이스 연결하기 (2) | 2023.12.07 |
[Spring Framework] 로그인과 로그아웃과 같은 인증을 쉽게 구현하게 도와주는 Spring Security (2) | 2023.12.05 |