[Spring] DTO, Entity

이병수·2024년 1월 21일
0

스프링 정리

목록 보기
9/24

DTO, Entity


DTO

DTO(Data Transfer Object)의 약자로, 데이터 를 전달하기 위한 객체라고 생각하면 된다.

  • DTO는 로직을 가지지 않은 순수한 데이터 객체이므로 (Getter & Setter 만 가지는 클래스이다.)

  • DTO의 핵심은 데이터를 전달하는 것에 초점을 둔다.

  • 따라서 여러 레이어(Layer)간 데이터를 주고 받을 때 사용할 수 있으며 주로 View와 Controller 사이에서 사용한다.


따라서 클라이언트에서 서버쪽으로 요청하는 데이터를 담긴 객체가 Request 객체라면,
RequestDto 라는 이름을 붙여서 DTO 클래스를 만들 수 있다.

또한, 서버쪽에서 클라이언트로 응답 데이터를 담긴 객체를 Response 객체라면,
ResponseDto 라는 이름을 붙여 DTO 클래스를 만들 수 있다.

@Getter
public class RequestDto {
	private final String name;
    private final int age;
    
    public RequestDto(Request request) {
    	name = request.getName();
        age = request.getAge();
    }
    
}

이런 식으로 불변 객체로써의 DTO를 만들 수 있다.

  • 생성자를 통해 처음 인스턴스를 만들면 해당 데이터를 변경 없이 전달하는 과정에서 데이터의 불변성을 보장 한다.


Entity

실제 DB 테이블매핑 이 되는 클래스를 의미한다.

  • 실제 DB의 데이틀봐 매칭될 클래스이다.

  • Entity 데이터를 전달하는 클래스로 사용하면 안된다.

  • 테이블에 대응하는 하나의 클래스라고 생각하면 된다.

  • Entity는 Setter를 설정하지 않아야 한다. 외부에서 Setter를 이용한 값의 변경으로 DB 오류가 발생할 수 있다.


@Entity
@NoArgsConstructor
@Getter
@Table(name = "test")
public class EntityTest{
	@Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @Column(name="test", nullable = false)
    private String test;
    
    public EntityTest(String test) {
    	this.test = test;
    }
    
}

이런식으로 DB 테이블에 대응하는 클래스이다.

자세한 어노테이션에 대한 링크는 어노테이션 링크 에 찾아가서 보면 된다.

@Entity 어노테이션

  • JPA가 관리할 수 있는 Entity 클래스로 지정한다.

    • @Entity(name = "test") : Entity 클래스 이름을 지정할 수 있다. (default : 클래스명)

@Table 어노테이션

  • 매핑할 테이블을 지정해준다.

    • @Table(name = "test") : 매핑할 테이블의 이름을 지정해줄 수 있다. (default : Entity 명)

@Column 어노테이션

  • @Column(name = "test") : 필드와 매핑할 테이블의 컬럼을 지정할 수 있다.

  • @Column(nullable = false) : 데이터의 null 값 허용 여부를 지정할 수 있다.

  • @Column(unique = true) : 데이터의 중복 값 허용 여부를 지정할 수 있다. (defalut = false)

  • @Column(length = 500) : 데이터 값(문자)의 길이에 제약 조건을 걸 수 있다. (default = 255)


@Id 어노테이션

  • 테이블의 기본 키를 지정해준다.

  • 영속성 컨텍스트에서 Entity를 구분하고 관리할 때 사용되는 식별자 역할을 수행한다.

    • 따라서, 식별자 값을 넣어주지 않고 저장하면 오류가 발생한다.
  • @GeneratedValue 옵션을 추가하면 기본 키 생성을 DB에 위임할 수 있다.

  • @GeneratedValue(strategy = GenerationType.IDENTITY) : 직접 id값을 넣어주지 않아도 자동으로 순서에 맞게 기본키가 증가된다.


주의!!
JPA가 Entity 클래스를 인스턴스화 할 때 기본 생성자를 사용하기 때문에 반드시 현재 Entity 클래스에는 기본 생성자가 생성되고 있는지 확인해야한다.

profile
백엔드 개발자가 되고 싶어요

0개의 댓글