🧩 JDBC란?

정의

JDBC(Java Database Connectivity)는 Java 애플리케이션이 데이터베이스와 연결하고 SQL을 실행하기 위한 표준 API이다. DB 종류가 달라도 JDBC 규격을 통해 같은 방식으로 접근할 수 있다.

🔄 JDBC의 동작 흐름

  1. 드라이버 로드
  2. Connection 생성
  3. Statement 또는 PreparedStatement 생성
  4. SQL 실행
  5. ResultSet 처리
  6. 자원 해제

포인트

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

  • commit
  • rollback
  • autoCommit
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 추상화가 오히려 불편할 때
  • 성능과 실행 흐름을 세밀하게 보고 싶을 때
  • 레거시 시스템과 직접 연동해야 할 때

연결문서

댓글남기기