목차 >> Data Access Object(DAO)  
+- GlueGenericDao  
----+- Activity에서의 dao 사용

6장 Data Access Object(DAO)

DAO는 Data Access Object의 약자로 데이터 소스(일반적으로 Database, LDAP 또는 파일)에 대한 캡슐화 및 access를 제공합니다.
DAO는 J2EE를 기반으로 하는 일반적인 프로젝트에서 자주 사용되는 디자인 패턴입니다. DAO는 메소드를 호출하는 오브젝트에 대하여 추상화 된 데이터 소스로서의 기능을 제공하며, 데이터에 대한 투명성(transparency)을 제공합니다. 즉 구체적인 데이터 소스에 대한 동작을 DAO가 처리함으로써 DAO를 호출하는 오브젝트에게 데이터 소스에 대한 상세한 정보를 숨기게 하여 상호 의존도를 줄이는 역할을 합니다. 궁극적으로는 데이터 억세스 로직과 비즈니스 로직을 분리하자는 의도로 DAO 패턴을 사용합니다.

GlueGenericDao

GlueGenericDao는 데이터베이스 CRUD(create:insert, read:select, update, delete) 오퍼레이션을 추상화하여 제공하는 Data Access Obejct 인터페이스입니다. GlueGenericDao에서 제공하는 메소드는 Java Doc을 참고합니다. (GlueAPI)

Glue Framework 4에서는 그림과 같이 SpringJDBC, Hibernate, iBatis 를 이용할 수 있도록 DAO를 제공합니다. Activity에서 사용하는 DAO에 따라, 내부적으로 SpringJDBC, Hibernate, iBatis가 사용됩니다.

그림 : Data Access Object
Data Access Object

이런 구조에서 DAO가 없으면, 데이터 소스인 SpringJDBC, Hibernate, iBatis와 관련된 코드를 Activity Layer에서 작성해야 합니다. 그러나 GlueJdbcDao, GlueHibernateDao, GlueMyBatisDao에 이런 부분이 작성되어 있으니, GlueGenericDao에서 제공하는 추상화된 api를 사용할 수 있습니다.

Activity에서의 dao 사용

GlueActivity의 JavaDoc에는 다음과 같은 Method가 있습니다 (GlueAPI 참고).

  • GlueGenericDao getDao(String daoKey)

    다음은 applicationContext.xml 에 'biz-dao' 를 설정한 예입니다.

    <bean id="biz-dao" class= . . . />
    

    다음은 Activity에서 dao(applicationContext.xml 에 'biz-dao' 선언)를 가져오는 예제 코드입니다.

    public class UsingDaoActivity extends GlueActivity<GlueContext>
    {
        @Override
        public String runActivity( GlueContext ctx )
        {
            GlueGenericDao dao = this.getDao("biz-dao");
    
            // dao 사용 
            /*
            dao.find(. . .);
            dao.insert(. . .);
            dao.update(. . .);
            dao.delete(. . .);
            */
    
            return GlueBizControlConstants.SUCCESS;
        }
    }
    

    다음은 Activity 정의에 dao 관련 property가 있는 경우의 예제 코드입니다.

    public class UsingDaoActivity extends GlueActivity<GlueContext>
    {
        @Override
        public String runActivity( GlueContext ctx )
        {
    /*
    <activity name="HelloActivity" class="sample.activity.UsingDaoActivity">
        <property name="dao" value="biz-dao"/>
        <transition name="success" value="end"/>
    </activity>
    */
            GlueGenericDao dao = this.getDao( this.getProperty("dao") );
    
            // dao 사용 
            /*
            dao.find(. . .);
            dao.insert(. . .);
            dao.update(. . .);
            dao.delete(. . .);
            */
    
            return GlueBizControlConstants.SUCCESS;
        }
    }