[STUDY12] DAO에 관하여
1월 12일 수업을하다가
* 순수db와 소통하는 클래스구조 - Data Access Object(DAO)
*
* 권장사항 :
* table당 dao클래스는 1:1권장
* join작업이 빈번한 구조의 경우 추가 dao개발도 있음
*
에대해 배웠습니다.
DAO에대해 더 알고싶어서 글을 적어봅니다.
melog하면서 dto에대해 빠삭하게는아니더라두 조금알았어요!!!
이거랑 비슷한게 아닐까싶어서? 더 깊게 파고드려구요
우선 저번에 melog할땐 dto 했었어요.
Client > Server, Server > Client 혹은 Controller >Service같은 Layer에서 사용합니다.
순수 데이터 객체로, 이름값처럼 Data Transfer Object == 데이터를 옮기는 오브젝트라고 보시면돼요 .
엔티티 자체를 옮겨다니다보면, 보안위협이나 순환참조같은 에러가 발생한다는거죠
로직이없어요.
public class UserDTO {
private String userId;
private String name;
private String email;
// getter / setter
}
와같이 어느 클래스에 필요한 데이터 오브젝트를 이 값들로 채우겠다 ! 선언하기때문에
전부 선언하지않아도 되는거죠
근데?
DAO는 로직이 이써용.
DB접근 로직을 캡슐화 한 객체입니다.
SQL문이 들어가고 + Connection관리가 들어가고 ResultSet으로 객체를 매핑합니다.
Connection으로 연결한 db에 sql문으로 데이터 정의를하고, resultSet으로 매핑하는 과정인거예요.
이때 나오는 특징이 JDBC/ JPA/ MYBATIS를 사용합니다.
public class UserDAO {
public UserDTO findById(String userId) {
// DB 연결
// SQL 실행
// ResultSet → UserDTO 변환
return userDTO;
}
public void insert(UserDTO userDTO) {
// INSERT SQL
}
}
그래서 로그인을 예시로 들었을 때,
Client-> server > Controller > DTO(LoginRequestDTO) > Serice > DAO(DB접근) > DTO > Service > Controller > View
로 보시면될것같아요