JDBC 4편 - Spring JDBC

Dev StoryTeller·2020년 12월 13일
0

Spring에서의 JDBC도 동일하다. 다만 좀 더 사용하기 간편해졌을 뿐이다.
Bean과 커넥트 풀이 만나 데이터 소스 관리가 더욱 편해졌고,
CRUD 작업도 좀 더 편하게 할 수 있는 기능이 존재한다.
자세히 알아보자.

1. Spring JDBC 모듈

Spring에서 지원하는 JDBC는 여러가지가 있지만, 다음 2가지만 알아볼 것이다.

  • DataSource
  • jdbcTemplate

JDBC에서 빠져선 안될 2가지 클래스들이다.
들어가기 전에 우선 커넥션 풀(Connection Pool)부터 알아보자.


1-1. DBCP(Connection Pool)이란?

커넥션 풀이란, DB 연결의 재사용성을 높이는 편리한 기법이다.
.
.
.
앞에서 우리는 Connection 객체를 생성하는 메소드를 만들었다.
사용할 때는 직접 가져오고, 다 썼다면 close()로 반납하면 된다.

그러나 이 작업은 매번 새로운 DB 연결을 만든다.
매번 드라이버를 로드하고, url로 연결 정보를 가지고 연결하고...어차피 동일한 DB로 연결할 건데, 매우 비효율적이다.


이럴때 커넥션 풀이 등장한다.
(출처: 제타위키)
위 그림의 Connection Pool안에 있는 것이 커넥션들이다.
저렇게 Pool 안에다 커넥션을 미리 여러개 생성해뒀다가
요청이 들어오면 자신의 커넥션을 내준다.

커넥션을 재사용할 때도 다시 연결할 필요가 없다.
Pool에 있는 커넥션을 다시 가져다 사용하면 된다.

이렇게 되면 매번 새로 연결할 필요가 없으므로, 매우 효율적인 DB 작업이 가능하다.


1-2. 커넥션을 이용하는 방법?

그렇다면 커넥션 풀에서 어떻게 커넥션을 가져오지? 반납은 어떻게 할까?
라는 걱정은 스프링에선 할 필요가 없다.
왜냐하면 알아서 다 해주기 때문이다.
.
.
.
스프링의 IoC/DI 특징 덕분에 우리가 할 일은 거의 없다.
다음 2가지만 해주면 된다.

  1. 이전처럼 Connection을 가져오는 메소드를 작성한다.
  2. Bean으로 등록한다.

단, 스프링은 Connection을 직접 가져오는 것이 아니기 때문에, DataSource라는 클래스를 사용한다.


2-1. DataSource 클래스

왜 이전이랑 똑같은데 Connection이 아니라 DataSource를 쓸까?
우선 둘의 차이점을 이해할 필요가 있다.
Connection은 써봤다시피, DB와 직접적으로 연결한다.
때문에 close()하게되면 DB 연결이 끊기고, 다시 getConnection하면 새로운 연결이 만들어진다.

반면에 DataSource간접적인 연결이다.
DataSource를 작성하여 Bean으로 등록하면
커넥션 풀이 해당 정보로 DB와의 커넥션을 생성한다.
즉, 우리는 커넥션 풀이 만든 연결을 사용하는 것이다.
따라서 close()하더라도, DB와의 연결은 끊어지지 않는다.


3. DataSource 작성해보기

이 방법은 xml 설정 방식과 class 설정 방식이 있다.
어떤 것을 택하든 개인의 취향이지만, 필자는
DB가 하나일 때는 xml을, DB가 여러개일 땐 class를 이용한다.
따라서 지금은 xml을 사용하도록 하겠다 : )


4. xml 방식

  • properties 작성
    : 해당 파일은 DB 연결 정보를 모아서 작성하는 파일이다.
    내용도 별로 없는데 그럴 필요가 있나 싶지만, 나중에
    연결 정보들이 많아지면 관리적 측면에서 훨 좋다.

    Mysql을 사용하므로 data-mysql.properties라고 하자.
<!-- data-mysql.properties -->
db.driverClass=com.mysql.cj.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/DB이름
db.username=root
db.password=root
  • xml 작성
    이 xml에는 datasource만이 담길 것이므로, datasource.xml이라고 파일을 하나 만들어주자.
<!-- datasource.xml -->
<context:property-placeholder location="classpath:프로퍼티 파일 경로"/>
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
        <property name="driverClass" value="${db.driverClass}" />
        <property name="url" value="${db.url}"/>
        <property name="username" value="${db.username}" />
        <property name="password" value="${db.password}" />
    </bean>

  • ROOT Context로 등록
    : 위 xml은 DB 관련 설정 파일이다.
    때문에 ROOT 컨텍스트에 등록되야 한다.
    따라서 web.xml에 다음과 같이 적어주자.
<context-param>
	<param-name>ContextConfigLocation</param-name>
    	<param-value>
        	<!--xml 파일 경로-->
        </param-value>
</context-param>

이상으로 스프링 JDBC와 이를 사용하기 위한 DataSource 작성 방법을 알아보았다.

다음 편은 jdbcTemplate로, 어떻게 간편하게 DB 작업을 하는지 알아보도록 하자.

profile
개발을 이야기하는 개발자입니다.

0개의 댓글