자바

자바와 데이터베이스

JDBC(Java Database Connectivity) 개요

JDBC는 자바에서 데이터베이스에 연결하고 SQL 쿼리를 실행할 수 있도록 해주는 API입니다. JDBC를 사용하면 다양한 관계형 데이터베이스와 상호작용할 수 있으며, 데이터베이스에 대한 CRUD(Create, Read, Update, Delete) 작업을 수행할 수 있습니다. JDBC는 데이터베이스에 대한 표준 인터페이스를 제공하므로, 특정 데이터베이스에 종속되지 않고 다양한 데이터베이스 시스템에 대해 동일한 코드를 사용할 수 있습니다. JDBC는 드라이버를 통해 데이터베이스와 연결되며, 드라이버는 데이터베이스 벤더에 따라 다릅니다.

JDBC 드라이버 종류

JDBC 드라이버는 데이터베이스와의 연결을 관리하는 소프트웨어 컴포넌트입니다. JDBC 드라이버는 크게 네 가지 유형으로 분류됩니다:

Type 1: JDBC-ODBC 브리지 드라이버: ODBC(Open Database Connectivity) 드라이버를 사용하여 데이터베이스에 연결합니다. 이 드라이버는 자바와 ODBC 간의 브리지를 제공하지만, 성능이 낮고 ODBC 드라이버에 의존하기 때문에 사용이 제한적입니다.
Type 2: 네이티브 API 드라이버: 특정 데이터베이스의 네이티브 API를 사용하여 연결합니다. 이 드라이버는 성능이 좋지만, 특정 데이터베이스에 종속적입니다.
Type 3: 네트워크 프로토콜 드라이버: 중간 서버를 통해 데이터베이스에 연결합니다. 이 드라이버는 데이터베이스에 대한 독립성을 제공하지만, 추가적인 네트워크 오버헤드가 발생할 수 있습니다.
Type 4: 순수 자바 드라이버: 자바로 작성된 드라이버로, 특정 데이터베이스에 직접 연결합니다. 이 드라이버는 성능이 뛰어나고, 자바 애플리케이션과의 호환성이 좋습니다.

JDBC를 통한 데이터베이스 연결

JDBC를 사용하여 데이터베이스에 연결하는 과정은 다음과 같습니다:

드라이버 로드: Class.forName() 메서드를 사용하여 JDBC 드라이버를 로드합니다. 예를 들어, MySQL 드라이버는 다음과 같이 로드할 수 있습니다.
연결 생성: DriverManager.getConnection() 메서드를 사용하여 데이터베이스에 연결합니다. 이 메서드는 데이터베이스 URL, 사용자 이름, 비밀번호를 인자로 받습니다.
SQL 쿼리 실행: Statement 또는 PreparedStatement 객체를 사용하여 SQL 쿼리를 실행합니다.
결과 처리: 쿼리 실행 결과를 ResultSet 객체를 통해 처리합니다.
연결 종료: 작업이 완료된 후 Connection 객체의 close() 메서드를 호출하여 연결을 종료합니다.

PreparedStatement와 Statement의 차이

tatement와 PreparedStatement는 JDBC에서 SQL 쿼리를 실행하는 데 사용되는 두 가지 주요 인터페이스입니다. 이 두 인터페이스는 다음과 같은 차이점이 있습니다:

Statement: SQL 쿼리를 동적으로 생성하여 실행합니다. 매번 쿼리를 실행할 때마다 SQL 문을 컴파일하므로 성능이 떨어질 수 있습니다. 또한, SQL 인젝션 공격에 취약합니다.
PreparedStatement: 미리 컴파일된 SQL 쿼리를 사용하여 실행합니다. 쿼리의 구조를 미리 정의하고, 실행 시에 파라미터를 바인딩합니다. 이로 인해 성능이 향상되고, SQL 인젝션 공격에 대한 안전성이 높아집니다.

트랜잭션 관리

트랜잭션은 데이터베이스의 일관성을 유지하기 위해 여러 작업을 하나의 단위로 묶는 것입니다. JDBC에서는 트랜잭션을 관리하기 위해 Connection 객체의 setAutoCommit(false) 메서드를 사용하여 자동 커밋 모드를 비활성화하고, 여러 SQL 작업을 수행한 후 commit() 또는 rollback() 메서드를 호출하여 트랜잭션을 완료하거나 취소할 수 있습니다.

트랜잭션 시작: 자동 커밋을 비활성화하여 트랜잭션을 시작합니다.
작업 수행: 여러 SQL 쿼리를 실행합니다.
트랜잭션 커밋: 모든 작업이 성공적으로 완료되면 commit() 메서드를 호출하여 변경 사항을 데이터베이스에 반영합니다.
트랜잭션 롤백: 작업 중 오류가 발생하면 rollback() 메서드를 호출하여 이전 상태로 되돌립니다.