본문 바로가기

Spring Framework

Spring – JDBC Template

Introduction to JDBC (Java Database Connectivity)

JDBC는 Java Database Connectivity를 의미합니다. JDBC는 데이터베이스와 연결하고 쿼리를 실행하기 위한 자바 API입니다. 이것은 Sun Microsystems에서 제공하는 표준 추상화(API 또는 프로토콜)로, 다양한 데이터베이스와 통신하기 위한 자바 애플리케이션에 대한 명세입니다. JDBC는 자바 데이터베이스 연결 표준을 제공합니다. 데이터베이스에 접근이 필요한 프로그램을 작성하는 데 사용됩니다. JDBC는 데이터베이스 드라이버와 함께 데이터베이스 및 스프레드시트에 접근할 수 있습니다. 관계형 데이터베이스(RDB)에 저장된 엔터프라이즈 데이터는 JDBC API를 통해 접근할 수 있습니다.

 

Definition of JDBC(Java Database Connectivity) 

JDBC는 데이터베이스와 상호 작용하기 위해 자바 프로그래밍에서 사용되는 API(응용 프로그래밍 인터페이스)입니다. JDBC의 클래스와 인터페이스는 사용자가 요청한 내용을 지정된 데이터베이스로 보내는 애플리케이션을 가능하게 합니다.

 

 

Purpose of JDBC 

JAVA EE 기술을 사용하여 생성된 엔터프라이즈 애플리케이션은 애플리케이션 관련 정보를 저장하기 위해 데이터베이스와 상호 작용할 필요가 있습니다. 따라서 데이터베이스와의 효율적인 연결은 ODBC(Open Database Connectivity) 드라이버를 사용하여 달성될 수 있습니다. 이 드라이버는 JDBC와 함께 사용되어 Oracle, MS Access, Mysql, SQL 서버 데이터베이스와 같은 다양한 종류의 데이터베이스와 상호 작용하거나 통신하는 데 사용됩니다.

 

Components of JDBC 

JDBC가 데이터베이스와 상호 작용할 수 있는 네 가지 주요 구성 요소가 일반적으로 있습니다. 이들은 다음과 같습니다:

 

1. JDBC API: JDBC는 데이터베이스와 쉽게 통신할 수 있는 다양한 메소드와 인터페이스를 제공합니다. 이는 WORA( write once run anywhere: 한 번 작성하여 어디서나 실행) 능력을 나타내는 Java SE와 Java EE 플랫폼을 포함하는 다음과 같은 두 가지 패키지를 제공합니다. Java.sql 패키지는 JDBC API의 인터페이스와 클래스를 포함하고 있습니다. 

java.sql: 이 패키지는 관계형 데이터베이스에서 데이터 액세스 및 데이터 처리를 위한 API를 제공하며, Java 표준 에디션(Java SE)에 포함되어 있습니다.

javax.sql: 이 패키지는 connection pooling, 데이터 소스와의 statement pooling을 설정하기 위한 DataSource 인터페이스를 제공함으로써 java 패키지의 기능을 확장하며, Java 엔터프라이즈 에디션(Java EE)에 포함되어 있습니다.

JDBC는 또한 데이터베이스를 클라이언트 애플리케이션에 연결하기 위한 표준을 제공합니다.


 Statement

JDBC에서의 Statement는 데이터베이스에 대한 SQL 명령을 실행하기 위한 인터페이스입니다. 이는 자바 애플리케이션에서 데이터베이스와의 상호작용을 위해 사용되며, 주로 SQL 쿼리를 실행하거나 데이터베이스의 데이터를 조작하는 데 사용됩니다.

Statement 객체를 사용하는 방법은 대략 다음과 같습니다:
1. 연결 생성: 먼저 Connection 객체를 통해 데이터베이스와의 연결을 설정합니다.
2. Statement 객체 생성: 연결을 통해 Statement 객체를 생성합니다.
3. 쿼리 실행: Statement 객체를 사용하여 SQL 쿼리를 실행합니다. 이는 데이터를 검색(SELECT), 삽입(INSERT), 업데이트(UPDATE), 삭제(DELETE) 하는 등의 작업을 포함할 수 있습니다.
4. 결과 처리: SQL 쿼리의 결과를 받아서 처리합니다. 예를 들어, SELECT 쿼리의 결과는 ResultSet 객체에 저장됩니다.
5. 자원 해제: 사용이 끝난 후 Statement와 Connection 객체를 닫아 자원을 해제합니다.

 

