소프트웨어 아키텍처 구성 요소

ejoo·2024년 4월 25일

VO(Value Object)

  • 값 그 자체를 표현하는 객체
  • 로직을 포함할 수 있고, 객체의 불변성을 보장(read only)
  • equals(), hashCode()를 재정의(Override)하여 각 객체의 동일성을 판별할 수 있다.
  • 서로 다른 이름을 갖는 vo 인스턴스라도 모든 속성 값이 같다면 같은 객체
  • 특정한 비즈니스 로직을 가질 수 있다.
    ex) 주소, 날짜 범위 등

DTO(Data Transfer Object)

  • 계층 간 데이터 교환을 위한 객체 (계층: Controller, View, Business Layer, Persistent Layer)
  • 네트워크를 통한 데이터 전송에 사용된다.
  • 다양한 계층 간 데이터 교환을 간소화하고, 필요한 데이터만을 포함하기 위해 사용한다.
  • 로직을 갖지 않고, Getter, Setter 메소드만 갖는다.
  • DTO와 VO는 동일한 개념이지만, VO는 불변성, DTO는 가변성

BO(Business Object)

  • 비즈니스 로직을 캡슐화 하는 객체 (Service에 해당)
  • 시스템의 비즈니스 도메인에 특화된 데이터와 로직을 포함한다.
    ex) 사용자 계정의 비즈니스 규칙 관리, 주문 처리 로직 수행

DAO(Data Access Object)

  • DB의 데이터 접근을 위한 객체 (Repository, Mapper에 해당)
  • 실제 객체는 멤버 변수와 멤버 메소드로 구성되어 있다.
  • 데이터베이스 쿼리 실행, 데이터 조회와 저장 등의 기능을 제공해 데이터베이스와의 상호작용을 분리한다.
  • 데이터 접근 로직을 캡슐화하여 비즈니스 로직과 분리

Entity

  • 실제 DB와 1:1로 매핑되는 객체
  • 상속을 받거나 구현체여서는 안되며, 테이블 내에 존재하지 않는 컬럼을 가질 수 없다.

일반적인 웹 애플리케이션의 흐름

  1. Controller에서 DTO를 통해 데이터 수신
  2. BO 또는 Service 계층에서 비즈니스 로직 처리
    • BO를 사용하는 경우: BO에서 비즈니스 로직을 처리하고, 필요한 경우 DAO를 통해 DB와 상호작용한다.
    • Service 계층을 사용하는 경우: Service 계층에서 비즈니스 로직과 DB 접근 로직(DAO)을 함께 처리할 수 있다.
  3. 결과 데이터를 DTO 또는 VO를 통해 Controller로 전달

참고
[JAVA]POJO, DTO, DAO, VO
DTO와 VO 그리고 Entity 차이점 알아보기

profile
안녕하세요

0개의 댓글