관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

데이터베이스와 JDBC 1 - 데이터베이스 개요 및 JDBC를 이용한 데이터 조작하기 1 본문

웹 · 앱 개발/JSP & Servlet

데이터베이스와 JDBC 1 - 데이터베이스 개요 및 JDBC를 이용한 데이터 조작하기 1

huenuri 2024. 12. 14. 20:48

자바에서 JDBC 공부를 다 마쳤지만 이번에는 JSP/서블릿으로 JDBC 공부를 이어가 보려고 한다. 오늘까지 이 단원 학습을 다 마치고 월요일 새벽까지 JSP 나머지 학습을 끝내야 한다. 그래야 12월 안에 웹 개발 공부를 마칠 테니까. 그리고 게임 개발 공부를 시작하기 전에 두 개의 프로젝트를 완성할 예정이다.

그럼 공부를 시작해보자.


 

 

 

 

데이터베이스 개요 및 오라클 DB 환경 구축하기

앞부분은 대부분 아는 내용이고 자바에서 공부했던 내용이 중복되므로 생략하겠다.

 

오라클에서 제공되는 계정은 크게 두 가지로 나뉜다. 시스템 권한을 가진 사용자인 DBA용 계정(SYS, SYSTEM)과 교육용 계정(HR)이다. 데이터베이스 사용자는 오라클 계정이라는 용어와 같은 의미로 사용된다. 오라클을 설치하면 한 개 이상의 데이터베이스 권한을 갖는 디폴트(기본) 사용자가 존재한다. 오라클에서 제공되는 사용자 계정은 다음과 같다.

계정 유형 설명 용도 및 특징 예시 계정
SYS - 데이터베이스의 최상위 관리자 계정
- 데이터 사전(Data Dictionary)을 포함한 모든 데이터베이스 구조를 관리
- 오라클 데이터베이스 설치 시 자동 생성
- 데이터베이스를 시작하거나 종료
- 데이터 사전 및 시스템 객체 관리
- 모든 권한 부여 가능
- SYS 계정으로 생성된 객체는 SYSTEM 테이블스페이스에 저장
SYSDBA 또는 SYSOPER 권한과 함께 사용
예: SYS as SYSDBA
SYSTEM - 데이터베이스 관리자 계정
- 데이터베이스 설치 시 자동 생성됨
- SYS 계정을 보조하여 사용자와 권한을 관리
- 일반 DBA 작업 수행
- 데이터베이스 사용자 생성 및 권한 부여
- 시스템 성능 관리 및 모니터링
SYSTEM 계정
일반 사용자 계정 - 데이터베이스 사용자가 생성한 계정
- 업무에 필요한 데이터를 관리 및 조회
- 애플리케이션 데이터 저장
- 데이터 조회 및 수정
- DBA가 생성하고 관리
예: SCOTT, HR, SH (기본 샘플 계정) 

 

 

디폴트 사용자 중에서 SYS와 SYSTEM은 DBA 권한을 가진 사용자로서 다른 모든 사용자에 대한 정보를 조회할 수 있다. DBA 권한을 가진 관리자는 사용자를 생성하거나 삭제, 변경 등의 시스템 권한을 가지고 있다. SYS 또한 SYSTEM은 오라클을 처음 설치하자마자 디폴트로 생성되고 활성화되어 있는 사용자 계정이다.

 

SQL 관련 파트도 대부분 아는 내용이라 따로 정리할 필요가 없었다. JDBC 단원도 대부분 아는 내용이라 한 30분은 책을 떠들어보며 정리할지 말지 고민을 많이 했다.

그래도 다 아는 내용은 아니니 복습도 할 겸 이 내용은 정리해 보겠다.


 

 

 

 

JDBC를 이용한 데이터 조작하기

이제 자바 프로그램에서 데이터베이스를 사용하는 방법을 학습해 보기로 하자. 서론 부분은 생략하고 JDBC를 만드는 내용부터 학습 내용을 정리해 보겠다.

JDBC를 이용해서 데이터베이스에 연결하는 방법은 4단계를 거쳐 진행된다. 이 과정에서 데이터베이스와 통신을 위한 연결을 확립하고 SQL문을 수행하고 다시 데이터베이스와 연결을 끊는 작업을 한다. 

 

 

 

첫 번째 살펴볼 예제에서는 select 문을 이용해서 데이터베이스 내에 저장된 데이터를 출력해 보도록 하겠다. 이를 위해서는 다음과 같은 절차를 수행해야 한다. 각 단계 별로 사용되는 인터베이스 혹은 클래스를 살펴보면 다음과 같다.

 

 

 

 

각 단계를 진행하기 위해서는 JDBC에서 제공해 주는 클래스를 사용해야 한다. JDBC 클래스는 java.sql 패키지에 포함되어 있다. 그렇기 때문에 JDBC에서 사용하는 클래스와 인터페이스를 활용하려면 java.sql 패키지를 반드시 임포트해야 한다.

 

데이터베이스 연결과 관련된 인터페이스는 Connection이고 질의, 갱신은 Statement이며 결과물을 가져오는 인터페이스는 ResultSet이다. 

