Data Access Object (DAO) 는 데이터베이스에 접근하는 로직과 비즈니스 로직을 분리하기 위한 객체입니다.
DAO는 데이터베이스에 접근하여 데이터를 조회하거나 조작하는 기능을 제공합니다.
일반적으로 CRUD(Create, Read, Update, Delete) 작업을 수행합니다.
Data Transfer Object (DTO) 는 데이터 전송을 목적으로 설계된 객체입니다.
주로 네트워크를 통해 데이터를 전송하는 데 사용되며, 여러 데이터 항목을 하나의 객체로 그룹화합니다.
일반적으로 계층간 데이터 전송(예: 프레젠테이션 계층과 비즈니스 계층 사이)에 사용됩니다.
Value Object (VO) 는 데이터를 표현하기 위한 객체입니다.
VO는 비즈니스 로직을 포함하지 않으며, 단순히 데이터를 전달하는 역할을 합니다.
VO는 일반적으로 불변 객체로 설계되어, 생성 시점의 상태를 변경할 수 없습니다.
Business Object (BO) 는 비즈니스 로직을 포함하는 객체입니다.
BO는 비즈니스 규칙과 계산 로직을 구현하며, 일반적으로 데이터 가공 및 변환 작업을 수행합니다.
BO는 일반적으로 여러 DAO를 사용하여 데이터를 처리합니다.
Entity 는 일반적으로 데이터베이스의 테이블과 1:1로 매핑되는 객체를 의미합니다.
ORM(Object-Relational Mapping) 프레임워크에서는 Entity를 사용하여 데이터베이스와 객체 지향 코드를 매핑합니다.
Entity는 데이터베이스 테이블의 로우를 표현하며, 고유 식별자(ID)를 가지고 있습니다.
- VO(Value Object)와 DTO(Data Transfer Object)는 데이터를 표현하며, VO는 불변성을, DTO는 가변성을 가집니다.
- DAO(Data Access Object)는 데이터베이스 접근 로직을 캡슐화합니다.
- BO(Business Object)는 비즈니스 로직을 캡슐화합니다.
- Entity는 데이터베이스의 테이블과 직접적으로 매핑되는 객체입니다.
- Service 계층은 비즈니스 로직을 수행할 수 있지만, 이는 선택적이며 BO의 로직을 대신할 수 있습니다.
일반적인 웹 애플리케이션의 흐름
1. Controller에서 DTO를 통해 데이터를 받습니다.
2. BO 또는 Service 계층에서 비즈니스 로직을 처리합니다.
- BO를 사용하는 경우: BO에서 비즈니스 로직을 처리하고, 필요한 경우 DAO를 통해 데이터베이스와 상호 작용합니다.
- Service 계층을 사용하는 경우: Service 계층에서 비즈니스 로직과 데이터베이스 접근 로직(DAO를 통한)을 함께 처리할 수 있습니다.
- DAO를 통해 데이터베이스에 접근하며, 이때 Entity를 사용할 수 있습니다. (BO가 아닌 Service 계층에서 DAO를 호출하는 경우에 해당합니다.)
- 결과 데이터를 DTO 또는 VO를 통해 다시 Controller로 전달합니다.