☕️[Java] jdbc란?
JDBC(Java Database Connectivity) 는 Java 애플리케이션에서 데이터베이스에 연결하고, 쿼리를 실행하며, 결과를 처리하기 위한 표준 API입니다.
JDBC는 Java에서 데이터베이스와 상호작용하는 방법을 정의하며, 데이터베이스와 애플리케이션 간의 통신을 가능하게 합니다.
이를 통해 개발자는 다양한 데이터베이스에서 일관된 방식으로 데이터에 접근할 수 있습니다.
1️⃣ JDBC의 주요 개념.
1. JDBC 드라이버(JDBC Driver)
- JDBC는 드라이버 기반의 API입니다.
- JDBC 드라이버는 특정 데이터베이스에 맞는 연결을 가능하게 하며, 데이터베이스에 대한 SQL 명령을 전달하고 결과를 받아 옵니다.
- 각 데이터베이스는 JDBC 표준을 따르는 드라이버를 제공해야 하며, MySQL, PostgreSQL, Oracle 등의 데이터베이스에는 각각의 JDBC 드라이버가 있습니다.
🙋♂️ 드라이버란?
2. JDBC API
- JDBC는 데이터베이스와 통신하기 위한 다양한 인터페이스와 클래스를 포함하고 있습니다.
- 이를 통해 개발자는 데이터베이스 연결, SQL 쿼리 실행, 결과 처리, 트랜잭션 관리 등의 작업을 할 수 있습니다.
2️⃣ JDBC의 주요 작업 흐름
1. 데이터베이스 연결 설정(Establishing Connection)
- 애플리케이션은 JDBC 드라이버를 사용하여 데이터베이스에 연결을 설정합니다.
- 연결이 성공하면, 이를 통해 데이터베이스에 SQL 쿼리를 보낼 수 있습니다.
2. SQL 쿼리 실행(Executing SQL Queries)
- 연결이 설정되면, SQL 쿼리를 데이터베이스에 전달하여 데이터를 조회하거나 삽입, 업데이트, 삭제할 수 있습니다.
3. 결과 처리(Processing Results)
- SQL 쿼리의 결과는 Java에서 처리할 수 있는 형식으로 반환됩니다.
- 조회 쿼리의 경우,
ResultSet
객체로 결과가 반환되며, 이를 통해 데이터를 순차적으로 읽을 수 있습니다.
4. 트랜잭션 관리(Transaction Management)
- JDBC는 트랜잭션 처리를 지원합니다.
- 데이터의 일관성을 보장하기 위해 트랜잭션을 커밋하거나 롤백할 수 있습니다.
5. 연결 해제(Closing Connection)
- 모든 작업이 끝나면, 데이터베이스 연결을 해제해야 합니다.
- 이를 통해 자원을 적절하게 반환하고 연결을 종료할 수 있습니다.
3️⃣ JDBC 코드 예시.
import java.sql.Connection;
import java.sql.DriverManagerl
import java.sql.ResultSet;
import java.sql.Statement;
public class JdbcExample {
public static void main(String[] args) {
Connection connection = null;
Statement statement = null;
ResultSet = resultSet = null;
try {
// 1. JDBC 드라이버 로드 (예: MySQL, JDBC 드라이버)
Class.forName("com.mysql.cj.jdbc.Driver");
// 2. 데이터베이스 연결 설정
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "password");
// 3. SQL 쿼리 실행
statement = connection.createStatement();
resultSet = statement.executeQuery("SELECT * FROM Users");
// 4. 결과 처리
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
String email = resultSet.getString("email");
System.out.println("ID: " + id + ", Name: " + name + ", Email: " + email);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 5. 리소스 해제
try {
if (resultSet != null) resultSet.close();
if (statement != null) statement.close();
if (connection != null) connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
4️⃣ 주요 JDBC 객체
1. Connection
- 데이터베이스와 연결을 나타내는 객체입니다.
- 이 객체는 연결을 생성, 유지, 종료하는 데 사용되며, SQL 쿼리 실행에 필요한 통로 역할을 합니다.
- 연결은
DriverManager.getConnection()
메서드를 통해 생성됩니다.
2. Statement
- SQL 쿼리를 데이터베이스로 보내기 위한 객체입니다.
-
Statement
는 정적 SQL 쿼리를 실행하는 데 사용되며, 쿼리 결과를 받아 처리할 수 있습니다.
3. PreparedStatement
-
Statement
의 확장된 버전으로, 미리 컴파일된 SQL 쿼리를 실행할 수 있습니다. - 이는 동적 데이터가 포함된 쿼리(파라미터화된 쿼리)를 처리할 때 사용되며, 보안성과 성능을 개선할 수 있습니다.
예시
PreparedStatement pstmt = connection.prepareStatement("SELECT * FROM Users WHERE id = ?");
pstmt.setInt(1, 1); // 1번째 매개변수에 1을 설정
ResultSet rs = pstmt.executeQuery();
4. ResultSet
- SQL 쿼리 실행 결과를 담는 객체입니다.
-
ResultSet
은 데이터베이스로부터 반환된 결과를 테이블 형식으로 제공하며, 이를 통해 결과를 순차적으로 읽고 처리할 수 있습니다.
5. DriverManager
- JDBC 드라이버를 관리하는 클래스입니다.
- 데이터베이스 연결을 생성할 때
DriverManager.getConnection()
메서드를 사용하여 적절한 JDBC 드라이버를 통해 연결을 설정합니다.
5️⃣ JDBC의 장점.
1. 플랫폼 독립성.
- JDBC는 Java 표준 API로, 데이터베이스 시스템과 독립적으로 동작합니다.
- 다양한 데이터베이스 시스템에 대한 통일된 방식으로 접근할 수 있습니다.
2. 표준화된 API.
- JDBC는 Java 표준 API로, 데이터베이스 시스템과 독립적으로 동작합니다.
- 다양한 데이터베이스 시스템에 대한 통일된 방식으로 접근할 수 있습니다.
3. 광범위한 데이터베이스 지원.
- JDBC는 MySQL, PostgreSQL, Oracle, SQL Server 등 다양한 데이터베이스 시스템을 지원합니다.
- 각각의 데이터베이스는 JDBC 드라이버를 통해 연결됩니다.
4. 트랜잭션 지원.
- JDBC는 데이터베이스 트랜잭션을 관리할 수 있으며, 자동 커밋 또는 수동 트랜잭션 관리를 통해 데이터 일관성을 보장합니다.
6️⃣ JDBC의 단점.
1. 저수준 API.
- JDBC는 SQL 쿼리 실행과 같은 저수준 작업을 다루기 때문에 코드가 길어지고 복잡해줄 수 있습니다.
- 많은 설정 코드와 예외 처리가 필요합니다.
2. SQL 종속성.
- JDBC는 SQL 쿼리를 직접 사용하기 때문에, 데이터베이스마다 SQL 문법의 차이로 인해 호환성 문제가 발생할 수 있습니다.
- 즉, 데이터베이스 간에 이식성이 완벽하지 않을 수 있습니다.
3. ORM의 등장.
-
Hibernate
,JPA
와 같은 ORM(Object-Relational Mapping) 프레임워크는 JDBC보다 더 높은 수준의 추상화를 제공하여, 데이터베이스와의 상호작용을 더 쉽게 관리할 수 있습니다. - 아로 인해 복잡한 JDBC 코드를 간소화할 수 있습니다.
7️⃣ 요약
JDBC는 Java 애플리케이션에서 데이터베이스에 연결하고, SQL 쿼리를 실행하며, 결과를 처리하는 표준 API입니다.
JDBC는 다양한 데이터베이스 시스템과 상호작용할 수 있는 일관된 인터페이스를 제공하며, 연결 설정, SQL 쿼리 실행, 트랜잭션 관리, 결과 처리와 같은 작업을 수행합니다.
JDBC는 저수준 API로서 강력한 기능을 제공하지만, ORM 프레임워크가 복잡한 데이터베이스 작업을 보다 쉽게 처리할 수 있게 함으로써 최근에는 JDBC를 기반으로 더 고수준의 라이브러리가 자주 사용되고 있습니다.
🙋♂️ 라이브러리와 프레임워크의 차이점