* 이 포스팅은 kslee7746.tistory.com/님과 all-record.tistory.com/님의 포스팅을 학습한 뒤 추가로 공부한 후 재정리한 글입니다.
* 2차 가공 및 재배포를 금지합니다.
* 오탈자 및 잘못된 내용은 댓글달아주세요.
[참고글]
JDBC 동작 순서 및 SQL 전송에서 Statement, PreparedStatement 차이점 ( 소스코드 포함 )
1. JNDI 정의 및 동작 순서
* JNDI ( Java Naming and Directory Interface )
- 디렉터리 서비스에서 제공하는 데이터 및 객체를 발견하고 참고(lookup)하기 위한 자바 API
- 즉, 외부에 있는 객체를 가져오기 위한 기술
- Tomcat과 같은 WAS를 보면 특정 폴더에 필요한 데이터 소스(라이브러리)가 있는데 그것을 우리가 사용하기 위해 JNDI를 이용해서 가져오는 것
* 구성
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) {
}
- 예외처리는 학습이 더 필요함
'programming > Java' 카테고리의 다른 글
JAVA) MyBatis와 JPA의 차이 (1) | 2021.10.05 |
---|---|
JAVA) Object 클래스 - clone 메소드 (0) | 2021.01.25 |
JAVA) JDBC 동작 순서 및 DB 연결( 소스코드 포함 ) - 최종 (0) | 2021.01.06 |
JAVA) JDBC, DBCP, JNDI 차이점 (1) | 2020.12.31 |
JAVA) JDBC 동작 순서 및 SQL 전송에서 Statement, PreparedStatement 차이점 ( 소스코드 포함 ) (0) | 2020.12.31 |
댓글