관리 메뉴

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

JDBC 프로그래밍 4 - 자바의 JDBC 프로그래밍 1 : 데이터베이스 연결 설정 본문

프로그래밍 언어/자바

JDBC 프로그래밍 4 - 자바의 JDBC 프로그래밍 1 : 데이터베이스 연결 설정

huenuri 2024. 12. 14. 09:30

새벽에 MySQL로 테이블을 만들고 레코드를 생성하는 내용까지 학습했었다. 오후에 외출을 갔다와서는 갑자기 공부가 하고 싶지 않아 계속 놀다가 7시가 넘어 공부를 시작해본다. 아마 얼마 있지 않아 취침하게 될 것 같지만 하는데까지 해볼 것이다.

앞 절에서 MySQL의 명령행 도구를 이용하여 콘솔에서 데이터베이스를 생성하고, 데이터의 추가, 검색, 수정, 삭제 등을 실행하였다. 이제 자바로 데이터베이스를 조작하는 응용프로그램을 작성하는 방법을 알아보자. JDBC 프로그래밍이란JDBC API를 이용하여 데이터의 추가, 삭제, 수정, 검색 등을 할 수 있는 자바 응용프로그램을 작성하는 것이다.


 

 

 

 

데이터베이스 연결 설정

JDBC 프로그래밍의 가장 첫 번째 단계는 데이터베이스와의 연결이다. 데이터베이스와의 연결을 위해서는 우선 데이터베이스의 JDBC 드라이버의 로드가 이루어져야 한다.

 

1. MySQL 서버의 JDBC 드라이버 로드

JDBC 드라이버를 로드하기 위해 드라이버 클래스 파일을 로드한다. 다음과 같이 자바의 Class 클래스의 forName() 메소드를 이용하면 특정 클래스 파일을 읽어 들일 수 있다.

 

위의 코드는 MySQL의 JDBC 드라이버인 com.mysql.jdbc.Driver 클래스를 로드하여 드라이버 인스턴스를 생성하고 DriverManager에 등록한다. DriverManager 클래스는 [그림 16-3]에서의 JDBC 드라이버 매니저 역할을 하는 클래스이다. JDBC 드라이버의 클래스 이름은 사용하는 DBMS에 따라 다를 수 있으므로 해당 DBMS의 JDBC 드라이버 문서를 참조해야 한다. 만일 로드 중에 JDBC 드라이버가 없으면 ClassNotFoundException 발생하므로 반드시 try/catch 문을 사용한다.


 

 

 

 

2. 자바 응용프로그램과 JDBC의 연결

DriverManager는 자바 응용프로그램을 JDBC 드라이버에 연결시켜주는 클래스이다. 아래 코드와 같이DriverManager.getConnection() 메소드를 호출하여 데이터베이스에 연결하고 Connection 객체를 반환한다.

  • getConnection()에서 jdbc: 이후에 지정되는 URL 형식은 DBMS에 따라 다르므로 JDBC 문서 참조
  • MySQL 서버가 현재 동일한 컴퓨터에서 동작하므로 서버 주소를 localhost로 지정
  • MySQL의 경우 디폴트로 3306 포트를 사용
  • sampledb는 앞서 생성한 DB의 이름
  • "root"는 DB에 로그인할 계정 이름이며, ""는 root의 패스워드

 

 

 

 

samplesdb 데이터베이스에 연결하는 JDBC 프로그램 작성

JDBC를 이용하여 samplesdb 데이터베이스에 연결하는 자바 응용프로그램을 작성하라. 만약 MySQL 서
버가 실행 중이지 않으면 다음과 같은 에러가 발생한다.

DB 연결 에러

 

 이 경우 윈도우의 서비스 관리자에서 MySQL 서버를 시작시키면 된다.

 

 

이렇게 로드 오류가 뜬다. 어제 이 문제를 해결하려고 MySQL 경로를 찾아서 JARS 파일을 찾아보았지만 아무리 봐도 찾을 수 없었다. 이 책의 JDBC는 너무 간추려서 설명하고 있어서 이 책을 따라 하다가는 구덩이에 빠지기 쉬운 것 같다.

아무튼 참고 정도로 하고 따로 자료를 찾아보며 공부해야 문제를 해결할 수 있다.


 

 

 

3. JDBC 드라이버 경로 지정

 

조금 전에 1시간 반이 넘도록 JAR 파일을 추가하는 방법에 대해서 연구하여 마침내 해결했다.

 

 

