우리네 장

[ Spring ] DB Connection에 대하여... 본문

SpringFramework

[ Spring ] DB Connection에 대하여...

qpmi1zm29 2021. 7. 11. 21:53

* Connection 

: 어플리케이션과 데이터베이스가 네트워크 상에서 연결되는 것을 의미한다.

 

* connection pool 

: connection 객체를 맺고 끊을 때 많은 비용이 요구되기 때문에, 어플리케이션을 실행하고 나서 connection을 맺는 것이 아니라 서버에서 미리 connection 객체들을 만들어 놓고 준비해 놓는것.

 

* datasource 

: application 단에서 connection pool을 관리하기 위한 용도로 사용되는 인터페이스 

connection을 가져와서 사용하거나 다시 반납하는 등의 작업을 한다. 

 

[ jdbc / dbcp / jndi ]

 

1) jdbc 

자바에서 dbms에 따라 유동적으로 데이터베이스 연결을 도와주는 드라이버 

보통 jdbc는 앱 상에서 connection을 맺고 끊는다는 인식이 있어 그러한 방법론을 지칭하기도 한다.

그러나 데이터베이스 연결에 꼭 있어야 하는 드라이버

 

2) dbcp 

connection pool을 이용하는 방식이다.

dbcp는 jndi랑 다르게 어플리케이션 마다 connection pool이 존재한다. ( app단에서 connection pool을 관리한다. )

그래서 만약 한 서버에 여러 어플리케이션이 존재할 때 dbcp를 사용하면 자원이 많이 든다. 

( 그만큼 connection pool을 생성하기 때문이다. )

 

spring에서는 datasource 설정파일에 

 <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${Globals.DriverClassName}"/>
        <property name="url" value="${Globals.Url}" />
        <property name="username" value="${Globals.UserName}"/>
        <property name="password" value="${Globals.Password}"/>
    </bean>

 

<bean id="dataSource-postgres" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
     <constructor-arg ref="postgresdbConfig"/>
 </bean>

dbcp를 지원하는 datasource interface는 종류가 여러가지 이다.

스프링부트 2.0 부터는 히카리가 디폴트라고 한다. 

 

3) jndi

네이밍 = 이름을 이용하는 방법이다.

connection pool이 서버마다 존재해서 공유 객체 처럼 여러 어플리케이션에서 공유하여 사용한다. ( static 객체 )

( 한 서버에 여러 어플리케이션을 서비스 해도 자원이 많이 들지 않는다 . )

데이터베이스 설정을 WAS 설정파일에서 한다. 

 server.xml / context.xml

 

 

################# 로컬에서 사용하는 JNDI name과 실제 운영 서버에 설정되어 있는 JNDI name은 같을 것이라고 추정 -------> 이를 사용하는 설정 파일이 동일한 코드이기 때문이다. ####################################

 

 

 JNDI 참고 


The InitialContext is configured as a web application is initially deployed, and is made available to web application components (for read-only access). All configured entries and resources are placed in the java:comp/env portion of the JNDI namespace

[ java:comp/env에 대한 설명 ]

----------------> jndi 사용시 datasource이름 앞에 무조건 붙어야 하는 접두사이며 , 관련 엔티티 들이 존재하는 dafault directory라고 생각하면 된다. ( C:/users/documents  이런 느낌 )

JNDI의 name space = java:comp/env/**

 

jndi는 단순히 데이터 베이스 연결에서만 사용하는 기능이 아니다!!

JNDI가 데이터 베이스에 국한된 리소스를 의미하는 것이 아니었다!!!