JDBC는 Statement 외에도 비슷한 기능을 제공하는 PreparedStatement와 CallableStatement 인터페이스를 제공합니다. PreparedStatement는 매개변수화된 쿼리에 사용되며, CallableStatement는 데이터베이스의 저장 프로시저를 호출하는 데 사용됩니다. 이들은 각각 특정한 사용 사례에 더 적합하며, Statement보다 더 효율적이거나 편리할 수 있습니다.

PreparedStatement는 JDBC에서 제공하는 인터페이스로, 데이터베이스에 대한 파라미터화된(prepared) SQL 문을 실행하는 데 사용됩니다. Statement 인터페이스와 유사하게 작동하지만, PreparedStatement는 SQL 문에서 입력 값을 파라미터로 취급하므로 다양한 장점을 제공합니다:
1. SQL Injection 방지: 사용자 입력을 직접 SQL 문에 연결하지 않고 파라미터로 사용함으로써 SQL 인젝션 공격을 방지합니다.
2. 성능 향상: PreparedStatement는 미리 컴파일되어 재사용될 수 있습니다. 이는 반복적인 쿼리 수행 시 성능을 향상시킵니다.
3. 유지보수 용이: SQL 문과 자바 코드가 분리되어 있어 코드가 더 읽기 쉽고 유지보수하기 편리합니다.
4. 유연한 매개변수 설정: 다양한 데이터 타입의 매개변수를 쉽게 설정할 수 있습니다.

PreparedStatement의 사용 과정은 다음과 같습니다:
1. PreparedStatement 생성: Connection 객체를 통해 SQL 문을 포함한 PreparedStatement 객체를 생성합니다. 이때 SQL 문은 '?'를 통해 매개변수를 지정합니다.
PreparedStatement pstmt = con.prepareStatement("INSERT INTO Users (name, email) VALUES (?, ?)");

2. 파라미터 설정: setXXX 메서드를 사용하여 각 파라미터에 값을 설정합니다. 여기서 XXX는 데이터 타입에 따라 달라집니다. 예를 들어, setString, setInt 등이 있습니다.
pstmt.setString(1, "John Doe"); // 첫 번째 매개변수 설정
pstmt.setString(2, "john@example.com"); // 두 번째 매개변수 설정

3. 쿼리 실행: executeQuery 또는 executeUpdate 메서드를 사용하여 SQL 문을 실행합니다.
int rowsAffected = pstmt.executeUpdate(); // INSERT, UPDATE, DELETE 등

4. 자원 해제: 사용이 끝난 후 PreparedStatement 객체와 Connection 객체를 close 합니다.

PreparedStatement는 데이터베이스 작업을 안전하고 효율적으로 수행할 수 있는 방법을 제공하며, 특히 사용자 입력을 포함한 쿼리를 실행할 때 권장됩니다.

2. JDBC Driver Manager: JDBC는 애플리케이션에 데이터베이스 특정 드라이버를 로드하여 데이터베이스와의 연결을 설정합니다. 이는 사용자 요청을 처리하기 위해 데이터베이스에 특정한 호출을 하기 위해 사용됩니다.

 

3. JDBC Test Suite: JDBC 드라이버가 수행하는 연산(예: insert, delete, update)을 테스트하는 데 사용됩니다.

 

 

Architecture of JDBC

 

 

설명:

1. 애플리케이션: 자바 애플릿 또는 서블릿으로, 데이터 소스와 통신합니다.
2. JDBC API: JDBC API는 자바 프로그램이 SQL 문을 실행하고 결과를 검색할 수 있게 해줍니다. JDBC API에 정의된 중요한 클래스와 인터페이스는 다음과 같습니다:
3. DriverManager: JDBC 아키텍처에서 중요한 역할을 합니다. 데이터베이스 특정 드라이버를 사용하여 엔터프라이즈 애플리케이션을 데이터베이스에 효과적으로 연결합니다.
4. JDBC Drivers: JDBC를 통해 데이터 소스와 통신하기 위해서는 해당 데이터 소스와 지능적으로 통신하는 JDBC 드라이버가 필요합니다.

 

JDBC Drivers

Java Database Connectivity (JDBC)는 프로그래밍 언어 자바를 위한 응용 프로그래밍 인터페이스(API)로, 클라이언트가 특히 관계형 데이터베이스와 같은 모든 종류의 테이블 데이터에 접근하는 방법을 정의합니다. JDBC 드라이버는 Sun Microsystem에 의해 개발되었지만, 지금은 Oracle의 일부입니다. JDBC 드라이버에는 4가지 타입이 있습니다. 이는 Oracle Corporation의 Java 표준 에디션 플랫폼의 일부입니다. JDBC는 자바 애플리케이션과 데이터베이스 사이의 중간 계층 인터페이스로 작동합니다.

