VB.NET2011.09.08 16:39


DAO 패턴이란 Data Access Object 를 Factory 패턴화 시키는것으로써, 비즈니스 로직을 컴퍼넌트화 하기 좋은 방법입니다.

위키피디아의 정의에 따르면, DAO (Data Access Objects)는 객체 지향적 설계 패턴의 일종입니다. DAO는 어플리케이션에 대하여 하나 이상의 데이터 저장 장치 혹은 관련 소프트웨어에 대한 공통적인 인터페이스를 제공하는 컴포넌트를 의미합니다.

즉, 애플리케이션에 대해서는 일관성 있는 데이터 접근을 확보해주는 것이지요.

DAO를 활용하면 물리적인 저장 장치가 파일에서 관계형 데이터페이스로 변화하더라도 애플리케이션이 영향을 덜 받도록 해줍니다. 물리적인 저장은 모두 관계형 데이터베이스를 활용하는 경우에도 제품의 종류나 데이터 접근 오퍼레이션(CRUD 작업)을 돕는 솔루션을 활용에 따라서 실제 구현은 많이 달라지게 됩니다. DAO와 같은 공통적인 접근 인터페이스를 두지 않는다면, RDBMS 제품이나 활용 솔루션에 변화가 생길 때마다 애플리케이션에도 변경이 필요하게 되니 주의 하여야 합니다.

DAO 패턴에서는 크게 네가지 레이어로 나누게 됩니다.

BusinessObject
BusinessObject 객체는 데이터를 요구하는 클라이언트를 나타낸다. BusinessObject 객체는 데이터 원본에 접근하여 데이터를 얻거나 저장하기를 요구합니다. 일반적으로 서비스 레이어의 객체로 구현하거나, 도메인 객체로 구현합니다.

DataAccessObject
DataAccessObject 객체는 DAO 패턴의 핵심이라고 할수 있습니다. 기반을 이루는 데이터 접근 구현을 추상화시켜서  BusinessObject 객체가 구체적인 데이터 원본을 고려하지 않고도 접근할 수 있게 합니다. 또한, BusinessObject 객체는 DataAccessObject 객체에게 데이터의 로딩 및 저장을 위임할수 있습니다.

DataSource
데이터 원본에 대한 구현을 나타냅니다. 데이터 원본은 RDBMS, OODBMS, XML 저장소, 일반 파일 시스템 등의 데이터베이스입니다.

TransferObject
데이터를 운반하는 객체를 말합니다. DTO 라고도 합니다. DataAccessObject 객체는 BusinessObject 객체에게 데이터를 전달하거나 수정을 위해 데이터를 받기 위해 TransferObject 객체를 사용합니다. 서비스 레이어 중심으로 구현을 하는 경우는 대부분의 도메인 객체가 TransferObject 역할을 합니다.

아래 다이어그램은 Core J2EE 패턴 카다로그(http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html) 에서 가져왔습니다. 다이어그램을 보시면 흐름을 알기 쉬울것 같습니다.



사실 DAO 패턴이라는건 JAVA 쪽에서 개념이 정립되었습니다.
MS쪽에서는 CBD 개발 방법론이라고 하죠. 사실 CBD와 비슷하면서도 다른게 DAO 패턴입니다.

Posted by dotnetpower