본문 바로가기
  • hello world
DataBase

[DataBase] Transaction (Tx)

by JJoajjoa 2023. 9. 1.

 

 

Transaction

트랜잭션 :

쪼갤 수 없는 업무 처리의 최소 단위

 

데이터베이스에서 한 개 이상의 작업을

논리적으로 묶은 작업의 단위

 

데이터베이스의 일관성과 안정성을 보장하기 위해 사용

 

일련의 작업들이

모두 성공적으로 수행되거나

모두 취소되어야 함

 

데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위

또는 한꺼번에 모두 수행되어야 할 일련의 연산들 

 

데이터베이스 시스템에서 병행제어 및 회복작업 시 처리되는 작업의 논리적인 단위로 사용됨

 

사용자가 시스템에 대한 서비스 요구시 시스템이 응답하기 위한 상태 변환 과정의 작업단위로 사용됨

 

 

 

 

 

ACID

데이터의 무결성을 보장하기 위햐여 DBMS의 트랜잭션이 가져야 할 특성

더보기
  • 원자성 (Atomicity)
    - 트랜잭션은 하나의 원자적 단위로 간주됨
    - 모든 작업이 성공적으로 수행되거나 혹은 하나라도 실패할 경우
      모든 작업이 취소되어 이전상태로 롤백됨

  • 일관성 (Consistency)
    - 트랜잭션이 실행 전과 후에도 데이터베이스는 일관된 상태를 유지해야 함
    - 트랜잭션이 수행하는 작업들은 모두 정의된 규칙과 제약조건을 준수하여 실행되기 때문에
      데이터베이스를 항상 유효한 상태로 유지함

  • 독립성 (Isolation)
    - 여러개의 트랜잭션이 실행 전과 후에도(동시에 실행될 때)
      각각의 트랜잭션은 다른 트랜잭션에 영향을 주지 않고
      독립적으로 실행되는 것처럼 보여야 함
    - 자바의 Thread와 비슷
    - 한 트랜잭션이 다른 트랜잭션에서 변경한 내용을 볼 수 없음
      변경내용은 커밋 전까지 다른 사용자에게 공개되지 않음
    - LOCK (밑에 설명 있음)


  • 지속성 (Durability)
    - 성공적으로 완료된 트랜잭션에서 발생한 변경 사항은 영구적으로 저장되어야 함
    - 시스템 장애 또는 데이터 손실, 전원 손실 등의 문제들이 발생하더라도
      데이터는 안전하게 보존됨

 

 

 

 

 

트랜잭션 명령어 

DBMS에서 사용

트랜잭션의 시작 종료 · 커밋 · 롤백 과 같은 작업들을 실행할 수 있음

 

더보기
  • ROLLBACK
    - 현재 진행 중인 트랜잭션의 변경 사항을 모두 취소하고 이전 상태로 되돌림

      ROLLBACK;

  • COMMIT
    - 현재 진행 중인 트랜잭션의 변경 사항을 영구적으로 저장하고 트랜잭션 종료
    - 커밋 이전에 수행한 모든 데이터 조작이 실제로 데이터베이스에 반영됨

      COMMIT;


  • BEGIN / START TRANSACTION
    - 새로운 트랜잭션을 시작하는 명령어
    - 이 명령어를 실행하면 DBMS에서 모든 작업을 트랜잭션으로 그룹화 해줌
      사실상 제일 위에 생략되어있는 느낌
    - DBMS 별로 명령어가 다를 수 있음

      BEGIN;
      START TRANSACTION;


  • SAVEPOINT
    - 현재 트랜잭션 내에서 지정된 포인트까지만 롤백할 수 있는 포인트 설정
    - SAVEPOINT를 사용하여 ROLLBACK 범위를 제한함

      SAVEPOINT savepoint_name;


  • RELEASE SAVEPOINT
    - 해당 SAVEPOINT 를 해제할 수 있는 명령어

      RELEASE SAVEPOINT savepoint_name;


  • AUTOCOMMIT
    - 각 SQL 문이 개별적인 자동 COMMIT 단위로 처리됨
    - COMMIT 없이도 SQL 문의 실행결과가 바로 반영됨

      AUTOCOMMIT;

 

 

 

 

Session

 

세션 :

서버와 연관 

클라이언트와 서버 간의 상호작용을 유지하기 위한 일련의 연결 상태

 

세션은

클라이언트가 서버에 접속해서 작업을 하는 동안

서버간의 통신과 관련된 정보를 저장함

>> 머 하고 있는지 계속 지켜보는 애

 

더보기
  • 유지성
    - 세션은 클라이언트가 로그아웃하거나 일정시간동안 비활성 상태인 경우에도
      일정 지속시간동안 남아있음


  • 상태정보 저장
    - 서버 간의 통신과 관련된 정보를 저장


  • 고유 식별자
    - 각 세션에는 고유한 식별자(Session ID)가 존재함(할당됨)
      이 식별자를 쿠키 또는 URL을 통해 클라이언트에게 전달하여
      해당 세션을 식별하는데 사용


  • 보안
    - 세션은 인증 및 권한 부여와 같은 보안 요구사항을 처리하기위해 사용되기도 함
      사용자 인증 후에만 성립되는 안전한 연결로 중요한 데이터를 처리할 수 있도록 도와줌

  • 서버 리소스 사용
    - 각 세션은 서버의 메모리 또는 디스크 공간 등에서 리소스를 소비함
      그래서 많은 수의 동시접속자가 있는 경우 리소스 소비가 많아짐

 

 

 

 

 

트랜잭션 LOCK

 

데이터베이스에서 여러 트랜잭션이 접근하는 경우

데이터의 일관성과 무결성을 위해 사용됨

 

LOCK을 이용해서 독립성을 유지시킬 수 있음

 

트랜잭션이 데이터를 읽거나 수정하는 동안

다른 트랜잭션들의 해당 데이터로의 접근을 막아줌

 

더보기
  • Shared LOCK (공유)
    - 한 트랜잭션이 데이터를 읽기위해 사용하는 잠금

  • Exclusive LOCK (배타)
    - 한 트랜잭션이 데이터를 수정하거나 삭제하기 위해 사용하는 잠금

 

'DataBase' 카테고리의 다른 글

[DataBase] 객체 종류  (0) 2023.09.01
[DataBase] SQL : DDL  (0) 2023.09.01
[DataBase] SQL : DML (INSERT · UPDATE · DELETE)  (0) 2023.09.01
[DataBase] Subquery 서브쿼리 하위질의  (0) 2023.08.31
[OracleDB] SCOTT 계정 실습문제  (0) 2023.08.29