JDBC (Java Database Connectivity)
JDBC는 자바 애플리케이션과 데이터베이스를 연결하고 상호작용할 수 있도록 지원하는 표준 API입니다.
이를 통해 자바 프로그램은 데이터베이스에서 데이터를 읽고 쓰거나 업데이트하며, 다양한 데이터베이스 시스템과 독립적으로 작업할 수 있습니다.
- 소규모 애플리케이션에서 데이터베이스와 직접 연결해 작업
- 대규모 애플리케이션에서는 JDBC를 기반으로 한 ORM 도구(Hibernate, JPA)와 함께 사용
역할
- 데이터베이스 연결
- 데이터베이스와 연결을 설정하고 종료합니다.
- SQL 실행
- SELECT, INSERT, UPDATE, DELETE와 같은 SQL 쿼리를 실행합니다.
- 결과 처리
- SQL 쿼리의 실행 결과(조회된 데이터 등)를 처리합니다.
- DB 독립성 제공
- MySQL, Oracle, PostgreSQL 등 다양한 DBMS를 동일한 방식으로 사용할 수 있게 해줍니다.
구성 요소
1. DriverManager
- 데이터베이스 연결을 관리하는 클래스입니다.
- JDBC 드라이버를 로드하고, 연결을 설정하거나 해제합니다.
2. Connection
- 데이터베이스와의 연결을 나타냅니다.
- 연결을 통해 SQL을 실행할 수 있습니다.
3. Statement
- SQL 쿼리를 실행하는 객체입니다.
- 정적 쿼리(Statement)와 동적 쿼리(PreparedStatement)를 실행할 수 있습니다.
4. ResultSet
- SELECT 쿼리의 결과를 저장하고, 이를 탐색하거나 처리할 수 있습니다.
동작 흐름
- JDBC 드라이버 로드
- 데이터베이스와 연결할 수 있도록, DBMS에 맞는 JDBC 드라이버를 로드합니다.
- 데이터베이스 연결
- DriverManager.getConnection()을 사용하여 DBMS와 연결을 설정합니다.
- SQL 실행
- SQL 쿼리를 Statement 또는 PreparedStatement 객체를 사용해 실행합니다.
- 결과 처리
- SELECT 쿼리의 경우, 결과는 ResultSet 객체로 반환되어 데이터를 탐색하고 처리합니다.
- 연결 종료
- 사용이 끝난 Connection, Statement, ResultSet 객체를 닫아 자원을 해제합니다.
MySQL 연결 예시
import java.sql.*;
public class JdbcExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydatabase"; // DB URL
String username = "root"; // DB 사용자 이름
String password = "password"; // DB 비밀번호
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
// 1. JDBC 드라이버 로드
Class.forName("com.mysql.cj.jdbc.Driver");
// 2. 데이터베이스 연결
connection = DriverManager.getConnection(url, username, password);
System.out.println("Connected to the database!");
// 3. SQL 실행
statement = connection.createStatement();
String query = "SELECT * FROM users"; // SQL 쿼리
resultSet = statement.executeQuery(query);
// 4. 결과 처리
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
System.out.println("ID: " + id + ", Name: " + name);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 5. 자원 해제
try {
if (resultSet != null) resultSet.close();
if (statement != null) statement.close();
if (connection != null) connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
장단점
* 장점
- 표준화된 인터페이스 제공
- 모든 데이터베이스 시스템을 동일한 방식으로 다룰 수 있음
- 다양한 데이터베이스 지원
- MySQL, Oracle, PostgreSQL, MS SQL Server 등 다양한 DBMS와 호환 가능
- 확장성
- 추가적인 JDBC 드라이버를 통해 새로운 DBMS를 쉽게 지원할 수 있음
- 결과 처리의 유연성
- ResultSet을 사용해 데이터를 행 단위로 탐색하거나 처리할 수 있음
* 단점
- 직접적인 코딩 필요
- SQL을 직접 작성해야 하며, 반복적인 코드가 많아질 수 있음
- 복잡성 증가
- 대규모 애플리케이션에서 JDBC만으로 데이터베이스를 처리하면 복잡하고 오류 발생 가능성이 높아짐
- SQL 의존성
- 데이터베이스에 종속적인 SQL을 사용하면, 다른 DBMS로 전환하기 어려움
JDBC와 연관된 개념
1. JDBC 드라이버
- 데이터베이스와 통신하기 위해 필요한 소프트웨어 구성 요소입니다.
- 데이터베이스 벤더가 제공하며, 애플리케이션이 DBMS와 상호작용할 수 있게 합니다.
- ex. MySQL용 mysql-connector-java, Oracle용 ojdbc.
2. Connection Pooling
- 데이터베이스 연결을 재사용하여 성능을 개선하는 기술
- JDBC 연결은 무겁기 때문에, 풀링을 통해 연결을 미리 만들어두고 필요할 때 가져다 씁니다.
3. ORM (Object-Relational Mapping)
- JDBC의 복잡성을 줄이기 위해, 객체 지향 방식으로 데이터베이스를 다루는 기술
- ex. Hibernate, JPA(Spring Data JPA)
요약
- JDBC는 자바 애플리케이션과 데이터베이스 간의 표준화된 연결 방식으로, 다양한 DBMS를 다룰 수 있는 유연성을 제공합니다.
- 하지만 직접적인 SQL 작성과 반복적인 코드 작성이 필요하므로, ORM 도구와 함께 사용하는 것이 일반적입니다.
출처
OpenAI의 ChatGPT (https://openai.com)
'DB > JDBC' 카테고리의 다른 글
JDBC 의존성 (Dependency) (0) | 2025.01.11 |
---|