ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Entity, DTO의 개념과 차이
    spring 2023. 12. 4. 21:15

    Entity 클래스는 실제 DB 테이블과 매핑되는 핵심 클래스로,
    DB의 테이블에 존재하는 컬럼들을 필드로 가지는 객체이다

    Entity 는 영속성의 목적으로 사용되는 객체이며, 요청이나 응답 값을 전달하는 클래스로 사용하는 것은 좋지 않다

    Entity는 setter의 사용을 지양해야 한다
    변경되지 않는 인스턴스에 대해서도 setter로 접근이 가능해지기 때문에
    객체의 일관성, 안전성을 보장하기 힘들다
    때문에 Entity 에서는 setter대신 생성자를 사용한다
    불변 객체로 활용할 수 있게 되며, 추가로 어떤 값을 어떤 필드에 넣는지 코드를 통해 확인할 수 있으며,
    필요한 값만 넣는것이 가능해 진다



    DTO 는 계층간 데이터 교환이 이루어질 수 있도록 하는 객체로, 직렬화에도 사용되는 객체이다
    Controller 같은 클라이언트 단과 직접 마주하는 계층에서는 Entity 대신 DTO를 사용해서 데이터를 교환하며,
    외에도 여러 레이어 사이에서 DTO를 사용할 수 있지만,
    주로 View와 Controller 사이에서 데이터를 주고받을 때 활용성이 높다

    DTO는 getter, setter 메서드를 포함하며, 의외의 비즈니스 로직은 포함하지 않는다

    자바는 데이터 자동화 처리를 위해 리플렉션 기법을 사용한다
    예시의 DTO에서 프로퍼티(Property)가 name이라면 name의 키값으로 들어온 데이터는
    리플렉션 기법으로 setter를 실행시켜 데이터를 넣을 수 있다
    (직접 setter를 요청하는 것이 아닌 프레임워크 내부에서 setter가 실행된다는 것이 중요한 포인트)

    특히 레이어 간(View에서 Controller로 이동)에 데이터를 넘길 때 DTO를 사용하면 편하다는 것은
    이런 이유이다
    (View에서 name 필드 값을 프로퍼티에 맞춰서 넘겼을 때, 
    받아야 하는 곳에서 하나하나 처리하는 것이 아니라 
    name 속성의 이름과 매칭 되는 프로퍼티에 자동적으로 DTO가 인스턴스화 되어 
    MemberDTO의 자료형으로 값을 받을 수 있다)



    Entity와 DTO를 구분하는 이유는 DB와 View의 역할을 구분하기 위해서이다
    DTO는 Entity와 달리 각 계층끼리 주고받는 우편물이나 상자의 개념이다
    순수한 데이터를 담고 있다는 점에서 Entity객체와 유사하지만,
    목적 자체가 전달이므로 읽고, 쓰는 것이 모두 가능하고, 일회성으로 사용되는 느낌이 강하다
    특히 JPA를 사용하게 되면 Entity 객체는 단순히 데이터를 담는 객체가 아니라 실제 DB와 관련된
    중요한 역할을 하며, 내부적으로 EM(EntityManager)에 의해 관리되는 객체임을 알 수 있다
    또한 DTO가 일회성으로 데이터를 주고받는 용도로 사용되는 것과 다르게,
    Entity의 생명주기도 전혀 다르다는 점도 분리해야 되는 이유이다

    실무에서는 회사마다, 프로젝트마다 스타일이 다르기 때문에 이러한 개념을 기반으로 하여
    전체 작업 규칙에 맞춰 개발하는 것이 좋다

Designed by Tistory.