프로그램을 만들다 보면, DB를 이용해야 하는 경우가 다반사 일 것이다.
데이터베이스를 통해서 우리는 수 많은 데이터들을 엄청나게 효율적으로 관리할 수 있기 때문이다. 그렇다면 java 로 작성한 우리 프로그램이 어떻게 DBMS 와 연결을 맺고, 작업을 진행할 수 있을까? 그것에 대한 API 가 바로 JDBC 이다.
위키피디아에 JDBC에 관한 설명을 찾아보았다.
Java Database Connectivity (JDBC) is an application programming interface (API) for the programming language Java, which defines how a client may access a database.
해석하자면, java 언어를 사용하는 사용자들을 위한 데이터베이스 접속을 위한 API 라는 설명이다.
JDBC 를 테스트 해보기위해선 몇가지 준비가 필요하다.
우선 JDBC가 DB와의 연결을 담당하는 API 이기 때문에, DB가 있어야한다.
DB도 만드는 벤더가 많기 때문에, 그 중 하나를 선택해서 사용하도록 하자.
이 글에서는 MySQL DB를 사용하도록 하겠다.
설치관련 도움은 찾아서 확인하도록 하자.
밑의 링크에 생활코딩에서 MySQL 설치관련 영상을 달아놓았다.
https://opentutorials.org/course/2136/12020
간단하게 DB를 설치하고 테이블을 하나 만들어 두도록 하자.
필자의 경우 위와 같이 아주 degree 가 2인 아주 간단한 구조의 relation 을 하나 생성하고 테스트용 데이터를 하나 넣었다.
다음으로 필요한 것은 JDBC 드라이버인데, 각 DB마다 각각의 드라이버를 제공하고 있다. 직접 다운받아서 설치해도 되고, 필자는 maven 을 활용하여 간편하게 드라이버를 받아왔다.
https://mvnrepository.com/artifact/mysql/mysql-connector-java/8.0.22
JDBC로 데이터베이스와 연결을 위해서는 우선, JDBC 드라이버를 JVM 안으로 로드해야한다. 로드하는 방법은 간단하다.
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
참고 : 간혹 "com.mysql.jdbc.Driver" 이라고 설명되어있는 곳도 있는데 해당 드라이버는 deprecated 되었다.
위와 같이 Class.foName()은 ClassNotFoundExcepion을 던짐으로, try-catch 문으로 처리하도록 하자.
자, 이제 모든 준비가 끝났고 DB 와 연결만 진행하면 된다. 그렇다면 연결을 위해선 뭐가 필요할까? 어느 DB에 접속할것인지 그 주소를 알아야할 것이고 내가 해당 DB에 권한이 있는지를 알려주기 위해 해당 db 사용 id 와 password 가 필요할 것이다.
String url = "jdbc:mysql://localhost/[접속할DB이름(필자의 예시로는 mydata) ]?serverTimezone=UTC";
String id = "[DB아이디]";
String pw = "[DB접속비밀번호]";
연결을 위한 준비물들을 챙겼으니 연결을 마무리 하도록 하자.
try(
Connection conn = DriverManager.getConnection(url, id, pw);
) {
System.out.println("접속 완료");
} catch (SQLException sqle){
sqle.printStackTrace();
}
DriverManger.getConnection() 을 통해 DB와의 커넥션을 맺고 커넥션객체를 받아와 해당 객체를 통해 DB에 데이터를 가져오거나, 집어넣거나, 수정하는 활동이 가능해진다. 위에서는 간단하게 연결이 되는지만 확인하기 위해 로그만 찍어보았다. 그리고 이렇게 가져온 커넥션 자원은 사용후 자원을 해제하지 않으면 메모리를 잡아먹고 있으니, 자원을 해제해야 하는데 필자는 java8 부터 지원하는 try-with-resources 를 이용해 자원을 자동으로 해제할 수 있도록 하였다.
다음 포스팅에서는 Statement 와 PreparedStatement 를 활용해 DB 데이터를 CRUD 해보도록 하자.