[Day 21 | JSP] DTO, DAO

y♡ding·2024년 11월 11일
0

데브코스 TIL

목록 보기
141/163

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

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

DTO의 주요 특징

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

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

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

DAO의 주요 특징

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

DAO와 DTO의 역할 요약

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

예제 흐름

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

0개의 댓글