Database 16

DBCP (Database Connection Pooling)

데이터베이스 커넥션은 데이터베이스와의 연결을 효율적으로 관리하기 위해 TCP 연결을 사용한다. 데이터베이스 커넥션은 생성과 종료에 비용이 많이 들기 때문에, 커넥션 풀을 사용하여 이러한 비용을 줄인다. 커넥션 풀을 통해 미리 생성된 커넥션을 재사용함으로써 성능을 향상시키고 자원 소모를 줄인다.  각 커넥션의 설정은 클라이언트와 DB 서버 양쪽에서 모두 잘 이해하고 설정해야 한다. DB 서버 설정1. max_connections클라이언트와 DB 서버 간의 최대 동시 연결 수를 설정한다.max_connections 값이 4로 설정된 경우, 데이터베이스 서버는 동시에 최대 4개의 클라이언트 연결을 허용한다.DBCP의 최대 커넥션 수(maxTotal)가 DB 서버의 max_connections보다 크면, DB ..

Database 2024.08.17

MVCC (Multiversion Concurrency Control)

MVCC의 핵심은 데이터의 여러 버전을 유지하여 트랜잭션이 시작된 시점에 맞춰 데이터를 읽을 수 있도록 하는 것이다. 이를 통해 각 트랜잭션은 자신이 시작된 시점의 데이터 스냅샷을 사용하여 일관성 있는 읽기를 보장받게 되며, 읽기 작업과 쓰기 작업이 서로를 차단하지 않는 환경을 가능하게 한다. 즉, 한 트랜잭션이 데이터를 수정하는 동안 다른 트랜잭션이 그 데이터를 읽더라도 서로 간섭하지 않게 된다.이러한 MVCC의 동작은 데이터베이스 성능을 크게 향상시키는 장점이 있지만, 각 데이터에 대한 추가적인 버전 관리를 필요로 하므로 이를 효율적으로 처리하기 위한 메커니즘이 중요하다. 격리 수준과 MVCC의 적용트랜잭션의 격리 수준(Isolation Level)은 여러 트랜잭션이 동시에 실행될 때 데이터의 일관성..

Database 2024.08.17

Lock & 2PL

Write-Lock (Exclusive Lock)Write-Lock은 데이터베이스에서 특정 데이터 항목에 대해 쓰기 operation이 수행될 때, 해당 데이터 항목에 배타적 잠금을 거는 메커니즘이다.특징:배타적 잠금: 한 트랜잭션이 데이터를 수정하기 위해 write-lock을 획득하면, 다른 트랜잭션은 해당 데이터에 대해 읽기(read)나 쓰기(write) operation을 수행할 수 없다. 이는 데이터의 무결성을 유지하기 위한 중요한 메커니즘이다.경합 가능성: 여러 트랜잭션이 동일한 데이터에 대해 동시에 write-lock을 시도하면 경합이 발생하며, 이로 인해 데드락(교착 상태) 등이 발생할 수 있다.예시:T1 트랜잭션이 변수 x의 값을 20으로 변경하기 위해 write-lock을 획득한다.T2 ..

Database 2024.08.17

Isolation Level

다중 트랜잭션에서 발생할 수 있는 읽기 및 쓰기 문제문제 유형설명예시Dirty Read커밋되지 않은 데이터를 읽는 상황T1이 피자 가격을 2만 원으로 변경 중,T2가 이 가격을 읽고 T1이 롤백되면 T2의 결과는 잘못된 값이 된다.Non-Repeatable Read같은 트랜잭션 내에서 데이터 값이 달라지는 상황T1이 피자 가격을 3만 원으로 읽고,T2가 2만 원으로 변경 후 커밋, T1이 다시 읽을 때 2만 원으로 변경된 값을 읽는다.Phantom Read트랜잭션 중에새로운 데이터가 추가되거나 기존 데이터가 삭제되어결과가 달라지는 상황T1이 1만 원 이하의 피자를 조회하고,T2가 1만 원 이하로 피자를 추가 후T1이 다시 조회 시 새 피자가 포함된다.Dirty Write커밋되지 않은 트랜잭션이다른 트랜잭..

Database 2024.08.16

Recoverability

Unrecoverable Schedule트랜잭션 간의 의존성으로 인해, 일부 트랜잭션이 롤백될 때 데이터베이스가 이전의 일관된 상태로 복구될 수 없는 상황을 의미한다. 이러한 스케줄이 발생하면 데이터 일관성에 심각한 문제가 생길 수 있으므로, DBMS는 Unrecoverable Schedule을 허용해서는 안 된다.예시T1이 데이터를 변경한다.T1이 커밋하기 전에 T1이 변경한 데이터를 읽고 T2가 커밋한다.T1이 어떤 이유로 롤백되면, T2가 읽어 간 데이터는 잘못된 데이터가 되고, T2의 결과는 잘못된 데이터에 기반하게 된다. T2는 이미 커밋되었기 때문에, T1을 롤백한다고 하더라도 전체 시스템의 일관성을 회복할 수 없게 된다. Recoverable Schedule스케줄 내에서 트랜잭션은 자신이 읽..

