개발 관련/Server

DTO와 DAO의 개념 및 차이점

magpiebros 2025. 2. 7. 22:53
반응형

JSP에서 DTO와 DAO의 개념 및 차이점

JSP(Java Server Pages)를 이용한 웹 개발에서는 데이터베이스와의 효율적인 상호작용을 위해 DTO(Data Transfer Object)DAO(Data Access Object) 패턴을 많이 사용합니다. 이 두 개념은 서로 밀접하게 관련되어 있으며, 애플리케이션의 구조를 보다 체계적이고 유지보수가 용이하게 만드는 데 중요한 역할을 합니다. 이 글에서는 DTO와 DAO의 정의, 역할, 그리고 차이점을 자세히 설명하겠습니다.

 

1. DTO (Data Transfer Object)란?

DTO는 데이터 전송 객체로, 데이터베이스나 서버 간의 데이터 전달을 위한 단순한 객체입니다. 주로 데이터베이스의 테이블 구조와 유사한 필드를 갖고 있으며, 데이터를 담고 전송하는 데만 집중합니다. 비즈니스 로직은 포함하지 않으며, getter와 setter 메서드로 구성된 클래스입니다.

 

DTO의 주요 기능:

  • 데이터의 캡슐화
  • 계층 간 데이터 전송 (예: Controller ↔ Service ↔ DAO)
  • 데이터베이스의 테이블 구조와 매칭

DTO 예제:

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

    // 생성자
    public UserDTO() {}

    public UserDTO(int id, String username, String email) {
        this.id = id;
        this.username = username;
        this.email = email;
    }

    // getter와 setter
    public int getId() { return id; }
    public void setId(int id) { this.id = id; }

    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; }
}

 

2. DAO (Data Access Object)란?

DAO는 데이터베이스와의 직접적인 상호작용을 담당하는 객체입니다. 데이터베이스 연결, SQL 쿼리 실행, 결과 처리 등의 로직을 캡슐화하여 데이터 접근을 보다 안전하고 효율적으로 관리할 수 있습니다.

DAO의 주요 기능:

  • 데이터베이스 CRUD(Create, Read, Update, Delete) 작업 수행
  • SQL 쿼리 관리
  • 데이터베이스 연결 및 자원 해제

DAO 예제:

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

public class UserDAO {
    private Connection getConnection() throws SQLException {
        String url = "jdbc:mysql://localhost:3306/testdb";
        String user = "root";
        String password = "1234";
        return DriverManager.getConnection(url, user, password);
    }

    public List<UserDTO> getAllUsers() {
        List<UserDTO> userList = new ArrayList<>();
        String sql = "SELECT * FROM user";

        try (Connection conn = getConnection();
             PreparedStatement pstmt = conn.prepareStatement(sql);
             ResultSet rs = pstmt.executeQuery()) {

            while (rs.next()) {
                UserDTO user = new UserDTO();
                user.setId(rs.getInt("id"));
                user.setUsername(rs.getString("username"));
                user.setEmail(rs.getString("email"));
                userList.add(user);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return userList;
    }
}
반응형

 

3. DTO와 DAO의 차이점

구분 DTO (Data Transfer Object) DAO (Data Access Object)

역할 데이터 전송 및 저장 데이터베이스에 데이터 접근 및 처리
기능 데이터 캡슐화, 전송 SQL 쿼리 실행, CRUD 작업 수행
로직 포함 여부 비즈니스 로직 없음 데이터베이스 관련 로직 포함
사용 목적 계층 간 데이터 전달 데이터베이스 작업의 추상화 및 캡슐화
예제 메서드 getId(), setUsername() 등 insertUser(), getAllUsers() 등
독립성 독립적으로 사용 가능 DTO와 함께 사용되는 경우가 많음

 

4. DTO와 DAO의 협업 구조

웹 애플리케이션에서는 DAO와 DTO가 함께 동작하여 데이터 흐름을 관리합니다. 일반적인 데이터 처리 흐름은 다음과 같습니다:

  1. 사용자의 요청이 JSP/Servlet을 통해 전달됨
  2. Controller가 요청을 처리하고 Service 계층으로 전달
  3. Service 계층이 DAO를 호출하여 데이터베이스와 상호작용
  4. DAO는 데이터베이스에서 데이터를 조회하거나 조작한 후 DTO 객체에 담아서 반환
  5. Service 계층이 비즈니스 로직을 처리하고 다시 Controller로 반환
  6. Controller가 최종적으로 JSP에 데이터를 전달하여 화면에 출력

 

5. 결론

DTO는 데이터의 전송과 저장을 간단하고 효율적으로 처리하며, DAO는 데이터베이스와의 상호작용을 관리합니다. 이 두 패턴을 잘 활용하면 코드의 유지보수성이 향상되고, 개발 속도와 품질을 높일 수 있습니다. 특히 복잡한 비즈니스 로직이나 대규모 프로젝트에서는 이러한 구조화된 패턴이 개발의 핵심이 됩니다.

반응형