[java] JDBC, DBCP, JNDI

Nux·2022년 8월 9일
0
post-thumbnail

230325 수정

JDBC

  • Java Database Connectivity
  • DB조작을 위한 표준SQL 인터페이스 API
  • 요청이 있을 때마다 매번 DB에 연결
    • 요청 시마다 요청 - 드라이버로드 - 커넥션 객체생성 - 연결 - 종료 과정을 거치며 서버 자원 낭비 발생
  • 데이터베이스 커넥션 인터페이스

소스예제(자바)

	public static void main(String[] args) {
		String ip		= "ip";
		int port		= 포트;
		String database	= "DB명";
		String user		= "USER명";
		String password = "비밀번호";
		

		String DRIVER_NAME = "DB DRIVER_NAME";
		String JDBC_URL = "jdbc:해당 DB:thin:@" + ip + ":" + port + ":" + database;
		String sql = "SELECT * FROM TEST";
		
		Connection conn = null;
		Statement stmt 	= null;
		ResultSet rs	= null;
		
		try {
			Class.forName(DRIVER_NAME);
			conn = DriverManager.getConnection(JDBC_URL, user, password);
			stmt = conn.createStatement();
			rs = stmt.executeQuery(sql);
			
			while(rs.next()) {
				int id = rs.getInt(1);
				String name = rs.getString("컬럼이름");
			}	
			
		} ... (이하 생략) ...

Connection Pool

  • ConnectionPool에 Connection을 미리 생성해놓고 필요할 때마다 사용하고 반환하는 형식으로 자원 낭비를 줄임

Datasource

  • ConnectionPool관리를 위한 객체
    • Connection 제공, 반환 등의 작업 구현 가능

설정

  • context-datasource.xml
<!-- datasource 설정(propertyConfigurer 활용) -->
<alias name="dataSource-${Globals.DbType}" alias="dataSource" />
<!-- alias name에 oracle-dbcp, oracle-jndi, mysql-dbcp, mysql-jndi 기입  -->
  • DBCP
	<!-- Oracle DBCP -->
    <bean id="dataSource-oracle-dbcp" class="org.apache.commons.dbcp.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}"/>
        <property name="maxActive" value="150"/>
		<property name="maxWait" value="15000"/>
		<property name="validationQuery" value="select 1 from dual"/>
		<property name="testWhileIdle" value="true"/>
		<property name="testOnBorrow" value="true"/>
		<!-- 밀리세컨드 단위 interval -->
		<property name="timeBetweenEvictionRunsMillis" value="300000"/>
    </bean>
  • JNDI
    <!-- Oracle JNDI -->
    <bean id="dataSource-oracle-jndi" class="org.springframework.jndi.JndiObjectFactoryBean">
    	<property name="jndiName" value="java:"/>
	</bean>

DBCP

  • DataBaseConnectionPool
  • 아파치에서 만든 컨넥션 풀 오픈소스 라이브러리
  • 요청에 따라 pool에서 connection객체를 가져다 쓰고 반환
  • DB커넥션풀을 어플리케이션 소스단에 설정

예제

빈 설정

    <bean id="dataSource-mysql"
        class="org.apache.commons.dbcp.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}"/>
        <property name="maxActive" value="${Globals.maxActive}"/>
        <property name="maxIdle" value="${Globals.maxIdle}"/>
        <property name="maxWait" value="${Globals.maxWait}"/>
    </bean>

pom.xml

<dependency>
    <groupId>commons-dbcp</groupId>
    <artifactId>commons-dbcp</artifactId>
    <version>1.4</version>
</dependency>

JNDI

  • Java Naming and Directory Interface
  • Connection Pool을 WAS단에 설정
  • DB에 직접 Connection요청이 아닌, JNDI lookup을 통해 DB객체를 획득하고 연결 요청

예제

pom.xml

<dependency>
	<groupId>org.apache.tomcat</groupId>
	<artifactId>tomcat-jdbc</artifactId>
	<version>8.5.68</version>
</dependency>

server.xml

  • 사용하는 WAS서버 내 설정파일 수정
<Resource name="jdbc/test"
	auth="Container"
	type="javax.sql.DataSource"
	driverClassName="org.mariadb.jdbc.Driver"
	url="jdbc:mariadb://localhost:3306/test"
	username="root"
	password="password"
	initialSize="20"
	maxTotal="100"
	maxIdle="100"
	minIdle="20"
	maxWaitMillis="30000"
/>

다시 짚고 넘어가는 was
1.Web Application Server
2.동적인 컨텐츠를 제공하기 위해 만들어진 Application Server

JDBC vs DBCP

  1. JDBC는 자바에서 제공하는 API
  2. DBCP는 DB커넥션 방법론
  • JDBC는 JAVA와 DB를 연결하게 해주며, DBCP는 JDBC를 이용해 생성한 Connection을 관리하는 기법

참고
https://inpa.tistory.com/entry/DB-%F0%9F%93%9A-JDBC-DBCP-JNDI-%EC%A0%95%EB%A6%AC
https://xzio.tistory.com/1875

0개의 댓글