DAO 와 DTO

신정범·2026년 4월 14일

DTO (Data Transfer Object) - 데이터 전송 객체

DTOData Transfer Object의 약자로, 데이터를 운반하는 역할을 하는 객체입니다. DTO는 주로 여러 계층(예: 데이터베이스, 서비스, 웹 등) 간에 데이터를 전달할 때 사용됩니다.

DTO의 주요 특징

  • 순수한 데이터만 저장: DTO에는 오직 데이터와 그에 해당하는 getter/setter 메서드만 존재합니다.
  • 비즈니스 로직 없음: 계산이나 처리 등의 복잡한 로직은 포함하지 않으며, 단순히 데이터를 담고 전달하는 역할만 합니다.
  • 데이터 구조를 정의: 각 필드는 데이터베이스의 컬럼이나 비즈니스 로직에서 필요로 하는 데이터와 매핑됩니다.

DTO 예시 - UserDTO

예를 들어, User 정보(아이디, 이름, 이메일 등)를 담아 전달하는 UserDTO 클래스는 다음과 같습니다.

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

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

    // getter와 setter
    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}
  • 필드: userId, username, email 필드가 있으며, 이는 데이터베이스나 애플리케이션에서 필요로 하는 사용자 정보를 담습니다.
  • getter/setter: 각 필드에 대한 getter와 setter 메서드를 통해 데이터를 주고받습니다.

이렇게 DTO를 통해 데이터를 주고받으면, 서비스 계층이나 다른 클래스에서 데이터를 쉽게 주고받을 수 있습니다.


2. DAO (Data Access Object) - 데이터 접근 객체

DAOData Access Object의 약자로, 데이터베이스와의 상호작용을 담당하는 객체입니다. 주로 데이터베이스에 접근하여 데이터를 저장하거나 조회, 수정, 삭제하는 역할을 수행합니다.

DAO의 주요 특징

  • 데이터베이스 작업 전담: 데이터베이스와의 연결, SQL 실행 등을 처리합니다.
  • CRUD 작업 담당: Create(생성), Read(조회), Update(수정), Delete(삭제) 작업을 수행하는 메서드를 포함합니다.
  • DTO와 함께 사용: DAO는 주로 DTO와 함께 사용하여, 데이터베이스로부터 조회한 데이터를 DTO에 담아 반환하거나, DTO에 담긴 데이터를 받아 저장합니다.

DAO 예시 - UserDAO

다음은 UserDAO 클래스에서 UserDTO 객체를 활용하여 데이터베이스에서 사용자 정보를 조회, 삽입하는 예시입니다.

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class UserDAO {
    private Connection conn;

    // 데이터베이스 연결 메서드
    private Connection getConnection() throws Exception {
        String url = "jdbc:mariadb://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";
        conn = DriverManager.getConnection(url, username, password);
        return conn;
    }

    // 사용자 추가
    public void addUser(UserDTO user) throws Exception {
        try {
            conn = getConnection();
            String sql = "INSERT INTO users (user_id, username, email) VALUES (?, ?, ?)";
            PreparedStatement pstmt = conn.prepareStatement(sql);
            pstmt.setInt(1, user.getUserId());
            pstmt.setString(2, user.getUsername());
            pstmt.setString(3, user.getEmail());
            pstmt.executeUpdate();
        } finally {
            if (conn != null) conn.close();
        }
    }

    // 모든 사용자 조회
    public List<UserDTO> getAllUsers() throws Exception {
        List<UserDTO> userList = new ArrayList<>();
        try {
            conn = getConnection();
            String sql = "SELECT * FROM users";
            PreparedStatement pstmt = conn.prepareStatement(sql);
            ResultSet rs = pstmt.executeQuery();

            while (rs.next()) {
                UserDTO user = new UserDTO();
                user.setUserId(rs.getInt("user_id"));
                user.setUsername(rs.getString("username"));
                user.setEmail(rs.getString("email"));
                userList.add(user);
            }
        } finally {
            if (conn != null) conn.close();
        }
        return userList;
    }
}
  • getConnection 메서드: 데이터베이스에 연결합니다.
  • addUser 메서드: UserDTO 객체를 인자로 받아 데이터베이스에 사용자 정보를 삽입합니다.
  • getAllUsers 메서드: 데이터베이스에서 모든 사용자 정보를 조회하고, 각 사용자 정보를 UserDTO 객체에 담아 리스트로 반환합니다.

이렇게 DAO는 데이터베이스와의 직접적인 상호작용을 처리하여, 다른 클래스에서 데이터베이스와의 의존성을 줄일 수 있습니다.


DAO와 DTO의 역할 요약

개념역할포함 내용
DTO데이터 전송을 위한 객체순수 데이터, getter/setter, 비즈니스 로직 없음
DAO데이터베이스 접근과 CRUD 작업 담당데이터베이스 연결, SQL 실행, DTO와 함께 사용

예제 흐름

  1. 데이터베이스에 접근할 필요가 있는 서비스나 JSP 페이지에서 UserDAO의 메서드를 호출합니다.
  2. UserDAO는 데이터베이스에 연결하고, 데이터 조회삽입 작업을 수행합니다.
  3. UserDTO 객체를 통해 데이터를 DAO와 서비스, JSP 페이지 간에 주고받습니다.

profile
성장하는 개발자가 되겠습니다

0개의 댓글