본문 바로가기
DataBase/SQL

Eclipse 환경에서 JDBC연결하는 방법

by miming 2022. 2. 25.

(이클립스에 DynamicWebProject 생성방법은  Oracle SQL Developer_데이터 추가(이클립스) <- 이 포스팅에 정리되어 있으니 참고하시면 됩니다.

 

Oracle SQL Developer_데이터 추가(이클립스)

이 글을 보시기 전에 SQL_테이블 생성(cmd ,명령 프롬프트) SQL_테이블 생성(cmd ,명령 프롬프트) 데이터베이스를 사용하기 위해서는 테이블을 먼저 생성해야합니다. 테이블을 생성할 때는 CREATE TABLE

mimi-coding.tistory.com


JDBC란?

- JAVA DataBase Connectivity의 약자로 자바에서 DB프로그래밍을 하기 위해 사용되는 API

- java.sql패키지 (80%가 interface로 구현)=>DataBase와 연결하기 위한 Java Interface이다.

- 해당 인터페이스를 각 DBMS개발자들이 상속받아 구현하는 것을 드라이버라고 함

 

저는 Oracle DB를 설치했으므로, 이클립스에서 Oracle DB를 사용할 수 있는 방법을 소개하려고 합니다.

 

먼저 이클립스를 실행하고 Dynamic Web Project를 생성합니다.

저는 Project_8로 생성을 하였습니다.

그 다음 이클립스에 ojdbc6.jar 파일을 복사해서 붙여넣기 해야합니다.

 

ojdbc6.jar 파일의 위치부터 찾아볼까요?

아래 화면의 순서로 들어가서 찾아주세요!  경로--> C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib

 

저는 저장할때 위치를 따로 지정하지 않았기 때문에 C:\에 oraclexe가 저장되어 있습니다.

설치시 위치를 따로 지정하지 않으신 분들은 저랑 같은 위치에 있을 거에요!

 

jdbc를 찾아주세요!!

 

위의 순서대로 들어가서 ojdbc6.jar 를 복사한 후 생성한 프로젝트의 webapp폴더- WEB-INF폴더- lib폴더 안에 붙여넣어주면 아래의 화면처럼 들어간걸 확인 하실 수 있습니다.

이제 jsp파일을 하나 만들어 실제로 자바코드를 통해서 DB와 연동해보겠습니다.

아래의 화면처럼 webapp폴더에 jdbc.jsp폴더를 생성했습니다.

 

자 그럼 이제 연결할 수 있도록 코딩을 해보겠습니다.

 

<입력코드>

<%@page import="java.sql.*" %>//---->필수! import를 해야 JDBC연결 가능!

<%
Connection conn=null; //-->Connection: DB연결 권한/ 커넥션에 접근하기 위한 레퍼런스변수 선언만 해놓은 상태.

String driver="oracle.jdbc.driver.OracleDriver";//--->오라클을 사용하시는 분들은 이렇게 작성해주세요
String url="jdbc:oracle:thin:@localhost:1521:XE";
//--> 드라이버 레지스트리에 등록된 Oracle JDBC Driver의 명칭@Database가 설치된 PC:Database가 점유하고있는 포트번호:Database의 식별자

Boolean connect=false;//-->접속 확인용

try{   //--->데이터 베이스 연결하기
Class.forName(driver);//-->driver연결-DriverManager클래스한테 오라클 쓰겠다고 등록해 놓는거
conn=DriverManager.getConnection(url,"hr","****");//-->계정이랑 비밀번호 <객체생성>

connect=true;//-->접속 성공

conn.close();
}catch(Exception e){
connect=false;//-->접속실패
e.printStackTrace();
}
%>

 

입력까지 마친 후 실행을 해주면 아래처럼 연결이 성공한 결과를 확인 하실 수 있습니다.

그런데, 가만보니 입력한 코드에 내 계정의 아이디와 비밀번호 등 정보가 보이는게 좀 신경이 쓰입니다..!

보안이 너무 취약해보이죠 ㅜ_ㅜ

그래서 저는 제 정보가 코드상에 보이지 않도록 context.xml에 담아두고 가져다 쓰고 다 쓰면 반환하는 Connection pool(커넥션 풀) 방식으로 연결해보겠습니다.

 

일단 ①Project Explorer의 Servers -> context.xml 파일을 ②Project_8 -> src-> main -> webapp -> MEAT-INP폴더에 복사합니다.

1번
2번

 

③context.xml안의 내용을 싹 지우고 아래와 같이 입력합니다.

 

<입력코드>

<Context>
     <Resource name="jdbc/OracleDB

//--> "name"은 리소스를 구분하기 위한 이름 / context.xml의 이름과 web.xml의<res-ref-name>가 같아야한다
       auth="Container"
       driverClassName="oracle.jdbc.driver.OracleDriver"
       type="javax.sql.DataSource"
       url="jdbc:oracle:thin:@localhost:1521:XE"
       username="hr"
       password="****"
       maxActive="20"
       maxIdle="10"
       maxWait="-1"
/>
</Context>

④Project_8 -> src-> main -> webapp ->WEB-INF폴더 안의 web.xml에 내용 추가

web.xml경로

<입력코드>

 

<resource-ref>
   <description>Connection</description><!-- 선언 -->
   <res-ref-name>jdbc/OracleDB</res-ref-name>

<!-- jdbcTest2.jsp의DataSource ds랑 context.xml 의 이름과 같아야한다-->
   <res-type>javax.sql.DataSource</res-type>
   <res-auth>Container</res-auth>
  </resource-ref>

4번

 

⑤ jsp파일을 하나 더 생성해줍니다. 

 

<입력코드>

<%@page import="java.sql.*" %>
<%@page import="javax.sql.*" %>
<%@page import="javax.naming.*" %>
<%
Connection conn=null;
try{
Context init = new InitialContext(); 
//-->context.xml파일에 있는 정보를 읽어오기위한 객체 생성( **JNDI를 이용할 수 있도록)
DataSource ds = (DataSource) init.lookup("java:comp/env/jdbc/OracleDB");
//-->jdbc/OracleDB랑  context.xml 의 이름과 web.xml의<res-ref-name>이 같아야한다
//--> lookup(): 등록된 naming 서비스로부터 자원을 찾고자할 때 사용하는 메서드
//("jdbc/OracleDB") :JNDI 서비스에 접근하기 위한 기본 이름(해당 자원을 찾겠다.)
conn = ds.getConnection();
 //-->source로 부터 Connection 객체를 획득한다. /이 객체는 이제 Container의 DBCP에 의해 관리된다.


out.println("<h3>연결 되었습니다.</h3>");
}catch(Exception e){
out.println("<h3>연결에 실패하였습니다.</h3>");
e.printStackTrace();
}
%>

 

**

JNDI (Java Naming and Directory Interface)란?

디렉터리 서비스에서 제공하는 데이터 및 객체를 발견(discover)하고 참고(lookup) 하기 위한 자바 API다.
연결하고 싶은 데이터베이스의 DB Pool을 미리 Naming 시켜주는 방법 중 하나이다.

운영, 관리, 최적화 문제 대처에 다양한 이점이 있기 때문에 JNDI를 사용하며,

우리가 저장해놓은 WAS 의 데이터베이스 정보에 JNDI를 설정해 놓으면 웹 애플리케이션은 JNDI만 호출하면 간단해진다.

 

위의 과정을 마친 후 실행을 하면 아래 화면처럼 연결이 성공한 결과를 확인 하실 수 있습니다.

이렇게 Connection pool(커넥션 풀) 방식은 보안에 좋고, 내가 원하는 걸 가져다 쓰고 다 쓰면 반환하는 방식으로 속도가 빠르다는 장점이 있습니다. --->DBCP(DataBase ConnectionPool)

<정리>

- JDBC를 통하여 DB에 연결하기 위해서는 드라이버(Driver)를 로드하고 커넥션(connection) 객체를 받아와야 한다.
- JDBC를 사용하면 사용자가 요청을 할 때마다 매번 드라이버를 로드하고 커넥션 객체를 생성하여 연결하고 종료하기 때문에 매우 비효율적이다.
- 이런 문제를 해결하기 위해서 커넥션풀(DBCP)를 사용한다.

- DBCP란 DataBase와 Connection을 맺고 있는 객체를 관리하기 위한 Connection Pool이다.

 

오늘은 이렇게 Eclipse 환경에서 JDBC연결하는 방법을 공부해보았습니다.

다음 포스팅에서는 커넥션풀을 활용하여 직접 테이블에 데이터 추가, 삭제 등을 하는 작업을 올려보겠습니다.

 

앞으로 더 분발하는 miming이 되겠습니다~!^0^

감사합니다.