Spring

DAO의 개인적인 오해

curiousKidd 2024. 12. 17. 17:02
반응형

DAO의 대해서 개인적인 오해를 하고 있었다

이전 회사에서 진행한 프로젝트는 DAO를 마치 DTO처럼 사용하고 있었다.

public class UserDao {
    private long    userId;
    private String  userName;
    private String  email;
    private String  password;
}

DB > DAO > DTO 순으로 데이터를 옮겨가며 사용하였고, 때문에 DAO는 그저 model이지만 db와 직접적으로 접근하는 객체로만 생각하고 있었다.

하지만 토비의 스프링 책에서는 DAO를 model이 아닌 class로 정의하는 것을 보게되었다.

public class UserDao {
     public long createUser(PostUserReq  postUserReq){
        String      createUserQuery = "INSERT INTO Users(email, profilePicUrl, name, password)\n" +
                "VALUES\n" +
                "    (?, ?, ?, ?);";

        Object[]    createUserQueryParams = new Object[]{postUserReq.getEmail(), postUserReq.getProfilePicUrl(),
        postUserReq.getName(), postUserReq.getPassword()};

        // 데이터 삽입 쿼리
        this.jdbcTemplate.update(createUserQuery, createUserQueryParams);

        String      getNewUserIdQuery = "SELECT LAST_INSERT_ID();";
        return  this.jdbcTemplate.queryForObject(getNewUserIdQuery, long.class);
    }
}

DAO는 db 데이터를 담을 Model을 참고하여 get OR set 작업을 진행하는 메서드의 집합인것이다.
당연히 db의 직접 연결하는 모든 과정이 DAO에서부터 시작되며, 이에 따라서 Data Access Object(DAO)라는 명칭이 붙게 된것이다.

이런 측면에서 보면 DAO는 model이 아닌 하나의 레이어, 하나의 메서드로 봐야한다고 생각을 하였다.

항상 고민하고 있던 주제와, 구글 서칭을 해도 섣불리 받아들이지 못했던 지식이었지만... 책에서 보니까 한순간에 받아들이며 이해하게 되었다...
이래서 책을 봐야하는군 하며, 다시 한번 다짐하게 되었다.

반응형