JDBC

parkrootseok·2025년 2월 2일

스프링

목록 보기
7/12
post-thumbnail

JDBC란?

JDBC는 자바 프로그램이 데이터베이스와 상호 작용할 수 있도록 도와주는 API입니다. 이를 사용해 데이터베이스에 접속하여 SQL 쿼리 실행 및 결과 처리, 트랜잭션 관리 등 다양한 데이터베이스 관련 작업을 수행할 수 있습니다.

주요 개념

JDBC Driver

JDBC 드라이버는 Java 애플리케이션이 특정 데이터베이스와 통신할 수 있도록 도와주는 역할을 수행합니다. 대표적으로 아래와 같은 유형이 존재합니다.

  • JDBC-ODBC Bridge Driver
  • Native API Driver
  • Network Protocol Driver
  • Pure Java Driver
    • 주로 사용(MySQL, PostgreSQL, Oracle 등등)

DriverManager

DriverManager는 데이터베이스와의 연결을 관리하는 역할을 수행합니다.

Connection

Connection은 실제 데이터베이스와 연결된 객체를 말하며, SQL을 실행하고 트랜잭션을 제어하는 기능이 포함되어 있습니다.

Statement/PreparedStatement

Statement와 PreparedStatement는 SQL을 실행할 때 사용하는 객체입니다.

이 두 객체는 뭐가 달라서 구분해서 사용할까요?

우선, 두 객체의 SQL 실행 방식부터 다릅니다. Statement의 경우 SQL을 매번 새로 파싱하며 직접 문자열을 조합하여 사용하지만, PreparedStatement의 경우 SQL을 미리 컴파일한 후 파라미터 바인딩을 수행하는 방식입니다. 이에 따라, PreparedStatement가 SQL Injection에 보다 안전하며 성능적으로 우위를 가집니다.

ResultSet

ResultSet은 SQL 실행 결과를 저장하는 객체입니다.

JDBC 사용법

Java 애플리케이션에서 JDBC를 사용하는 방법은 다음과 같습니다.

JDBC 드라이버 로드

현재 사용하는 데이터베이스에 대한 드라이버를 로드합니다. 해당 작업은 생략 가능하지만 배우는 입장에서 명식적으로 수행하도록 하겠습니다.

데이터베이스 연결

데이터베이스 연결에 필요한 정보를 입력해 연결을 수행합니다. 이 과정을 통해, Connection 객체를 생성할 수 있습니다.

SQL 실행

SQL 실행은 Statement, PreparedStatement 두 객체로 수행할 수 있습니다. 두 객체는 연결 객체인 Connection에서 생성할 수 있습니다.

결과 조회

SQL 실행 결과는 ResultSet 객체에 저장되어 반환됩니다. 다음 코드와 같이 반환된 객체를 이용하여 결과를 조회합니다.

JDBC 트랜잭션 관리

기본적으로 JDBC는 자동으로 커밋을 수행하기 때문에, 트랜잭션을 직접 관리하기 위해선 다음과 같은 설정 변경이 필요합니다.

설정 후, 다음 예시와 같이 Connection을 통해 SQL을 실행하는 로직을 예외가 발생하지 않은 경우에만 Commit을 수행하도록 작성합니다.

예외가 발생한 경우 Rollback을 수행하여 트랜잭션에서 수행한 작업 내용을 모두 무효화함으로써 데이터베이스의 무결성을 유지할 수 있습니다.

JDBC 저장 프로시저

저장 프로시저란?

저장 프로시저는 미리 작성된 SQL 로직을 데이터베이스에서 실행할 수 있도록 지원하는 도구 입니다.

JDBC의 CallableStatement 객체를 사용하여 저장 프로시저를 호출할 수 있습니다.

사용 방법

데이터베이스에 다음과 같이 저장 프로시저를 생성합니다.

생성한 저장 프로시저는 다음 예시와 같이 사용할 수 있습니다.

OUT 파라미터 바인딩시 주의 사항

OUT 파라미터를 바인딩할 때 registerOutParameter() 메서드를 사용해야 하는데, 이 경우 반드시 java.sql.Types를 사용해 데이터 타입을 선언해야 합니다.

추가 학습이 필요한 내용

아래는 위 개념을 공부하면서 추가 학습이 필요할 것 같은 내용들입니다. 이 내용들은 차차 정리하여 링크를 달도록 하겠습니다.

Connection Pool

@Transactional

ORM

JDBC Driver 비교

예상 질문

JDBC란 무엇인가요?

JDBC는 자바 애플리케이션에서 데이터베이스를 사용할 수 있도록 도와주는 API입니다.

JDBC 드라이버는 꼭 명시해야 하나요?

JDBC 3.0 버전 이하의 경우 명시가 필요하지만, 4.0 버전부터는 별도로 명시할 필요는 없습니다.

Statement와 PreparedStatement를 비교해서 설명해주세요.

Statement와 PreparedStatement의 가장 큰 차이점은 SQL 실행 방식입닌다. Statement의 경우 SQL을 실행할 때 마다 파싱을 수행하며 문자열 조합으로 작성합니다. 하지만, PreparedStatement의 경우 SQL을 미리 컴파일하여 한 번의 파싱만 수행하며 파라미터 바인딩을 수행합니다.

이로 인해, PreparedStatement를 사용하는 것이 SQL Injection에 더욱 안전하며 성능적으로 우위에 있습니다.

Statement는 PreparedStatement보다 항상 성능적으로 낮은가요?

아닙니다. 단순하게 1회성으로 사용할 경우 Statement를 사용하는 것이 성능적으로 우위에 있을수 있습니다. 또한, MySQL의 경우 기본적으로 SQL 캐싱을 수행하지 않기 때문에 차이가 미미할 수 있습니다.

JDBC에서 트랜잭션 관리는 어떻게 수행하나요?

기본적으로 자동 커밋 설정이 true이기 때문에 자동으로 관리합니다. 하지만, Connection 객체의 자동 커밋 설정을 false로 수정하여 명시적으로도 수행할 수 있습니다.

JDBC를 통해 저장 프로시저를 사용할 수 있나요?

CallableStatement 객체를 사용하여 저장 프로시저를 사용할 수 있습니다. 이 경우 IN 파라미터는 기존과 동일하게 파라미터 바인딩을 수행하지만, OUT 파라미터의 경우 Types 클래스를 사용하여 데이터 타입을 명시한다는 점을 주의해야합니다.

profile
동료들의 시간과 노력을 더욱 빛내줄 수 있는 개발자가 되고자 노력합니다.

0개의 댓글