참고로 자바에서 객체를 얻기 위한 방법으로 클래스를 사용하여 new 연산자로 직접 생성한다. 하지만 개발자가 직접 객체를 생성하지 않고 자바에서 제공해주는 API를 통해서 객체를 생성하는 경우도 빈번히 발생한다. 이렇게 얻어진 객체는 클래스로 선언된 변수에 저장해 두지 않고 인터페이스로 선언한 변수에 넣고 사용한다.


 

 

 

 

데이터베이스와 연결하기

데이터베이스와 연결하기 위해서는 두 가지 과정이 필요하다. 먼저 사용할 JDBC 드라이버를 프로그램 시작할 때 로딩해야 한다. 그런 후에 DriverManager 클래스를 이용하여 데이터베이스에 접속한다.

자바에서 JDBC와 데이터베이스를 연결하기 위한 JDBC 드라이버는 데이터베이스 제작 업체에서 제공한다. 오라클에서 JDBC 드라이버를 얻어와 JAVA 환경에 설치해야만 JDBC 드라이버를 사용할 수 있다.


 

 

[직접 해보기] JDBC 드라이버 연결하기

 

1. JDBC 드라이버 디렉터리에서 얻어오기

 

 

 

2. jar 파일 lib 폴더에 복사하기


 

 

 

JDBC 드라이버를 로드하면 OracleDriver란 객체가 생성된다. 다음과 같이 Class 클래스로 JDBC 드라이버를 로드한다.

 

java.lang.Class 클래스의 정적 메서드인 forName()은 패키지 명을 기술한 후 클래스 이름을 문자열 형태로 지정해 주면 이를 자바 가상 기계에 안으로 읽어 들이도록 한다.

이렇게 Class.forName() 메서드에 드라이버 클래스 이름을 지정하면 JCBC 드라이버가 로드되어 DriverManager에 등록된다. 그러므로 프로그램 내에 DriverManager 클래스를 이용해서 데이터베이스와 연결이 가능하다.

 

드라이브가 로드되어 DirverManager에 등록된다는 건 어떤 의미일까? 일반적으로 매니저라고 하면 관리자를 의미한다. 자바에도 드라이버 매니저라고 드라이버만 관리하는 객체가 있는데 이 객체에 오라클 드라이버(oracle.jdbc.driver.OracleDriver)를 등록해 놓는 것이다. 그러면 이 드라이버 매니저에 등록된 오라클 드라이버에 의해서 오라클에 접속할 수 있게 된다.

 

Class.forName() 메서드를 이용하여 JDBC 드라이버를 로딩한 후에는 데이터베이스에 연결해야 한다. Connection 객체는 데이터베이스에 견결해 작업을 수행할 수 있도록 만들어 주는 중요한 객체인데 이를 위해서는 DriverManager 클래스의 static 메서드인 getConnection()을 호출해야 한다.

Connction은 인터페이스이기 때문에 일반적인 객체 생성처럼 new 연산자를 사용하지 않고 다른 객체의 메서드로부터 객체를 얻어온다. getConnection() 메서드를 호출하기 위해서는 매개 변수 값으로 url, uid, pwd가 사용된다.

 

 

 

Connection으로 선언한 객체 변수 con은 실제로 데이터베이스와 연결되어 작업을 수행할 수 있는 통로로 작용하는 중요한 객체 변수로 사용된다. getConnection() 메서드의 개개변수로 위의 3가지를 지정해야 한다.

 

 

위 예는 jdbc 드라이버 중에서 오라클에 연결하기 위해 사용하는 것이다.

 

 

"jdbc:oracle:thin:@localhost:1521:XE";

 

여기서 localhost는 오라클 서버가 작동하고 있는 컴퓨터의 IP를 입력하는 것이다. 콜론 다음에 입력한 1521은 포트 번호이다. 오라클을 설치할 때 일반적인 방식으로 설치했다면 1521이다. XE는 오라클 서버의 전역 데이터베이스 이름이다. 오라클 익스프레션 버전을 설치했다면 XE이다.


 

 

오라클에 접속할 때 사용한 ID와 암호를 각각 지정한다. 다음은 Connection 객체를 얻는 예이다.

Connection conn = DriverManager.getConnection(
	"jdbc:oracle:thin:@localhost:1521:XE", // 사용자의 url
    	"scott",				// 사용자의 아이디
    	"tiger");				// 사용자의 암호

 

DriverManager 클래스의 getConnection() 메서드는 데이터베이스와의 연결에 성공하년 내부적으로 COnnection 객체를 생성하여 데이터베이스와 연결이 이루어지도록 한다. 이렇게 생성된 Connection 객체는 conn이라는 Connection 객체를 변수로 접근할 수 있도록 하기 위해 getConnection() 메서드의 결과값을 conn에 대답한다.

 

사용이 끝났으면 데이터베이스와의 연결을 끊어야 하는데 이때 사용하는 메서드가 close()이다.

conn.close();

 

 

 

 

학습을 마치고

JSP로 JDBC 공부를 하기 시작했는데 정말 하기 싫은 것을 억지로 하고 있는 중이다. 대충 실습 위주로 공부하고 이 단원을 마치고 싶다. 매일 공부를 하는 게 힘이 든다.

다음날 아침에 어제 대충 기록했던 부분을 추가 기록해보았다. 그래도 해야 할 일을 잘 마쳐야 하니까.