그럼 다시 코드를 실행해보기로 하자.


 

 

 

4. 이전 코드 다시 실행하기

이제 DB 연결 완료하는 문구는 뜨는데 빨간 글씨로 뭔가 오류 표시가 나는 것 같다.

 

출력된 메시지를 보면, 코드 실행은 성공적으로 완료되었지만 com.mysql.jdbc.Driver 사용이 더 이상 권장되지 않는다는 경고 메시지가 표시되고 있는 것이다.


 

문제점

  1. com.mysql.jdbc.Driver는 더 이상 사용되지 않음
    • MySQL Connector/J 8.0 이상에서는 com.mysql.jdbc.Driver가 사용되지 않으며, 대신 com.mysql.cj.jdbc.Driver를 사용해야 한다.
    • com.mysql.jdbc.Driver는 구버전(5.x 이하)에서 사용되던 드라이버 클래스 이름이다.
    • MySQL Connector/J 8.0 이상에서는 이 클래스가 호환성 유지를 위해 남아 있지만, 경고 메시지가 표시됨
  2. 드라이버 클래스 수동 로드 불필요
    • MySQL Connector/J 6.0 이상에서는 Class.forName 호출 없이도 JDBC 드라이버가 자동으로 로드된다.
    • 따라서 Class.forName()을 명시적으로 호출할 필요가 없다.

이 문제를 수정해보기로 하자.


 

 

 

해결 방법

1. 드라이버 클래스 이름 업데이트

com.mysql.cj.jdbc.Driver를 사용하는 최신 방식으로 수정해야 한다.

Class.forName("com.mysql.cj.jdbc.Driver"); // 최신 MySQL 드라이버 로드

 

 

2. Class.forName 생략

최신 JDBC 드라이버에서는 Class.forName 호출 없이도 자동으로 드라이버가 로드되므로, 이 코드를 완전히 제거해도 된다.

Connection conn = DriverManager.getConnection(
    "jdbc:mysql://localhost:3306/sampledb", "root", "1111");

 

 

3. Time Zone 설정 추가

MySQL 8.0 이상에서는 JDBC 연결 시 time zone 설정 오류가 발생할 수 있다. 이 문제를 방지하려면 serverTimezone 설정을 URL에 추가해야 한다.

Connection conn = DriverManager.getConnection(
    "jdbc:mysql://localhost:3306/sampledb?serverTimezone=UTC", "root", "1111");

 


 

 

5. 코드 오류 해결하기

이렇게 수정하여 실행해보았다.

 

 

 

이제 DB 연결 완료라는 메시지만 뜨니 잘 된 것이다. 하지만 난 노란줄이 뜨는 게 보기가 싫어서 이 코드도 수정해보기로 했다.


 

 

 

 

6. 노란줄 없애는 코드 작성하기

conn에서 노란 줄이 뜨는 이유는 변수 conn이 선언되었지만 사용되지 않았기 때문이다. 이는 컴파일러가 프로그램 실행에는 문제가 없지만, 사용되지 않는 변수를 경고로 알려주는 것이다.

 

(1) conn을 사용하도록 수정

  • 연결 객체(conn)를 사용하여 실제 작업(SQL 실행 등)을 수행하면 경고가 사라진다.

 

 

(2) conn을 명시적으로 닫기

  • conn을 닫는 코드라도 추가하면 경고가 사라진다.

 

이렇게 con.close()를 하니 노란줄이 사라졌다. 난 두 가지 중에서 두번째 방법을 사용하기로 했다. conn을 어디에 쓰느냐는 문제도 조금 고민을 했지만 말이다.


 

 

 

 

학습을 마치고

무엇이든 첫 수업이 가장 힘들다. 이번 단원에서 가장 어려운 문제는 JAR 파일을 라이브러리에 추가하는 문제였다. 그리고 오늘 새벽에 JDBC 수업을 끝까지 모두 듣고 코드 오류도 수정하며 학습을 마쳤다. 그리고 나니 이전에는 이해할 수 없었던 코드들이 보이며 이해가 되기 시작했다.

아직 공부가 많이 남아있지만 오늘 아침까지 가능하며 이 학습을 마칠 예정이다. 주말에는 JSP 공부를 마무리해야 12월 안에 웹 개발 공부를 마치려는 계획을 거의 달성할 수 있을 것 같다.