[Spring.4-3] Data Access Layer

Data Access Layer Data Access Layer

정의

비즈니스 레이어에서 비즈니스 로직을 제외한, 순수데이터베이스 관련 로직을 기능 컴포넌트로 뺀 레이어.
Request로부터의 조건에 따라 Data Access를 수행하며, 그 결과를 비즈니스 레이어로 반환한다.
DAO(Data Access Object)를 구성하는 기준으로는 테이블을 기준으로 오브젝트를 구성할 수도 있고, 비즈니스 기능별로 구성할 수도 있다.

속성/특성

데이터베이스에 접근하는 ‘datasource’ 객체와 datasource를 이용해서 DAO 구성을 용이하게 해주는 JDBC, JPA, Hibernate, Mybatis 등의 도구가 필요하다.

1. Datasource

datasource 객체는 DB properties가 담겨있는 객체이다.
datasource 객체는 Factory의 개념이고, 인스턴스 객체를 생성하여 논리적 접속 상태를 만든 후 그 객체로부터 실제 물리적 접속 상태인 connection객체를 받아 사용한다.
또한, Connection pooling을 구현한 datasource object는 겉으로는 일반 connection과 동일하게 사용하나 내부적으로는 실제 물리적 접속이 아닌 PooledConnection object 객체를 받아 사용 후 다시 Connection pool에 반환한다. datasource object에는 4가지 정보: driverClassName, 데이터베이스 주소, username, password 가 필요하다.

1) dbcp(org.apache.commons.dbcp.BasicDataSource) 사용.

2) WAS에 datasource 정의 및 사용

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName">
        <value>java:comp/env/jdbc/testdb</value>
    </property>
</bean>


2. DAO 구성 Framework

Java에서 제공하는 데이터베이스 접근 Api인 JDBC와 Hibernate, Mybatis, JPA 등의 외부 Framework이 재하는데 이것들은 Spring과의 연계를 위한 Spring-JDBC, Hibernate-Spring, Mybatis-Spring등을 지원한다.
Framework을 사용하면 좀 더 편하게 DAO를 구현할 수 있고 각 Framework 별로 성격이 다르기 때문에 특성에 맞는 것을 선택해서 사용한다.

기타

Spring 연계 JDBC/JPA/MyBatis 등을 사용하면 좋은 점은
1) Connection 관리를 해준다.
2) Spring Transaction을 지원한다.
Spring Transaction 설정에 맞게 connection을 open/rollback/commit/close 해준다.
3) Spring 범용 exception을 지원한다.
Database에 따라 다양한 error code를 Spring 범용 exception code로 바꿔 DB에 독립적인 exception처리가 가능하게 한다.