우리네 장
[ Spring ] DB Connection에 대하여... 본문
* 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가 데이터 베이스에 국한된 리소스를 의미하는 것이 아니었다!!!
'SpringFramework' 카테고리의 다른 글
다양한 Logging 패키지 경로 (0) | 2024.01.08 |
---|---|
[ Spring ] HTTP Protocol GET/POST 방식 차이에 따른 Spring annotation 사용 (0) | 2022.04.19 |
[스프링] JSP에서 object를 가진 List를 ajax를 통해 Controller와 통신하는 방법 (0) | 2021.03.04 |
Spring 설정 파일 (.xml) 태그들 (0) | 2021.01.21 |
[Spring boot ]Spring Security 로그아웃이 안됄 때... (0) | 2020.12.28 |