Database 2024.08.16

Serializability

Lost Update두 개 이상의 트랜잭션이 동일한 데이터를 동시에 갱신하려고 할 때 발생하는 문제이다. 이로 인해 한 트랜잭션의 결과가 다른 트랜잭션에 의해 덮어써져 이전의 변경 내용이 사라지게 된다.예시:초기 상태: B의 계좌 잔액은 100만 원이다.트랜잭션 1 (T1): A가 B에게 20만 원을 입금한다.트랜잭션 2 (T2): B가 본인 계좌에 30만 원을 입금한다.Lost Update 시나리오:T1과 T2가 동시에 B의 잔액을 읽어온다. 두 트랜잭션은 B의 현재 잔액을 각각 100만 원으로 인식한다.T1이 B의 잔액에 20만 원을 더해 120만 원으로 업데이트한다.T2가 B의 잔액에 30만 원을 더해 130만 원으로 업데이트한다.최종 결과: B의 잔액은 130만 원이 되며, T1에서 수행한 20만..

Database 2024.08.16

Trigger

데이터베이스에서 특정 이벤트가 발생할 때 자동으로 실행되는 특별한 유형의 프로시저이다.특정 테이블에서 데이터가 변경될 때(INSERT, UPDATE, DELETE) 자동으로 실행되며, 보통 데이터 무결성을 유지하거나 자동으로 로그를 기록하는 데 사용된다.자동화: 데이터 변경 시 자동으로 실행되므로, 데이터 무결성을 유지하거나 특정 작업을 자동화할 수 있다.일관성: 동일한 작업을 반복적으로 수행할 수 있어 데이터베이스 내에서 일관성을 유지할 수 있다.보안: 트리거를 사용해 민감한 데이터 변경을 감지하고 로그를 기록하거나 특정 행동을 취할 수 있다.가시성 부족: 트리거는 자동으로 실행되므로, 디버깅이 어렵고 예상치 못한 동작을 유발할 수 있다.성능 저하: 잘못 설계된 트리거는 성능 저하를 초래할 수 있다. ..

Database 2024.08.16

Stored Procedure

데이터베이스 관리 시스템(RDBMS)에 저장되어 특정 작업을 수행하는 로직을 정의한 코드 블록이다.여러 SQL 작업을 절차적으로 수행할 수 있도록 지원하며, 복잡한 비즈니스 로직을 캡슐화하여 데이터베이스에서 직접 실행할 수 있다.하나의 구체적인 작업을 수행하는 데 적합하다.조건문을 사용하여 로직을 분기 처리할 수 있으며, 반복문을 통해 반복 작업을 수행할 수 있다.에러 처리를 위한 로직을 포함할 수 있으며, 특정 상황에 따라 에러를 발생시킬 수도 있다.입력(IN), 출력(OUT), 입력 및 출력(INOUT) 파라미터를 사용하여 데이터를 주고받을 수 있다. 예제 1: 두 정수의 곱셈 결과를 반환하는 프로시저두 개의 정수를 입력받아 그 곱을 출력하는 프로시저.DELIMITER $$CREATE PROCEDUR..

Database 2024.08.16

Stored Function

사용자가 정의한 함수로 DBMS에 저장되고 사용된다.SQL의 SELECT, INSERT, UPDATE, DELETE 구문에서 사용할 수 있다.반복적인 작업을 처리하기 위해 루프를 돌리거나, CASE 키워드를 사용하여 값에 따라 분기 처리할 수 있다.에러 핸들링이나 에러 발생 같은 다양한 동작을 정의할 수 있다.유틸리티 함수로 사용하는 것이 적합하다.비즈니스 로직을 스토어드 함수에 두는 것은 권장되지 않는다. 비즈니스 로직은 데이터베이스 외부에서 처리하거나 애플리케이션 계층에서 유지 관리하는 것이 바람직하다. 예제 1: 임직원 ID 생성 함수임직원의 ID를 10자리 정수로 랜덤 하게 발급하며, ID의 맨 앞자리는 1로 고정된다.DELIMITER $$CREATE FUNCTION id_generator()RE..

Database 2024.08.15

데이터베이스 기본 개념

Database (DB)데이터베이스는 전자적으로 저장되고 관리되는 관련된 데이터들의 조직화된 집합이다. 데이터베이스는 특정 목적을 위해 데이터를 구조화하고 저장하여 효율적으로 접근하고 관리할 수 있도록 한다. Database Management System (DBMS)데이터베이스 관리 시스템(Database Management System, DBMS)은 사용자에게 데이터베이스를 정의, 생성, 관리하는 기능을 제공하는 소프트웨어 시스템이다.데이터베이스 구조를 정의할 때 생성되는 메타데이터(데이터에 관한 데이터) 또한 DBMS에 의해 저장되고 관리된다.DBMS는 데이터베이스를 관리하고 보호하며, 여러 사용자가 동시에 접근할 수 있도록 한다. Database System데이터베이스 시스템은 데이터베이스(DB)..

Database 2024.08.15