ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] 용어정리(Updated 240131)
    Spring(Java) 2024. 1. 31. 23:43

    () : 내 생각


    Entity

    DB의 테이블에 존재하는 Column들을 필드로 가지는 객체를 뜻함

    Entity는 DB의 테이블과 1대1 대응이며, 테이블에 가지지 않는 Column을 필드로 가져선 안된다.

    또한 다른 클래스를 상속받거나 인터페이스의 구현체이기보다 순수한 데이터 객체인 것이 좋다.

    (LocalDateTime으로 주로 선언하는 createdAt이나 modifiedAt 등의 필드, 공통되는 필드는 BaseEntity로 관리하며,

    이를 상속 또는 구현해서 사용하는 것이 더 좋은 것 같다.)

     

    (createdAt 240131)


    DTO

    Data Transfer Object로 데이터를 이동하기 위한 객체다.

    Client가 Controller에 요청을 보낼 때 RequestDTO를 활용하며, Controller에서 Client에게 응답을 보낼 때 ResponseDTO를 활용한다.

    로직이 없는 순수한 데이터 객체이며, 일반적으로 getter, setter 메소드만을 가진다.

    단순히 데이터를 이동하기 위한 객체이기 때문에 setter를 굳이 사용하지 않고 생성자, builder 등을 통해 값을 할당해주는 것이 좋다.

    (DTO는 Entity 객체의 값 변경을 막기 위해, 그리고 계층을 분리하기 위해서 사용하는데, Client와 직접 소통하는 DTO의 경우는 변경의 소지가 많기 때문에 람다를 활용하거나, 공통되는 ResponseDTO를 사용하는게 실용적일 것이다.)

     

    (createdAt 240131)


    DAO

    Data Access Object로 실제 DataBase에 접근하는 객체를 뜻한다.

    흔히 사용하는 JPA의 Repository가 유사한 역할을 하지만 같은 것은 아니다.

     

    [DAO와 Repository의 차이점]

    DAO와 REPOSITORY 모두 퍼시스턴스 로직에 대한 객체-지향적인 인터페이스를 제공하고 도메인 로직과 퍼시스턴스 로직을 분리하여 관심의 분리(separation of concerns) 원리를 만족시키는데 목적이 있다. 그러나 비록 의도와 인터페이스의 메서드 시그니처에 유사성이 존재한다고 해서 DAO와 REPOSITORY를 동일한 패턴으로 취급하는 것은 성급한 일반화의 오류를 범하는 것이다.
    DAO는 퍼시스턴스 로직인 Entity Bean을 대체하기 위해 만들어진 개념이다. DAO가 비록 객체-지향적인 인터페이스를 제공하려는 의도를 가지고 있다고 하더라도 실제 개발 시에는 하부의 퍼시스턴스 메커니즘이 데이터베이스라는 사실을 숨기려고 하지 않는다. DAO의 인터페이스는 데이터베이스의 CRUD 쿼리와 1:1 매칭 되는 세밀한 단위의 오퍼레이션을 제공한다. 반면 REPOSITORY는 메모리에 로드된 객체 컬렉션에 대한 집합 처리를 위한 인터페이스를 제공한다. DAO가 제공하는 오퍼레이션이 REPOSITORY 가 제공하는 오퍼레이션보다 더 세밀하며, 결과적으로 REPOSITORY에서 제공하는 하나의 오퍼레이션이 DAO의 여러 오퍼레이션에 매핑되는 것이 일반적이다. 따라서 하나의 REPOSITORY 내부에서 다수의 DAO를 호출하는 방식으로 REPOSITORY를 구현할 수 있다.

    출처: https://code-lab1.tistory.com/201

     

    [Spring] 스프링 패키지 구조, DAO, DTO, Entity, Repository 에 대하여, DTO를 사용하는 이유

    스프링 패키지 구조 스프링 패키지를 나눌 때 전체적인 그림은 일반적으로 [그림 1]과 같다. 이렇게 계층을 나누어 관리하는 것이 유지 보수하기에 용이하며 디버깅하기도 쉽다. DTO, DAO, Repository

    code-lab1.tistory.com

    (createdAt 240131)

     

    'Spring(Java)' 카테고리의 다른 글

    Spring과 Spring Boot의 차이점  (0) 2024.08.29
    [Spring] Builder 패턴의 장점과 사용방법  (0) 2024.02.08
    [Spring Boot] Error 정리  (0) 2024.01.31
    [SpringBoot] QueryDSL 사용법 + 환경설정  (0) 2024.01.31
    Spring MVC  (0) 2023.11.03
Designed by Tistory.