Untitled

Untitled

정의

데이터베이스나 외부 파일 시스템과 같은 영속성 메커니즘에 접근하여 데이터의 CRUD(Create, Read, Update, Delete) 처리를 담당하는 객체 또는 디자인 패턴

목적 및 특징

MySQL, PostgreSQL, MongoDB 등 다양한 영구 저장소가 존재한다.

또한 이를 사용하기 위해 각 벤더별로 제공하는 API도 다양하다.

이 API를 직접 사용하게 되면 특정 영구 저장소 API에 내 코드가 종속되는 결과가 발생하게 된다.

이런 문제를 해결하기 위해, DAO는 고수준인 Business Logic과 저수준인 Persistence Logic을 분리하기 위해, Persistence Logic을 캡슐화하고 도메인 레이어에 객체지향적인 인터페이스를 제공하는 객체이다.

→ 영속성 메커니즘에 대한 CRUD 로직을 캡슐화하게 되면, Business Layer는 데이터에 접근하는 방식을 모르게 된다. (SRP 달성)

결과적으로 Business Layer는 비즈니스 로직에만, DAO는 CRUD 로직에만 집중할 수 있게 된다.

목적

DataBase에 접근 하기 위한 로직 & 비지니스 로직분리하기 위해 사용

예시

  1. 예를 들어, Business Layer에서 직접 특정 벤더의 API를 사용한 경우, Business Layer와 Database Layer(Infrastructure Layer)가 강하게 결합되고, Database Layer의 변화가 Business Layer까지 영향을 끼칠 수 있다.
  2. 만약 MySQL에서 PostgreSQL로 마이그레이션을 해야할 일이 생긴다면, MySQL의 API를 사용한 코드를 모두 PostgreSQL의 API를 사용한 코드로 변경해야하는 등의 문제도 발생할 수 있을 것 이다.

장점

비교군과의 차이

면접 질문