자바는 데이터베이스와의 연결 및 데이터 입출력 작업을 수행하기 위해 JDBC(Java Database Connectivity) 라이브러리를 제공합니다. JDBC는 자바 애플리케이션과 데이터베이스 간의 표준 인터페이스를 제공하여 데이터베이스에 쉽게 접근하고 관리할 수 있도록 돕습니다.
JDBC를 사용하면 다음과 같은 작업을 수행할 수 있습니다:
데이터베이스 연결 (Database Connection):
SQL 쿼리 실행 (Executing SQL Queries):
트랜잭션 관리 (Transaction Management):
메타데이터 조회 (Querying Metadata):
배치 처리 (Batch Processing):
저장 프로시저 및 함수 호출 (Calling Stored Procedures and Functions):
JDBC는 자바 표준 API로 제공되므로, 대부분의 데이터베이스 관리 시스템(DBMS)과 호환됩니다. 따라서 JDBC를 사용하면 다양한 데이터베이스에 대한 액세스를 표준화된 방식으로 처리할 수 있습니다.
트랜잭션은 데이터베이스에서 한 번에 수행되어야 하는 연산들의 논리적인 단위를 말합니다. 이것은 데이터베이스 관리 시스템(DBMS)에서 일반적으로 지원하는 개념으로, 데이터베이스의 일관성과 무결성을 보장하기 위해 사용됩니다. 트랜잭션은 다음과 같은 특징을 가집니다:
원자성 (Atomicity): 트랜잭션은 원자적(Atomic)으로 간주되어야 합니다. 이는 트랜잭션 내의 모든 연산이 하나의 단위로 동작하고, 모든 연산이 성공하거나 실패할 경우 모두 롤백되어야 함을 의미합니다. 다시 말해, 트랜잭션은 전체적으로 성공하거나 전체적으로 실패해야 합니다.
일관성 (Consistency): 트랜잭션 전후에 데이터베이스는 일관된 상태여야 합니다. 트랜잭션이 실행되기 전과 후에 데이터베이스의 일관성이 유지되어야 합니다.
격리성 (Isolation): 여러 트랜잭션이 동시에 실행될 때, 각 트랜잭션은 다른 트랜잭션의 영향을 받지 않고 독립적으로 실행되는 것처럼 보여야 합니다. 이는 각 트랜잭션이 서로의 연산에 영향을 주지 않고 독립적으로 실행되어야 함을 의미합니다.
지속성 (Durability): 트랜잭션이 성공적으로 완료되면, 그 결과는 영구적으로 유지되어야 합니다. 즉, 데이터베이스의 변경은 영구적으로 저장되어야 하며, 시스템 장애 또는 중단 시에도 유지되어야 합니다.
트랜잭션은 데이터베이스에서 데이터의 무결성과 일관성을 유지하고 동시성 제어를 보장하는 데 중요한 역할을 합니다. 따라서 데이터베이스에서 여러 연산을 하나의 단위로 묶어 트랜잭션으로 처리함으로써 데이터베이스의 안전성을 보장할 수 있습니다.
다수의 클라이언트 요청을 처리하는 서버 프로그램은 일반적으로 커넥션 풀(Connection Pool)을 사용하여 효율적으로 데이터베이스 연결을 관리합니다. 커넥션 풀은 다음과 같은 방식으로 동작합니다:
미리 생성된 Connection: 커넥션 풀은 초기화 단계에서 일정량의 데이터베이스 연결을 미리 생성하고 풀(pool)에 저장합니다. 이는 데이터베이스 서버와의 연결 설정에 드는 비용을 줄이고, 연결을 필요할 때마다 새로운 연결을 만드는 오버헤드를 피하기 위함입니다.
요청에 따른 Connection 제공: 클라이언트 요청이 도착하면, 서버는 커넥션 풀에서 Connection을 가져와서 요청을 처리하는 데 사용합니다. 이때 가져온 Connection은 풀에서 제거됩니다.
연결 반환: 요청 처리가 완료되면, 사용한 Connection은 다시 커넥션 풀에 반환됩니다. 이는 해당 연결을 다시 재사용할 수 있도록 하고, 연결을 새로 만들 필요를 없애서 성능을 향상시킵니다.