JDBC
🧩 JDBC란?
정의
JDBC(Java Database Connectivity)는 Java 애플리케이션이 데이터베이스와 연결하고 SQL을 실행하기 위한 표준 API이다. DB 종류가 달라도 JDBC 규격을 통해 같은 방식으로 접근할 수 있다.
🔄 JDBC의 동작 흐름
- 드라이버 로드
Connection생성Statement또는PreparedStatement생성- SQL 실행
ResultSet처리- 자원 해제
포인트
JDBC는 DB와 직접 통신하는 가장 기본 계층이다. 따라서 자원 해제와 예외 처리를 꼼꼼히 해야 한다.
🧱 주요 구성 요소
| 객체 | 역할 |
|---|---|
DriverManager |
JDBC 드라이버 로딩 및 Connection 생성 |
Connection |
DB 연결 객체 |
Statement |
SQL 실행 객체 |
PreparedStatement |
파라미터 바인딩이 가능한 SQL 실행 객체 |
ResultSet |
조회 결과를 담는 객체 |
🛠️ JDBC 처리 예시
String sql = "SELECT username FROM users WHERE id = ?";
try (
Connection conn = DriverManager.getConnection(url, user, password);
PreparedStatement ps = conn.prepareStatement(sql)
) {
ps.setLong(1, 1L);
try (ResultSet rs = ps.executeQuery()) {
while (rs.next()) {
System.out.println(rs.getString("username"));
}
}
}
🔐 PreparedStatement를 권장하는 이유
- SQL Injection 방어에 유리하다.
- SQL 파싱과 바인딩이 분리돼서 안전하다.
- 반복 실행 시 성능상 이점이 있을 수 있다.
[!important] 주의 문자열 더하기로 SQL을 만드는 방식은 가급적 피하는 것이 좋다. 특히 사용자 입력이 들어가는 경우 보안 문제가 생기기 쉽다.
🧾 트랜잭션과 JDBC
commitrollbackautoCommit
try (Connection conn = DriverManager.getConnection(url, user, password)) {
conn.setAutoCommit(false);
// SQL 실행
conn.commit();
} catch (Exception e) {
// conn.rollback();
}
📚 JDBC와 함께 보는 개념
- DBCP
- ORM
- PreparedStatement
- ResultSet
⚖️ JDBC vs ORM
| 항목 | JDBC | ORM |
|---|---|---|
| 작업 방식 | SQL 직접 작성 | 객체 중심 |
| 학습 난이도 | 높음 | 상대적으로 낮음 |
| 제어 가능성 | 높음 | 추상화되어 있음 |
| 생산성 | 낮을 수 있음 | 높음 |
정리
JDBC는 세밀한 제어가 강점이고, ORM은 개발 생산성이 강점이다.
✅ 언제 JDBC를 고려할까?
- 복잡한 SQL을 직접 제어하고 싶을 때
- ORM 추상화가 오히려 불편할 때
- 성능과 실행 흐름을 세밀하게 보고 싶을 때
- 레거시 시스템과 직접 연동해야 할 때
댓글남기기