🔍 JDBC 란?
- Java DataBase Connectivity 약자로, 자바 프로그램에서 데이터베이스에 접속하고 SQL 문을 실행하기 위한 API(응용 프로그래밍 인터페이스)이다.
- JDBC를 사용하면 다양한 데이터베이스 관리 시스템(DBMS)에 접속하여 데이터베이스와 상호작용할 수 있습니다. JDBC는 데이터베이스에 대한 연결, SQL 문 실행, 결과 처리 등 다양한 기능을 제공하여 자바 애플리케이션과 데이터베이스 간의 효율적인 통신을 도와준다.
🔍 JDBC의 구조
- JDBC를 이용해서 DB에 연결하기까지의 흐름은 다음과 같다. 사용자가 자바 애플리케이션에서 JDBC API를 이용해 DB에 접근하고자 한다. 하지만 JDBC API 자체는 인터페이스이므로 실제로 메서드들을 사용하기 위해서는 구현체가 필요하다. 그 구현체를 가져오는 역할은 DriverManager라는 클래스가 맡는다. 이 클래스가 Driver를 가져오면 이제 자바와 데이터베이스를 연결할 준비는 끝난다.
🔍 JDBC 동작 흐름
🔍 JDBC API 동작
💻 예시 코드
/*
JDBC 를 활용해서 데이터 가져오기
*/
import java.sql.*;
public class JdbcExample {
public static void main(String[] args) {
// JDBC 연결 정보
String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "username";
String password = "password";
// JDBC 드라이버 로딩
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 데이터베이스에 연결
conn = DriverManager.getConnection(url, username, password);
// SQL 쿼리 실행
String sql = "SELECT * FROM employees";
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
// 결과 처리
while (rs.next()) {
int empId = rs.getInt("employee_id");
String empName = rs.getString("employee_name");
int empAge = rs.getInt("employee_age");
System.out.println("사원 ID: " + empId + ", 이름: " + empName + ", 나이: " + empAge);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 자원 해제
try {
if (rs != null)
rs.close();
if (stmt != null)
stmt.close();
if (conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
📝 코드 설명
- JDBC 드라이버 로딩: Class.forName() 메서드를 사용하여 MySQL JDBC 드라이버를 로드한다.
- 데이터베이스 연결: DriverManager.getConnection() 메서드를 사용하여 데이터베이스에 연결합니다. URL, 사용자 이름 및 비밀번호를 전달하여 Connection 객체를 생성한다.
- SQL 쿼리 실행: Statement 객체를 생성하고, executeQuery() 메서드를 사용하여 SQL 쿼리를 실행한다. 이 예제에서는 "employees" 테이블의 모든 데이터를 조회하는 SELECT 문을 실행한다.
- 결과 처리: ResultSet 객체를 사용하여 쿼리 결과를 처리한다. next() 메서드를 호출하여 다음 행으로 이동하고, getInt(), getString() 등의 메서드를 사용하여 각 열의 값을 가져온다.
- 자원 해제: 모든 작업이 완료되면 ResultSet, Statement 및 Connection 객체를 닫아서 자원을 해제한다. 이는 메모리 누수를 방지하기 위한 중요한 단계이다. 위의 예제 코드를 실행하면 데이터베이스로부터 가져온 "employees" 테이블의 사원 정보가 출력된다.
❓ 단점
- 성능 문제: JDBC는 매번 데이터베이스에 연결해야 하므로 많은 연결 및 해제 작업이 필요하다. 이로 인해 오버헤드가 발생할 수 있고, 반복적인 연결 및 해제 작업은 성능 저하를 가져올 수 있다.
- 복잡성: SQL 쿼리를 작성하고 실행하고, 결과를 처리하는 등의 작업을 직접 구현해야 한다. 이로 인해 개발 시간이 오래 걸리고, 코드의 복잡성은 높아지고, 가독성이 떨어진다.
- 보안 문제: JDBC를 사용할 때 개발자가 직접 SQL 쿼리를 작성하고 실행하기 때문에 보안 취약점이 발생할 수 있다. 잘못된 입력 처리 또는 쿼리 문자열의 동적 생성 등으로 인해 SQL 인젝션과 같은 보안 문제가 발생할 수 있다.
- 유지보수의 어려움: JDBC는 데이터베이스와 밀접하게 연결된 코드를 작성해야 한다. 따라서 데이터베이스 스키마 변경이나 쿼리의 수정과 같은 유지보수 작업이 필요한 경우 코드의 많은 부분을 수정해야 할 수 있다.
'Java' 카테고리의 다른 글
[Java] 배열(Array) 특징 & 사용법 (0) | 2023.05.10 |
---|---|
[Java] 추상 클래스 & 인터페이스 (0) | 2022.06.03 |
[Java] Call by value ? & Call by Reference ? (0) | 2022.05.31 |
[Java] Enum ? 열거형 (Enumeration) (0) | 2022.05.27 |
[Java] 객체지향 5원칙 SOLID (0) | 2022.05.24 |