목차
JDBC 구성 요소(아키텍처)
JDBC 아키텍처는 Java 애플리케이션과 데이터베이스 사이의 상호작용을 담당하는 여러 구성 요소로 이루어져 있습니다. 각 구성 요소는 특정 역할을 수행하며, 이들이 어떻게 작동하는지 이해하는 것이 중요합니다.
- DriverManager
- Driver
- Connection
- Statement
- ResultSet
- SQLException
1. DriverManager
- DriverManager 는 JDBC 드라이버들을 관리하는 클래스이다. 데이터베이스 연결을 설정하기 위해 사용된다.
- 애플리케이션이 데이터베이스에 연결 요청을 하면, DriverManager 는 적절한 JDBC 드라이버를 찾아 연결을 설정합니다.
마치 여행사와 같습니다. 여행사는 여러 항공사와 협력하여 고객에게 적합한 항공편을 찾아주는 역할을 합니다.
JDBC 드라이버 : JDBC 드라이버는 특정 데이터베이스에 연결하고 SQL 쿼리를 실행할 수 있도록 하는 자바 클래스이다. 각 데이터베이스 벤더(예: MySQL, Oracle, PostgreSQL 등)는 자사 데이터베이스와 상호작용할 수 있는 JDBC 드라이버(자바 클래스)를 제공한다.
- Type 1: JDBC-ODBC Bridge Driver
- Type 2: Native-API Driver
- Type 3: Network Protocol Driver
- Type 4: Thin Driver (가장 많이 사용됨)
연결 설정도 관리 한다. DriverManager는 애플리케이션이 데이터베이스 URL, 사용자 이름, 비밀번호 등을 제공하면, 이를 이용해 적절한 드라이버를 통해 데이터베이스와 연결을 설정함.
예시 코드
Connection connection =
DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "root", "password");
2. Driver
- Driver는 JDBC 드라이버 인터페이스를 구현한 클래스이다. 데이터베이스와의 연결을 실제로 처리한다.
- 데이터베이스에 연결하고 SQL 쿼리를 실행하는 데 필요한 방법을 제공한다.
운전기사와 같습니다. 운전기사는 여행사가 예약한 항공편을 실제로 운행합니다.
예시 코드
// 1. MySQL JDBC 드라이버 로드
Driver myDriver = new com.mysql.cj.jdbc.Driver();
DriverManager.registerDriver(myDriver);
-----------------------------------------------------
// 2. Oracle JDBC 드라이버 로드
Driver myDriver = new oracle.jdbc.OracleDriver();
DriverManager.registerDriver(myDriver);
3. Connection
- Connection 객체는 데이터베이스와의 연결을 나타낸다.
- SQL 쿼리를 실행하고, 트랜잭션을 관리하며, 연결을 닫는 등의 작업을 수행한다.
데이터베이스와의 전화선과 같습니다. 전화선을 통해 양방향 통신이 이루어집니다.
예시 코드
Connection connection =
DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "root", "password");
4. Statement
- 설명: Statement 객체는 SQL 쿼리를 데이터베이스에 보내기 위해 사용된다.
- 역할: SQL 쿼리를 실행하고 결과를 받아온다.
데이터베이스에 보내는 편지와 같습니다. 편지를 보내면 답장을 받게 됩니다.
예시 코드
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM users");
5. ResultSet
- 설명: ResultSet 객체는 SQL 쿼리의 결과를 포함한다.
- 역할: 데이터베이스에서 반환된 데이터를 탐색하고 읽는 데 사용된다.
편지의 답장과 같습니다. 답장에는 요청한 정보가 포함되어 있습니다.
예시 코드
while (resultSet.next()) {
System.out.println("User ID: " + resultSet.getInt("id"));
System.out.println("User Name: " + resultSet.getString("name"));
}
6. SQLException
- 설명: SQLException은 JDBC 작업 중 발생하는 모든 예외를 처리한다.
- 역할: 데이터베이스 작업 중 오류가 발생하면 예외를 던져 문제를 알려준다.
전화 연결 중 문제가 발생하면 알람이 울리는 것과 같습니다.
예시 코드
try {
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "root", "password");
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM users");
} catch (SQLException e) {
e.printStackTrace();
}
JDBC 드라이버 유형
- Type 1: JDBC-ODBC Bridge Driver
- Type 2: Native-API Driver
- Type 3: Network Protocol Driver
- Type 4: Thin Driver
드라이버 유형 | 설명 | 장점 | 단점 | 사용 예 |
Type 1: JDBC-ODBC Bridge Driver | JDBC 호출을 ODBC 호출로 변환하여 데이터베이스와 상호작용하는 드라이버입니다. | 다양한 ODBC 호환 데이터베이스에 접근 가능 | 성능 저하, 네이티브 코드 의존, 네트워크 환경 사용 불가 | 현재 거의 사용되지 않음 |
Type 2: Native-API Driver | 네이티브 라이브러리를 사용하여 데이터베이스와 상호작용합니다. | Type 1 드라이버보다 성능 우수 | 네이티브 코드 의존, 플랫폼 독립적이지 않음, 각 데이터베이스별 별도 드라이버 필요 | 일부 기업 환경에서 사용되지만 현재는 잘 사용되지 않음 |
Type 3: Network Protocol Driver | JDBC 호출을 미들웨어 서버로 전달하고, 미들웨어 서버는 이를 데이터베이스 특정 프로토콜로 변환하여 상호작용합니다. | 클라이언트에서 네이티브 코드 필요 없음, 플랫폼 독립적, 네트워크 환경에 적합 | 미들웨어 서버 설치 및 관리 필요 | 대규모 엔터프라이즈 환경에서 유용 |
Type 4: Thin Driver | 네이티브 라이브러리나 미들웨어 서버 없이 직접 네트워크를 통해 데이터베이스와 상호작용하는 순수 Java로 작성된 드라이버입니다. | 플랫폼 독립적, 설치 간단, 성능 우수 | 특정 데이터베이스에 종속 | 현재 대부분의 Java 애플리케이션에서 사용 (MySQL, Oracle 등) |
'Java > 자료구조' 카테고리의 다른 글
JDBC 기본 사용법 - 4 (0) | 2024.06.11 |
---|---|
JDBC 설치 및 설정 - 3 (0) | 2024.06.11 |
JDBC란 뭘까? (0) | 2024.06.10 |
Map 인터페이스 - 9 (0) | 2024.05.13 |
Set 인터페이스 - 8 (0) | 2024.05.10 |