DAL, DAO, DTO, Entity, Model
MVC 패턴과 DAL/DAO 패턴은 조금씩 다르기도 하고, 목적 또한 살짝 다르기도 한 패턴들입니다.
이 패턴들은 각각 독립적으로 사용될 수 있지만, 함께 사용하면 보다 효율적이고 구조화된 애플리케이션을 개발할 수도 있습니다.
MVC (Model-View-Controller) 패턴
MVC 패턴은 애플리케이션을 세 가지 주요 구성 요소로 분리하는 디자인 패턴입니다.
애플리케이션의 데이터와 비즈니스 로직을 관리하는 Model과
사용자에게 데이터를 표시하는 역할을 하는 View,
사용자의 입력을 받아 처리하고, Model과 View를 연결하는 Controller로 나누어 개발하는 패턴이 MVC 패턴입니다.
Model
Model은 MVC(Model-View-Controller) 패턴에서 데이터와 비즈니스 로직을 처리하는 부분입니다.
모델은 데이터를 관리하고, 데이터의 규칙, 로직 및 연산을 정의하며, 상태의 변화를 뷰와 컨트롤러에 통지할 수 있습니다.
모델은 애플리케이션의 정보의 뇌 역할을 하며, 데이터베이스, 파일, 메모리 내 데이터 등 다양한 데이터 소스와 상호 작용할 수 있습니다.
DAL (Data Access Layer)와 DAO (Data Access Object) 패턴
DAL과 DAO 패턴은 좀 더 데이터 중점적인 패턴으로, 데이터베이스 접근을 캡슐화하고 분리하는 데 중점을 두는 패턴입니다.
DAO는 데이터베이스와의 상호작용을 추상화하는 객체로, DataBase와 Business Layer 사이에서 여러 상호 작용을 중계합니다.
DAL과 DAO의 의미상 주요 차이는 DAL은 계층을 나타내는 말이고, DAO는 객체를 나타내는 말이라는 것입니다.
DAL (Data Access Layer)
DAL은 Data Access Layer의 약자로, 데이터베이스 또는 다른 저장 시스템에 접근하는 데 사용되는 코드의 계층(레이어)입니다.
이 계층의 주 목적은 데이터베이스 연산을 캡슐화하여 애플리케이션의 나머지 부분이 데이터베이스의 구체적인 세부사항을 신경 쓰지 않고 데이터를 요청하고 저장할 수 있도록 하는 것입니다.
즉, DAL은 SQL 쿼리, 데이터베이스 연결 관리 등을 담당합니다. 이는 연결 풀링(connection pooling)과 같은 기술을 사용하여 성능을 최적화하는 것도 포함됩니다.
DAO (Data Access Object)
DAO는 Data Access Object의 약자로, 데이터베이스와의 상호작용을 추상화하는 객체입니다.
이 객체의 목적은 특정 데이터베이스 테이블 또는 관련 데이터베이스 로직을 한 곳에서 처리하여 데이터 소스의 액세스 방법을 애플리케이션의 나머지 부분으로부터 분리하는 것입니다.
DAO는 일반적으로 특정 엔티티(예: 사용자, 주문 등)에 대한 CRUD(생성, 읽기, 업데이트, 삭제) 연산을 수행하는 메소드를 제공합니다.
DTO (Data Transfer Object)
DTO는 Data Transfer Object의 약자로, 계층 간 데이터 전송을 위해 사용되는 객체입니다.
DTO는 일반적으로 로직을 포함하지 않는 순수한 데이터 컨테이너로, 여러 데이터 필드를 하나의 객체로 그룹화(객체화)하여 네트워크를 통해 데이터를 효율적으로 전송합니다.
예를 들어, 클라이언트와 서버 사이에 사용자 데이터를 전송할 때 사용자의 이름, 이메일 등을 포함하는 DTO를 사용할 수 있습니다.
Entity
Entity는 데이터베이스 테이블의 구조와 직접적으로 맵핑되는 클래스 또는 객체를 의미합니다.
엔티티는 일반적으로 데이터의 상태를 나타내며, 이를 통해 ORM(Object-Relational Mapping) 툴을 사용하여 데이터베이스 테이블과 객체 지향 프로그래밍 언어의 클래스 사이의 맵핑을 쉽게 할 수 있습니다.
엔티티는 비즈니스 로직을 포함할 수도 있으며, 각 엔티티 인스턴스는 데이터베이스의 행을 대표합니다.
DAL (DAO)패턴 정리
- 목적: 데이터베이스나 다른 영구 저장소와의 상호작용을 추상화하여 비즈니스 로직과 데이터 접근 로직을 분리합니다.
DAO 패턴은 데이터베이스 연산(CRUD: Create, Read, Update, Delete)을 캡슐화하는 객체를 정의하여, 데이터베이스와의 상호작용을 단순화하고, 데이터 접근 로직을 재사용 가능하게 만드는 패턴입니다.
장점
- 코드의 모듈화: 데이터 접근 로직을 애플리케이션의 나머지 부분과 분리하여 코드의 모듈성을 향상시킵니다.
- 유지보수성: 데이터 접근 로직을 한 곳에 모아두면 변경 사항을 쉽게 관리할 수 있습니다.
- 재사용성: 공통적인 데이터 접근 로직을 중앙에서 관리하므로 재사용이 용이합니다.
- 테스트 용이성: 데이터 접근 로직을 분리하면 독립적인 단위 테스트가 가능해집니다.
패턴들의 결합
이렇게, MVC 패턴과 DAL/DAO 패턴은 서로 다른 목적을 가진 패턴이지만, 이들을 함께 사용하여 유지보수성이 좋고 재사용 가능한 모듈화 된 애플리케이션을 개발할 수 있습니다.
예를 들어, 각 패턴을 다음과 같이 역할을 나누어 만들고 호출하여 사용할 수 있습니다.
- MVC 패턴 프로젝트 (웹, 앱)
- 사용자에게 데이터를 표시하는 UI 요소와 사용자의 요청을 처리하는 View와 Controller를 정의합니다.
- Controller는 Model 혹은 DAO를 직접 호출하여 데이터베이스와 상호작용 합니다.
- DAL/DAO 패턴 (서비스)
- 데이터 베이스와 직접 상호작용하는 작업을 추상화하여 각 어플리케이션에 제공해 줍니다.
이런식으로 패턴을 나누어 프로젝트를 만들어 관리하면, DAL/DAO 패턴을 사용한 서비스를 통해 데이터베이스와의 상호작용을 일관되게 제공하고,
각 어플리케이션에서는 이 DAL/DAO 서비스에게 데이터베이스와의 상호작용을 할 수 있습니다.