ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 4월 7일 금요일 TIL 회고록
    카테고리 없음 2023. 4. 7. 20:39

    DAO, DTO, VO, BO 간단한 개념정리 및 차이


    DAO (Data Access Object)

    DAO는 데이터베이스의 Data의 접근하기 위한 객체이다. Database에 접근하기 위한 로직 & 비즈니스 로직을 분리하기 위해 사용된다.

    • 실제로 DB에 접근하여 Data를 삽입, 삭제, 조회, 수정 등 기본적인 CRUD 기능을 수행한다.
    • Service와 DB를 연결하는 고리 역할을 한다.
    • 예를 들면 Repository package가 바로 이 DAO이다.

    DTO (Data Transfer Object)

    DTO는 계층 간 데이터 교환을 하기 위해 사용하는 객체로, DTO는 로직을 가지지 않는 순수한 객체(Java Beans)이다.

    • DTO는 즉, getter/setter 메서드만 가진 클래스를 의미한다.
    • DB에서 데이터를 얻어서 Service나 Controller 등으로 보낼 때 사용한다.
    • 즉 엔티티를 DTO 형태로 변환한 후 사용한다.

    VO (Value Object)

    VO는 DTO와 달리 Read-Only 속성을 지닌 값 오브젝트이다. DTO는 Setter를 가지고 있어서 값이 변할 수 있지만 VO의 경우에는 Getter만 가지고 있고 Setter는 가지고 있지 않아 수정이 불가능하다. 

     

    DTO와 VO의 차이점

    DTO와 VO의 차이점은 DTO는 인터턴스 개념이고 VO는 리터럴 값 개념이다. VO는 값들에 대해 Read-Only를 보장해줘야 존재의 신뢰성이 확보되지만 DTO의 경우에는 단지 데이터를 담는 그릇의 역할일 뿐 값은 그저 전달되어야 할 대상일 뿐이다. 

    따라서 값 자체에 의미가 있는 VO와 전달될 데이터를 보존해야하는 DTO의 특성상 개념이 다르다.

     

    따라서 VO의 핵심은 두 객체의 모든 필드 값들이 동일하면 두 객체는 같다이다. 따라서 완전히 값 자체 표현 용도로만 사용하는게 목적이라면, 두 객체의 모든 필드 값들이 모두 같으면 같은 객체이도록 만드는 것이 중요하지, 메소드는 어떤 메소드가 있든 말든 상관 없다.

    종류 용도 동등 결정 가변 / 불변 로직
    DTO - 계층 간 데이터 전달 - 속성값이 모두 같아도 같은 객체가 아닐 수 있음 - setter 존재 시 가변,
    - setter 비 존재 시 불변
    - getter/setter 이외의 로직이 불필요함
    VO - 값 자체를 표현 - 속성값이 모두 같으면 같은 객체 - 불변 - getter/setter 이외의 로직을 가질 수 있음

     

    BO(Business Object)

    비즈니스 로직을 포함하는 오브젝트이다. VO인데 비즈니스 관련 내용을 담은 VO라고 보면 된다.


    CORS란?

    • Cross-Origin Resource Sharing
      • 다른 출처의 자원을 공유. 교차 출처 리소스 공유 (Cross-Origin Resource Sharing, CORS)는 추가 HTTP 헤더를 사용하여, 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제이다.
Designed by Tistory.