Spring 과 DB

Spring Framework 2016. 4. 4. 09:16

Spring의 데이터 접근 방식


Spring에서의 JDBC 프로그래밍


- 데이터 접근 템플릿 제공 : JDBC 프로그래밍을 쉽게 할 수 있는 템플릿

- DAO 지원 클래스 제공 : Template을 쉽게 사용할 수 있도록 지원하는 class



데이터 접근 템플릿


- 템플릿 메소드(template method) 패턴

템플릿 메소드는 프로세스에 대한 틀(skeleton)을 정의함.

전반적인 프로세스(의 흐름)는 고정되어 있고, 변하지 않음.

특정 시점의 프로세스는 특정 상황에 따라 세부적인 구현 내용이 달라짐.


- Spring의 데이터 접근은 템플릿 메소드 패턴을 적용

데이터 접근 단계에서 연결을 얻고, 자원을 해제하는 부분은 고정

데이터 접근 방법은 각각 다름.


- 두가지 클래스

템플릿(template) : 프로세스의 고정된 부분을 담당



데이터 접근 템플릿화


Spring의 템플릿 클래스




DAO 지원 클래스 사용

- Spring의 DAO 지원 클래스

어플리케이션에 대한 DAO 구현시 Spring의 DAO 지원 클래스를 상속받음.

- 내부의 데이터 접근 템플릿에 바로 접근하려면 템플릿 조회 메소드를 호출

- JdbcDaoSupport 클래스를 상속받고, getJdbcTemplate()을 호출해서 작업 수행


저장 플랫폼을 접근하려면 DB와 통신하기 위해 사용되는 클래스를 접근함.

- JdbcDaoSupport의 getConnection() 메소드





데이터 소스 설정 : JNDI 데이터 소스 사용

JNDI 데이터 소스 사용  

Spring 어플리케이션이 JEE 어플리케이션 서버 내에 배포될 때 사용


장점

어플리케이션 외부에 전적으로 관리를 맡김.

어플리케이션 서버는 우수한 성능으로 데이터 소스를 관리하고 시스템 관리자는 데이터 소스를 제어할 수 있음.


JndiObjectFactoryBean 이용


<bean id="dataSource"

           class="org.springframework.jndi.JndiObjectFactoryBean" scope="singleton">

   <property name="jndiName" value="/jdbc/oracle"/>

   <property name="resourceRef" value="true"/>

</bean>


jndiName 속성은 JNDI에서 자원의 이름을 지정

어플리케이션이 자바 어플리케이션 서버 내에서 구동하면 resourceRef 값을 true로 세팅

- 원래의 jndiName 값에 ‘java:comp/env’ 가 붙음.

- ‘java:/comp/env/jdbc/oracle’


JNDI 데이터 소스 사용 - 2
Spring 2.0 이상에서의 JNDI 데이터 소스
Spring 설정파일에 jee 네임스페이스 등록하여 처리

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:jee="http://www.springframework.org/schema/jee"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
      http://www.springframework.org/schema/jee
      http://www.springframework.org/schema/jee/spring-jee-2.0.xsd">
     <jee:jndi-lookup id="dataSource" 
        jndi-name="/jdbc/oracle" 
        resource-ref="true"/>
</beans>


DBCP 사용

Spring이 기본으로 제공하는 DBCP 사용 할 수 있다.

Jakarta Commons Database Connection Pools (DBCP)

http://commons.apache.org/dbcp/

BasicDataSource 사용

DataSource를 bean으로 등록한다.


<bean id="dataSource"

   class="org.apache.commons.dbcp.BasicDataSource">

   <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>

   <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521/XE"/>

   <property name="username" value=“hr"/>

   <property name="password" value=“tiger"/>

   <property name="initialSize" value="5"/>

   <property name="maxActive" value="10"/>

</bean>


설정항목 

http://commons.apache.org/dbcp/configuration.html 참고




JDBC 드라이버 기반한 데이터 소스

DriverManagerDataSource

요청된 연결에 대해서 매번 새로운 연결을 제공.

DBCP의 BasicDataSource와 달리 DriverManagerDataSource에 의해 제공되는 연결은 풀링되지 않음.

SingleConnectionDataSource

요청된 연결에 대해서 매번 동일한 연결을 제공.

정확하게 풀링된 데이터 소스는 아니지만, 단 하나의 연결을 풀링하는 데이터 소스라고 보면 됨.



<bean id="dataSource"

   class="org.springframework.jdbc.datasource.DriverManagerDataSource">

   <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>

   <property name="url" value=" jdbc:oracle:thin:@127.0.0.1:1521/XE "/>

   <property name="username" value="sa"/>

   <property name="password" value=""/>

</bean>



멀티쓰레드 환경에서 사용이 제약됨.











Posted by netyhobby
,