JAVA) JNDI DB 연결 소스코드
본문 바로가기
programming/Java

JAVA) JNDI DB 연결 소스코드

by 코딩하는 핑가 2021. 1. 6.
반응형

* 이 포스팅은 kslee7746.tistory.com/님과 all-record.tistory.com/님의 포스팅을 학습한 뒤 추가로 공부한 후 재정리한 글입니다.

* 2차 가공 및 재배포를 금지합니다.

* 오탈자 및 잘못된 내용은 댓글달아주세요.

 

[참고글]

JDBC 동작 순서 및 SQL 전송에서 Statement, PreparedStatement 차이점 ( 소스코드 포함 )

JDBC, DBCP, JNDI 차이점

1. JNDI 정의 및 동작 순서

* JNDI ( Java Naming and Directory Interface )

- 디렉터리 서비스에서 제공하는 데이터 및 객체를 발견하고 참고(lookup)하기 위한 자바 API

- 즉, 외부에 있는 객체를 가져오기 위한 기술

- Tomcat과 같은 WAS를 보면 특정 폴더에 필요한 데이터 소스(라이브러리)가 있는데 그것을 우리가 사용하기 위해 JNDI를 이용해서 가져오는 것

 

* 구성

출처 : https://all-record.tistory.com/104

1. 사용자가 요청을 한다.

2. 요청은 Control을 거쳐 Model로 전달된다.

3. Model로 넘어간 요청은 JNDI에 등록된 데이터베이스 객체(Type:DataSource)를 검색한다.

4. JNDI를 통해 찾은 객체로부터 커넥션을 획득한다.

5. 데이터베이스 작업이 끝난 후 획득한 커넥션을 반납한다.

2. JNDI 소스코드

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*,java.io.*"%>
<%@ page import="javax.naming.Context"%>
<%@ page import="javax.naming.InitialContext"%>
<%@ page import="javax.naming.Context"%>
<%@ page import="javax.naming.NamingException"%>
<%@ page import="javax.sql.DataSource"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MS-DataSource TEST</title>
</head>
<body>
<%
	// JNDI부터 DataSource 얻기
	Context ctx = new InitialContext();
	DataSource ds = (DataSource) ctx.lookup("DataSource 이름");
	String sql = "SELECT * FROM TEST";

	Connection conn = null;
	Statement stmt = null; // DB와 소통하는 통로
	ResultSet rs = null; // 결과받아서 처리할 때

	try {
		conn = ds.getConnection(); // DataSource와 DB연결해서 명령객체 가지고 옴
		stmt = conn.createStatement();
		rs = stmt.executeQuery(sql); // 쿼리 실행 후 데이터들이 rs 저장

		while (rs.next()) { // 한 건 씩 처리
			int id = rs.getInt(1); // 첫번째 컬럼 조회
			String name = rs.getString("name"); // 컬럼 이름 지정 가능
			System.out.println(id + "\t" + name);
		}

	} catch (SQLException e) {
		System.out.println("DB 연결 실패");
		e.printStackTrace();
			
	} finally {
		try {
			if (rs != null)
				rs.close();
			if (stmt != null)
				stmt.close();
			if (conn != null)
				conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
%>
</body>
</html>

2-1 소스코드 설명

* Context ctx = new InitialContext();

- InitialContext()는 웹 애플리케이션이 처음 배치될 때 설정되고, 모든 설정된 엔트리와 자원은 JNDI namespace의 java:comp/env 부분에 놓이게 됨

 

* 참고

- JDBC catch에서 작성한 아래 소스코드는 JDBC로 DB 정보 가져올 때 DriverName 일치 여부를 확인하는 것

- 그래서 Datasource로 lookup을 하는 JNDI에서는 필요없음

catch (ClassNotFoundException e) {			
}

 

- 예외처리는 학습이 더 필요함

 

 

반응형

댓글