DAO, DTO, Entity

Hyun·2024년 1월 20일
0

Spring

목록 보기
29/38

DAO, DTO, Entity 의 차이에 대해 알아보자.

DAO(Data Access Object)

  • 실제로 DB에 접근하여 data 를 삽입, 삭제, 조회, 수정 등 CRUD 기능을 수행하는 객체
  • Service 와 DB를 연결하는 고리 역할을 수행
  • 스프링빈에 등록되는 @Repository 가 DAO 이다

DTO(Data Transfer Object)

  • 계층 간 데이터 교환을 하기 위해 사용하는 객체, DTO 는 로직을 가지지 않는(Getter, Seeter 만 가지는) 순수한 데이터 객체이다
  • DB에서 데이터를 얻어 Service 나 Controller 등으로 보낼 때 사용한다.
    엔티티로 부터 정보를 추출하여 DTO 객체에 담는데, 이러한 이유는 엔티티로부터 필요한 정보만 추출하여 계층 간 효율적으로 데이터를 전달하기 위함이다.

예를 들어 User 엔티티 클래스와 UserDTO 클래스가 있다고 하자. UserService 에서는 User 엔티티 클래스의 정보 중 id 필드값 등등을 제외한 일부 정보만 필요하다고 하자. 이 경우엔 DB에서 받아온 User 인스턴스를 그대로 사용하는 것보단 개발자가 원하는 자료들만을 모아놓은 UserDTO 와 같은 클래스를 사용하는게 효율적이다.

User

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String username;
    private String email;

    // Getter, Setter, 생성자 등...

    // 비즈니스 로직 메서드들...
}

UserDTO

public class UserDTO {
    private String username;
    private String email;

    // Getter, Setter, 생성자 등...

    // 필요한 경우 변환 메서드 등...
}

UserService

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    public UserDTO getUserById(Long userId) {
        User user = userRepository.findById(userId).orElse(null);
        if (user != null) {
            UserDTO userDTO = new UserDTO();
            userDTO.setUsername(user.getUsername());
            userDTO.setEmail(user.getEmail());
            return userDTO;
        }
        return null;
    }

    // 다른 비즈니스 로직 및 데이터 액세스 메서드들...
}

정리

  • DAO(Data Access Object): DB에 접근하여 CRUD 수행하는 객체, @Repository 로 스프링빈에 등록되는 객체가 DAO 이다.
  • DTO(Data Transfer Object): 계층 간 데이터 교환을 위해 사용되는 객체, 엔티티로부터 필요한 정보만을 담아서 전달하는 데 사용된다.
    (Entity 와 DTO 는 다름!)
profile
better than yesterday

0개의 댓글