JDBC를 이용한 Java와 PostgreSQL 연동
JDBC를 이용한 Java와 PostgreSQL 연동
안녕하세요, kentakang 입니다.
오늘은 BananaAllergy와 Database를 연동하면서 공부했던, JDBC를 통해 PostgreSQL과 연동하는 방법에 대해 글을 작성해보려고 합니다.
본격적인 내용에 들어가기 전에 처음 보는 용어들부터 알려드리도록 하겠습니다.
용어 설명
JDBC : Java Database Connectivity의 줄임말. 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API
PostgreSQL : DBMS(Database Management System)의 한 종류
DBMS : Database Management System의 줄임말로 데이터베이스라는 데이터의 집합을 만들고 저장 및 관리할 수 있는 기능을 제공하는 응용 프로그램
JDBC는 어떻게 사용하나요?
JDBC의 사용법은 간단합니다.
JDBC의 클래스가 포함되어 있는 java.sql 패키지를 import 해주시면 바로 사용하실 수 있습니다.
다만 데이터베이스와 통신을 하기 위해서는 자바 프로그램의 요청을 DBMS가 이해할 수 있는 프로토콜로 변환해주는 어댑터인, JDBC 드라이버가 필요합니다. DBMS에 맞는 JDBC 드라이버는 각 DBMS의 홈페이지에서 제공하고 있습니다.
우리는 이번 게시글에서 JDBC 클래스와 PostgreSQL JDBC Driver를 이용해 우리가 구축한 PostgreSQL 데이터베이스와 Java 프로그램 간 통신을 할 수 있는 코드를 작성해 볼 예정입니다.
혹시 PostgreSQL 서버를 구축하셔야 한다면 제가 전에 작성해 둔 PostgreSQL 설치하기 게시글을 참고해주세요.
PostgreSQL JDBC Driver 설치하기
우선 PostgreSQL 서버와 통신하기 위해서 JDBC Driver를 설치해줘야 합니다.
PostgreSQL JDBC Driver 페이지에 접속하시면 JDBC Driver를 다운 받으실 수 있습니다.
제가 이 글을 작성하는 2018년 5월 8일 기준으로는 42.2.2 버전이 가장 최신 버전입니다.
우선 다운 받겠습니다.
다운 받으시면 JDBC Driver는 .jar 파일로 자바 실행파일의 형태로 되어 있습니다.
이 .jar 파일을 각자 사용하시는 IDE에서 라이브러리로 Import 해주시면 됩니다.
제가 사용하는 IDE인 IntelliJ IDEA를 기준으로 설명드리겠습니다.
이렇게 되어 있는 IntelliJ의 상단 메뉴에서 File을 클릭하시고 Project Structure 메뉴를 클릭해주세요.
그러면 이렇게 Project Structure 창을 보실 수 있습니다.
여기서 왼쪽 메뉴에 있는 Libraries 메뉴에 들어가주세요.
그러면 이런식으로 현재 Import 되어 있는 라이브러리들이 뜨게됩니다.
저는 이미 개발중인 프로젝트에서 보는 거라 파싱을 위한 jsoup과 톰캣 라이브러리가 추가되어 있지만,
새로 프로젝트를 생성하셨다면 비어있습니다.
여기서 + 버튼을 누르신 다음 Java를 선택하시고, 아까 다운 받았던 드라이버 파일을 Import 해주시면 됩니다.
이런식으로 정상적으로 추가된 걸 보실 수 있습니다.
이렇게 JDBC 드라이버 설치가 끝났습니다.
Eclipse 환경에서도 비슷한 과정을 거쳐 설치가 가능합니다.
PostgreSQL 설정 변경
Java 프로그램에서 DB로 연결하려면 PostgreSQL의 설정을 바꿔 줄 필요가 있습니다.
제가 설명드리는 설정의 경우 내부에 있는 데이터베이스 서버로 연결하는 경우의 설정입니다.
외부에서 내부로 접속하는 경우는 "PostgreSQL 외부 접속" 등의 키워드로 검색하시면 많은 글을 찾아보실 수 있습니다.
PostgreSQL을 설치하면 기본적으로 ident라는 인증 방식을 통해서 인증을 하게 됩니다.
PostgreSQL을 설치했을 때 postgres라는 계정에서만 pgsql 콘솔을 실행할 수 있었던 것도 ident 인증 방식 때문입니다.
저희는 자바에서 연결하기 위해 ident 인증 방식을 md5 인증 방식으로 변경하도록 하겠습니다.
우선 PostgreSQL의 설정 파일이 있는 디렉토리로 가주세요. 제 서버에서는 /var/lib/pgsql 디렉토리에 있었습니다.
해당 디렉토리에서 pg_hba.conf 파일을 찾아 vi로 열어주세요.
찾아보시면
host all all 127.0.0.1 ident
이런 부분이 있는데요, ident를 md5로 변경해주시면 설정이 끝납니다.
설정을 변경해주신 뒤 systemctl restart postgresql 등의 명령어로 서버를 재시작 해주셔야 적용 되는 것도 잊지 마시구요.
Java 코드 작성
이렇게 JDBC Driver 설치가 다 끝났다면, 이제는 본격적으로 JDBC를 이용해 통신을 해봐야겠죠.
우선 JDBC 사용을 위해 java.sql.* 패키지를 import 해주세요.
import java.sql.*;
JDBC 테스트를 위한 JDBCTest Class를 작성하고 코드를 하나 하나 설명해 드리도록 하겠습니다.
import java.sql.*;
public class JDBCTest {
public static void main(String[] args) {
Connection conn;
Statement st;
ResultSet rs;
String url = "jdbc:postgresql://localhost";
String user = "username";
String password = "password";
try {
conn = DriverManager.getConnection(url, user, password);
st = conn.createStatement();
rs = st.executeQuery("SELECT VERSION()");
if (rs.next())
System.out.println(rs.getString(1));
} catch (SQLException sqlEX) {
System.out.println(sqlEX);
} finally {
try {
rs.close();
st.close();
conn.close();
} catch (SQLException sqlEX) {
System.out.println(sqlEX);
}
}
}
}
우선 import java.sql.* 부분은 딱 보면 아시겠죠?
JDBC를 사용하기 위해서 Import 해준 부분입니다.
Connection, Statement, ResultSet은 저희가 데이터베이스에 연결하고 쿼리를 실행하기 위해 미리 선언합니다.
위에서 미리 선언해두는 이유는 데이터베이스를 연결할 때는 SQLExpcetion을 처리해줘야 하는데, SQLException을 throws 하지 않고,
try ~ catch 문을 사용해서 예외처리하기 위함입니다.
url, user, password 부분은 변수명 그대로 이해하시면 됩니다.
PostgreSQL의 url의 경우 postgresql://localhost 형태며, 만약 따로 생성한 mydatabase와 같은 DB에 연결하고 싶으시면,
postgresql://localhost/mydatabase 이런 식으로 적어주시면 됩니다.
username과 password는 해당 DB에 접근 권한이 있는 유저의 유저명 및 비밀번호를 적어주세요.
밑에 있는 try ~ catch 문의 경우 DriverManager를 이용해서 해당 데이터베이스에 연결한 뒤 SELECT VERSION() 이라는 쿼리에 접속하는 코드입니다.
rs.getString(1); 은 ResultSet에서 가져온 인덱스의 1번째 칼럼의 문자열을 가져오는 메소드입니다.
가장 마지막에는 ResultSet -> Statement -> Connection의 순서대로 close를 해주시면 끝납니다.