[Spring] 엔티티, DTO/DAO/VO

mingsso·2023년 6월 10일
0

SpringBoot

목록 보기
5/11
post-thumbnail

1️⃣ Entity

비즈니스 요구사항을 모델링한 객체

@Entity
@Table(name="member")
@Getter @Setter
@ToString
public class Member {

    @Id
    @Column(name="m_id")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @OneToOne
    @JoinColumn(name="m_img_id")
    private MemberImg memberImg;

    @Column(unique = true)
    private String email;

    private String password;

    private String name;
    
}
  • @Entity - 이 클래스를 테이블과 매핑한다고 JPA에게 알려줌
  • @Table - 엔티티 클래스에 매핑할 테이블 정보를 알려줌 (name 속성을 사용해 테이블 매핑 가능, 생략하면 클래스 이름을 테이블 이름으로 매핑)
  • @Id - 엔티티 클래스의 필드(식별자 필드)를 테이블의 기본키에 매핑함
  • @Column - 필드를 컬럼에 매핑함



2️⃣ DTO

데이터를 주고 받을 때는 Entity 클래스 자체를 반환하면 안 되고, 데이터 전달용 객체(Data Transfer Object)를 생성해서 사용해야 함

  • 데이터베이스의 설계를 외부에 노출할 필요도 없고, 요청과 응답 객체가 항상 엔티티와 같지 않기 때문
  • 데이터를 교환하는 용도로만 사용하는 객체이기 때문에 별도의 로직이 포함되지 않음
  • 전달하고자 하는 필드 객체를 선언하고, getter/setter 메서드를 구현함
@Getter
@Setter
public class MemberFormDto {

    @NotBlank(message = "이메일은 필수 입력 값입니다.")
    @Email(message = "이메일 형식으로 입력해주세요.")
    private String email;

    @NotBlank(message = "비밀번호는 필수 입력 값입니다.")
    private String password;

    @NotBlank(message = "이름은 필수 입력 값입니다.")
    private String name;
    
}



3️⃣ DAO

실제로 DB의 데이터에 접근하는 객체(Data Access Object)

Service와 DB를 연결하는 역할을 하며, 실제로 DB에 접근하여 데이터에 대해 CRUD 기능을 수행함

  • JPA에서는 DB에 데이터를 CRUD하는 JpaRepository<>를 상속받는 Repository 객체들이 DAO라고 볼 수 있음
public interface itemRepository extends JpaRepository<Item, Long> {
}



4️⃣ VO

변경 불가능하며, 오직 읽기만 가능(Value Object)

DTO는 setter를 가지고 있어 값을 변경할 수 있지만, VO는 getter만을 가지기 때문에 읽기만 가능하고 수정은 불가능함

profile
🐥👩‍💻💰

0개의 댓글