IT/Spring

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

어린이개발자 2022. 11. 30. 18:26

회사 프로젝트 및 개인 프로젝트 (" Spring Boot & JPA 를 활용한 주식 종목 관리 게시판 개발 ") 진행 중에 이에 대한 명확한 개념 정리가 필요하다고 생각하여 포스팅한다.

1. Entity

- 개념

  • Entity 는 SQL 에서 자주 사용되는 개념이고, "실제, 객체" 의 의미를 갖고 있다.
  • 그 중 JPA 의 Entity 에 대해 이야기 해보자면, DB 에서 영속적으로 저장된 데이터를 Java 객체로 매핑하여 인스턴스의 형태로 존재하는 데이터를 의미한다.
  • 참고) JPA 를 어디에 사용하면 좋을까?
    • 기존 JDBC 만을 이용한다면, 반복적이며 비슷한 SQL 문을 계속 만들어야 하고 DB 의 테이블과 Java 객체 간 매핑 작업을 계속해야 한다.
    • 그러나 JPA 를 사용하면 SQL 문을 개발자가 만드는 것이 아니므로, 생산성과 유지보수의 향상을 이룰 수 있으며 특정 DBMS 문법에 종속적이지 않을 수 있다.

- 사용법

  • JPA 에서 Entity 로 관리하고 싶은 클래스에 @Entity 어노테이션을 추가하면 된다.

2. DTO (Data Transfer Object)

- 개념

  • 계층 간 데이터를 교환하기 위해 사용하는 객체이다.

- 특징

  • 로직을 가지지 않는 순수한 데이터 객체이다. (Getter 와 Setter 만 가진 클래스)
  • 중요한 정보를 노출시키지 않고 시스템 간 통신을 원활하게 촉진시킨다.

- 역할

  • 클라이언트의 요청에 포함된 데이터를 받아 서버에 전달하고, 반대로 서버의 응답 데이터를 담아 클라이언트에 전달한다.

3. DAO (Data Access Object)

- 개념

  • 실질적으로 DB 에 접근하는 객체이다.
  • 참고) Repository 와의 차이점은 무엇일까?
    • 결론부터 말하면, 큰 차이 없이 거의 같다고 봐도 된다.
    • DAO 는 DB 에 접근하기 위해 관련 로직을 모아둔 객체이고, Repository 는 Entity 객체를 보관하고 저장하는 저장소이다.

- 특징

  • 어플리케이션에서 사용할 DB 로직을 객체 하나의 메서드로 구현하고 이를 호출하여 사용한다.

- 역할

  • DB 를 사용하여 데이터를 조회하거나 조작한다.

4. VO (Value Object)

- 개념

  • 도메인에서 여러 속성들을 묶어서 특정 값을 나타내는 객체이다.

- 특징

  • Read-Only
  • 객체가 생성될 때 해당 객체 안에 제약 사항을 추가 가능하다.

- 역할

  • Entity 의 값을 VO 로 포장하면 Entity 가 지나치게 커지는 것을 막을 수 있다.