JDBC 클래스는 자바 패키지 java.sql과 javax.sql에 포함되어 있습니다.

JDBC는 다음과 같은 세 가지 프로그래밍 활동을 관리하는 자바 애플리케이션을 작성하는 데 도움이 됩니다:

1. 데이터베이스와 같은 데이터 소스에 연결합니다.
2. 데이터베이스에 쿼리를 보내고 업데이트 문을 전송합니다.
3. 쿼리에 대한 답변으로 데이터베이스에서 받은 결과를 검색하고 처리합니다.

 

JDBC 구조

 

현재 사용되고 있는 JDBC 드라이버 타입은 다음과 같습니다:

1. Type-1 driver or JDBC-ODBC bridge driver: 이 타입의 드라이버는 Java SE 8부터 공식적으로 지원되지 않습니다. 따라서 현재는 일반적으로 사용되지 않습니다.

2. Type-2 driver or Native-API driver: 이 드라이버는 클라이언트 측에 데이터베이스 특정 라이브러리가 필요합니다. 일부 애플리케이션에서 여전히 사용되지만, 네이티브 코드의 설치와 관리의 복잡성으로 인해 점차 사용이 감소하고 있습니다.

3. Type-3 driver or Network Protocol driver: 이 드라이버는 중간 서버를 통해 데이터베이스에 연결합니다. 이 서버가 클라이언트 요청을 데이터베이스 호출로 변환합니다. 이 타입은 멀티티어 환경에서 여전히 사용되고 있으나, 다소 복잡하고 추가적인 서버 구성이 필요합니다.

4. Type-4 driver or Thin driver: 이 드라이버는 데이터베이스 특정 프로토콜을 사용하여 직접 데이터베이스에 연결합니다. 클라이언트 측에 별도의 설치가 필요 없으며, 현재 가장 널리 사용되는 드라이버 타입입니다. 이는 간결성, 쉬운 설치 및 배포, 좋은 성능 때문에 많은 현대 Java 애플리케이션에서 선호됩니다.

따라서 현대적인 애플리케이션 개발에서는 주로 Type-4 드라이버가 사용됩니다. Type-2 및 Type-3 드라이버는 특정 상황에서 여전히 사용되지만, 그 사용 범위는 제한적입니다.

 

Thin driver – Type 4 driver (fully Java driver)

Type-4 드라이버는 네이티브 프로토콜 드라이버로도 불립니다. 이 드라이버는 데이터베이스와 직접 상호 작용합니다. 네이티브 데이터베이스 라이브러리가 필요하지 않기 때문에, 이는 또한 Thin Driver(씬 드라이버)로 알려져 있습니다.

 

 

장점
1. 네이티브 라이브러리와 미들웨어 서버가 필요 없으므로, 클라이언트 측이나 서버 측 설치가 필요 없습니다.
2. 전적으로 자바 언어로 작성되었으므로, 이들은 이식 가능한 드라이버입니다.

단점
데이터베이스가 변경되면, 드라이버도 변경해야 합니다. 왜냐하면 이는 데이터베이스에 의존적이기 때문입니다.

 

 

Spring – JDBC Template

Spring JDBC 템플릿은 코드의 단순성과 가독성을 향상시키는 유창한 API를 제공하며, JDBC 템플릿은 데이터베이스에 연결하고 SQL 쿼리를 실행하는 데 사용됩니다.

JDBC(Java Database Connectivity)는 클라이언트가 데이터베이스에 접근하는 방법을 정의하는 응용 프로그래밍 인터페이스(API)입니다. 이는 자바 데이터베이스 연결을 위한 데이터 액세스 기술입니다. JDBC는 데이터베이스에서 쿼리를 실행하고 데이터를 업데이트하는 메서드를 제공하며, 관계형 데이터베이스에 중점을 둡니다. JDBC는 SQL 작업을 위한 자연스러운 자바 인터페이스를 제공합니다. 애플리케이션 개발을 위한 "순수 자바" 솔루션을 제공하기 위해 JDBC가 필요합니다. JDBC API는 데이터베이스와 연결하기 위해 JDBC 드라이버를 사용합니다.

 

'Spring Framework' 카테고리의 다른 글

토비의 스프링 1.3  (0) 2024.04.09
토비의 스프링 1. 오브젝트와 의존관계  (0) 2024.04.09
PlatformTransactionManager  (0) 2024.04.09
Spring Tool Suite 4  (0) 2024.04.09
AOP  (0) 2024.04.09