DAO,DTO,Entity Class

ryudjae
|2021. 8. 13. 23:26
728x90

➡️DAO 란?

  • Data Access Object의 약자로 실제로 DB에 접근하는 객체이다.
  • 서비스와 DB를 연결하는 역할을 한다.
  • SQL을 사용하여 DB에 접근한 후 적절한 CRUD API를 제공한다.(ex:JPA)

➡️DTO 란?

  • Data Transfer Object 의 약자로 계층간 데이터 교환을 위한 객체이다.
    • DB에서 데이터를 얻어 서비스나 컨트롤러 등으로 보낼 때 사용하는 객체를 말한다.
    • 로직을 갖고 있지 않은 순수한 데이터 객체이며,getter/setter메서드만 갖는다.
    • 그러나 DB에서 꺼낸 값을 임의로 변경 할 필요가 없기 때문에 DTO클래스에는 setter가 없다 그대신 생성자에서 값을 할당한다.
  • Request와 Response용 DTO는 View를 위한 클래스이다.
    • 자주 변경이 필요한 클래스
    • toEntity메서드를 통해서 DTO에서 필요한 부분을 이용하여 Entity로 만든다.

➡️Entity Class 란?

  • 실제 DB 테이블과 매칭될 클래스이다.
    • @Entity,@Column,@Id 사용
  • 최대한 외부에서 Entity클래스의 getter method를 사용하지 않도록 해당 클래스 안에서 필요한 로직 메서드를 구현한다.
    • 도메인 로직만 가지고 있어야 하고 프레젠테이션 로직을 가지고 있으면 안된다.

 

➡️Entity Class 와 DTO를 분리하는 이유

  • View Layer과 DB Layer의 역할을 확실하게 분리하기 위해서 분리한다.
  • 테이블과 매핑되는 Entity클래스가 변경되면 여러 클래스에 영향을 끼친다, 그러나 View와 통신하는 DTO클래스는 자주 변경되므로 분리하여야 한다.
  • DTO는 도메인 모델을 복사한 형태로 다양한 프레젠테이션로직을 추가한 정도로 사용하며 도메인 모델 객체는 persistent만을 위해서 사용한다.

=>예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Getter
@Entity
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User extends BaseTimeEntity {
    @Id
    @GeneratedValue
    private Long id;
 
    private String email;
 
    private String password;
 
    private String nickname;
 
    private String phone;
cs

 


REFERENCE

728x90

'Dev > Spring' 카테고리의 다른 글

@Transactional  (1) 2021.08.24
Spring REST Docs  (0) 2021.08.23
@RequestMapping에 대하여  (0) 2021.07.24
[Spring]@RestController 와 @Controller의 차이  (0) 2021.07.18
로깅(Logging)  (0) 2021.07.13