contents
JDBC(Java Database Connectivity)에 대해 설명드리겠습니다.
1. JDBC란 무엇인가?
- JDBC는 Java 애플리케이션이 데이터베이스에 연결하고 SQL을 통해 데이터에 접근 및 조작할 수 있게 해주는 표준 API입니다.
- 다양한 관계형 데이터베이스(MySQL, Oracle, PostgreSQL 등)에 벤더에 상관없이 Java 코드로 동일하게 접근이 가능합니다.
- JDBC는 자바 표준 라이브러리(java.sql 및 javax.sql)의 일부이며, 플랫폼 독립적인 데이터베이스 연동을 제공합니다.
2. JDBC 아키텍처
2티어 구조
- Java 애플리케이션 → JDBC 드라이버 → DBMS(데이터베이스)
- Java 프로그램이 JDBC 드라이버를 통해 데이터베이스와 직접 통신합니다(클라이언트/서버 구조).
3티어 구조
- Client → Application Server → JDBC 드라이버 → DBMS
- 중간에 어플리케이션 서버(미들웨어)가 있어 비즈니스 로직이나 추가 기능 관리가 가능합니다.
3. JDBC의 주요 구성 요소
| 클래스/인터페이스 | 설명 |
|---|---|
| DriverManager | JDBC 드라이버 로딩, 커넥션 생성, 드라이버 관리 역할 |
| Connection | 데이터베이스와의 세션/연결을 표현 |
| Statement | SQL 쿼리 실행용; 정적인 단순 쿼리 |
| PreparedStatement | 파라미터를 가진 동적 쿼리, 사전 컴파일되어 성능, 보안 우수 |
| CallableStatement | DB의 저장 프로시저 호출에 사용 |
| ResultSet | 쿼리 실행 결과 집합을 행/열 단위로 탐색 |
| SQLException | SQL 실행 중 오류 발생 시 예외 처리 |
4. JDBC 드라이버의 종류
- Type-1 (JDBC-ODBC Bridge): ODBC를 통해 별개의 드라이버를 사용(구버전, 현재 사용X).
- Type-2 (Native-API Driver): 자바+네이티브 라이브러리 혼용, 속도 좋으나 배포 번거로움.
- Type-3 (Network Protocol Driver): 미들웨어 서버 통해 DB와 통신, 유연성 우수.
- Type-4 (Thin Driver, pure Java): 자바로만 구현, 성능/호환성/배포 모두 우수. 현재 가장 많이 쓰임.
5. JDBC 기본 동작 흐름(순서)
- 드라이버 로딩
Class.forName("com.mysql.cj.jdbc.Driver"); - 커넥션(Connection) 생성
Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/your_db", "username", "password"); - Statement/PreparedStatement 생성
Statement stmt = conn.createStatement(); // OR PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM table WHERE id = ?"); pstmt.setInt(1, 10); - SQL 쿼리 실행 및 결과 처리
ResultSet rs = stmt.executeQuery("SELECT * FROM table"); while (rs.next()) { String name = rs.getString("name"); } - 자원 해제 (커넥션/스테이트먼트/결과셋 닫기)
rs.close(); stmt.close(); conn.close();
6. 주요 특징 및 실무 활용
- PreparedStatement를 사용하면 SQL 인젝션 방지와 성능 향상을 동시에 달성할 수 있습니다.
- 트랜잭션 관리
- 자동 커밋 OFF후 수동으로 커밋/롤백 가능:
conn.setAutoCommit(false); try { /* 여러 SQL */ conn.commit(); } catch(Exception e) { conn.rollback(); }
- 자동 커밋 OFF후 수동으로 커밋/롤백 가능:
- Batch 쿼리: 대량 작업시 성능 향상
pstmt.addBatch(); pstmt.executeBatch(); - Connection Pooling: 자주 쓰는 커넥션을 미리 pool로 관리하여 성능을 극대화(Jakarta DBCP, HikariCP 등 활용)
7. 실제 사용 예시
import java.sql.*;
public class JDBCExample {
public static void main(String[] args) throws Exception {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "pass");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT id, name FROM user");
while (rs.next()) {
System.out.println(rs.getInt("id") + " " + rs.getString("name"));
}
rs.close();
stmt.close();
conn.close();
}
}
8. 실무시 주의사항 & 베스트프랙티스
- 자원(Connection, Statement, ResultSet)은 꼭
finally블록이나 try-with-resources로 닫기. - PreparedStatement로 동적 파라미터 처리.
- SQL/DB 예외 처리를 확실하게!
- Connection Pool(Filter)과 트랜잭션 관리에 익숙해지기.
9. JDBC 활용 방식 비교 요약
| JDBC 단독 | Spring JDBC/JPA | |
|---|---|---|
| 저수준 | 직접 연결, 쿼리, 예외 처리 모두 수동 | API 추상화로 간편, 에러 및 자원관리 자동화 |
| 적합도 | 학습, 단순/제어가 필요한 작업 | 실무 프로덕션 코드/복잡한 비즈니스 로직 |
JDBC는 자바에서 데이터베이스와 직접 연동할 때 반드시 마스터해야 할 기본 API입니다. Spring Framework(특히 JdbcTemplate, JPA 등)는 이를 효율적으로 감싸주는 추상화를 제공하므로 JDBC의 기초 구조와 사용법을 정확히 이해하면 더욱 견고한 데이터 연동 코드를 작성할 수 있습니다.
references