SERVER/Spring Boot

[Spring] DAO/DTO/VO/Entity 란?

GaGah 2021. 8. 24. 00:40

1️⃣ DAO(Data Access Object)

Data Access Object의 약자로 풀어 해석하면 Data에 직접 Access하는 객체를 의미한다.

다시 말하면, 실제 DB에 접근하여 CRUD하는 객체를 말한다.

 

ex) repository package에 해당한다.

  • JPA의 경우 JPARepository를 사용하는 경우가 DAO의 예시라고 생각하면 된다.
public interface ChattingLogRepository extends MongoRepository<ChattingLog, String> {

	public ChattingLog findAllByRoomIdx(Long roomIdx);

	public List<ChattingLog> findByRoomIdx(Long roomIdx);
}

2️⃣DTO(Data Transfer Object)

계층간 데이터 교환은 위해 Data를 변형하여 사용하는 객체이다.

특징

  • 로직을 가지고 있지 않으며, 순수하게 getter/setter로만 이루어져있는 객체이다.

이런 경우에 사용하자.

모든 회원 정보를 불러와야 한다고 가정하자.
User Table에는 회원의 이름, 성별, 나이, 핸드폰번호, 아이디, 비밀번호 등 많은 정보들이 존재한다.
하지만, 나는 이름, 성별, 나이만 필요하다.
User Table에 모든 데이터가 필요하지 않은 지금, Entity로 만들어 둔 class를 사용하기에는 보안상의 문제, 필요없는 값을 가지고 있다는 점에서 좋지 않다.
이런 경우, 이름, 성별, 나이만 담는 DTO를 만들어 사용하자.

3️⃣ VO(Value Object)

DTO와 동일한 개념이지만, Read Only의 속성을 지니고 있다.

4️⃣ Entitiy

실제 DB Table과 연결될 클래스이다.

@Table, @ID, @Column 등의 애너테이션이 쓰인다.

 

예시)

@Getter
@Setter
@Entity
@Table(name = "follow")
public class Follow extends BaseEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "follow_idx")
    private Long followIdx;

    @Column(name = "user_follower_idx")
    private Long userFollowerIdx;

    @Column(name = "user_streamer_idx")
    private Long userStreamerIdx;
}

 

 

📘 참고링크

1. https://gmlwjd9405.github.io/2018/12/25/difference-dao-dto-entity.html

2. https://genesis8.tistory.com/214

3.https://ko.wikipedia.org/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0_%EC%A0%84%EC%86%A1_%EA%B0%9D%EC%B2%B4

LIST