DAO와 DTO

leedong617·2024년 9월 8일
post-thumbnail

DTO(Data Transfer Object)와 DAO(Data Access Object)는 애플리케이션에서 데이터를 처리하고, 데이터베이스와 상호작용하는 데 중요한 역할을 하는 패턴들임. 이 둘은 데이터의 관리와 전송을 보다 구조적으로 처리하기 위해 사용되며, 서로 다른 역할을 담당함.

DTO (Data Transfer Object)

DTO는 애플리케이션 계층 간에 데이터를 전송할 때 사용하는 순수한 데이터 객체임. DTO는 일반적으로 getter와 setter 메소드만 포함하고, 비즈니스 로직이나 데이터베이스 관련 코드를 포함하지 않음. DTO는 단순히 데이터를 담는 그릇 역할을 하며, 네트워크 통신 또는 다른 계층 간의 데이터 전송을 목적으로 사용됨.

DTO의 특징

필드 변수

  • DTO는 주로 필드 변수로 데이터를 저장하며, 이 필드들은 데이터베이스 테이블의 열과 1:1로 대응하는 경우가 많음.

Getter와 Setter

  • DTO는 데이터에 접근하기 위한 getter와 setter 메소드를 제공함.

로직 없음

  • DTO는 비즈니스 로직을 포함하지 않고, 데이터 전달의 목적으로만 사용됨.

계층 간 데이터 전달

  • 프레젠테이션 계층, 비즈니스 계층, 데이터 계층 간의 데이터 전달을 위해 사용됨.

DTO 사용 예시

사용자 정보를 전달하기 위한 UserDTO 클래스의 예시

public class UserDTO {
    private int id;
    private String name;
    private String email;

    // 기본 생성자
    public UserDTO() {}

    // 생성자
    public UserDTO(int id, String name, String email) {
        this.id = id;
        this.name = name;
        this.email = email;
    }

    // Getter와 Setter
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

DTO의 장점

데이터 캡슐화

  • DTO는 데이터를 캡슐화하여 시스템 내에서 안전하게 전달할 수 있음.

간결성

  • DTO는 비즈니스 로직을 포함하지 않기 때문에, 코드가 단순하고 유지보수하기 쉬움.

전송 효율성

  • 네트워크를 통해 데이터를 전송할 때, 필요한 데이터만을 담아서 전달할 수 있어 성능이 향상됨.

DAO (Data Access Object)

  • DAO는 데이터베이스와의 상호작용을 담당하는 객체로, 데이터의 접근과 조작을 책임짐. DAO는 데이터베이스에 SQL 쿼리를 보내 데이터를 저장, 수정, 삭제, 조회하는 역할을 하며, 데이터베이스와 애플리케이션 사이에서 데이터를 주고받는 역할을 담당함.

DAO의 특징

데이터베이스와의 상호작용

  • DAO는 SQL 쿼리를 실행하여 데이터베이스에서 데이터를 가져오거나 저장하는 작업을 수행함.

비즈니스 로직 분리

  • DAO는 데이터베이스 접근 로직을 전담하며, 비즈니스 로직과는 독립적임. 이를 통해 코드의 분리가 명확해지고 유지보수가 용이해짐.

CRUD 메소드

  • DAO는 주로 CRUD(Create, Read, Update, Delete) 작업을 처리하는 메소드를 가짐.

DAO 사용 예시

  • UserDAO 클래스는 UserDTO 객체와 연동하여 데이터베이스에서 사용자 데이터를 처리함
public class UserDAO {

    private DataSource dataSource; // 데이터베이스 연결을 위한 DataSource

    public UserDAO(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    // 사용자 추가 메소드
    public int insert(UserDTO user) throws SQLException {
        String query = "INSERT INTO users (name, email) VALUES (?, ?)";
        try (Connection con = dataSource.getConnection();
             PreparedStatement pstmt = con.prepareStatement(query)) {
            pstmt.setString(1, user.getName());
            pstmt.setString(2, user.getEmail());
            return pstmt.executeUpdate();
        }
    }

    // 사용자 조회 메소드
    public UserDTO findById(int id) throws SQLException {
        String query = "SELECT * FROM users WHERE id = ?";
        try (Connection con = dataSource.getConnection();
             PreparedStatement pstmt = con.prepareStatement(query)) {
            pstmt.setInt(1, id);
            ResultSet rs = pstmt.executeQuery();
            if (rs.next()) {
                return new UserDTO(rs.getInt("id"), rs.getString("name"), rs.getString("email"));
            }
        }
        return null;
    }
}

DAO의 장점

데이터베이스 로직의 모듈화

  • DAO는 데이터베이스 접근 로직을 별도의 클래스로 분리함으로써, 데이터베이스와의 상호작용을 모듈화함.

유지보수성

  • 데이터베이스 관련 코드가 한 곳에 모여 있어, 유지보수가 용이함.

재사용성

  • DAO 클래스는 애플리케이션 내에서 여러 곳에서 재사용할 수 있음.

DTO와 DAO의 차이점

역할

  • DTO는 계층 간 데이터를 전송하기 위한 객체로, 데이터 자체만을 담고 있음.
  • DAO는 데이터베이스와 상호작용하여 데이터를 CRUD하는 객체로, SQL 쿼리를 사용해 데이터베이스 작업을 수행함.

기능

  • DTO는 단순히 데이터를 담고 전송하는 용도로 사용되며, 아무런 로직도 포함하지 않음.
  • DAO는 데이터베이스 접근 로직을 구현하여 데이터를 삽입, 수정, 삭제, 조회하는 기능을 수행함.

위치

  • DTO는 비즈니스 로직과 데이터베이스를 분리하는 데 사용되며, 보통 프레젠테이션 계층(예: 컨트롤러)과 비즈니스 계층 사이에서 사용됨.
  • DAO는 데이터베이스와 직접 통신하며, 비즈니스 계층에서 데이터베이스와 상호작용할 때 사용됨.

DTO와 DAO의 상호작용

  • DTO와 DAO는 보통 함께 사용됨. 애플리케이션의 비즈니스 계층에서 DAO를 통해 데이터베이스에서 데이터를 가져오거나 저장하고, 이 데이터를 DTO 객체에 담아 다른 계층으로 전달함.

예시

  • 비즈니스 로직 계층에서 DAO를 통해 데이터를 데이터베이스에서 가져옴.
  • 데이터베이스에서 가져온 데이터는 DTO 객체에 담겨서, 컨트롤러나 뷰로 전달됨.
UserDAO userDAO = new UserDAO(dataSource);
UserDTO user = userDAO.findById(1);  // DAO가 데이터를 DB에서 조회하고, DTO로 반환

결론

  • DTO는 데이터를 저장하고 전달하는 객체로, 계층 간 데이터 전송을 담당함.
  • DAO는 데이터베이스와 상호작용하여 데이터를 처리하는 객체로, 데이터베이스 접근 로직을 캡슐화함.
  • 이 두 가지는 서로 다른 역할을 하며, 구조적인 코드 작성과 유지보수를 쉽게 만들어줌.
profile
웹개발자 취업 준비생

0개의 댓글