TIL

TIL - 2024/06/28

기석김 2024. 6. 28. 20:03

트랜잭션

  • 데이터베이스의 상태를 변화시키기 위해서 수행하는 작업의 단위를 말합니다.
  • 요리로 치면 조리대를 의미하며 재료(데이터)들을 조회하여 생성/수정/삭제 후 최종 결과물을 만들때까지 하나의 작업을 트랜잭션으로 관리 할 수 있으며, 트랜잭션은 조리(데이터 처리) 중에 문제가 발생시 그전에 했던 변경을 아무일 도 없던것처럼 모두 되돌립니다.
  • 트랜잭션의 3가지 특징 (원자성, 일관성, 독립성)
  1. 원자성 (All or Nothing)
    1. 트랜잭션이 데이터베이스에 모두 반영되던가, 아니면 전혀 반영되지 않아야 한다는 것이다.
    2. 트랜잭션은 사람이 설계한논리적인 작업 단위로서, 일처리는 작업단위 별로 이루어 져야 사람이 다루는데 무리가 없다.
    3. 만약 트랜잭션 단위로 데이터가 처리되지 않는다면, 설계한 사람은 데이터 처리 시스템을 이해하기 힘들 뿐만 아니라, 오작동 했을시 원인을 찾기가 매우 힘들어질것이다.
  2. 일관성 (Keeps Data Correct)
    1. 트랜잭션의 작업 처리 결과가 항상 일관성이 있어야 한다는 것이다.
    2. 트랜잭션이 진행되는 동안에 데이터베이스가 변경 되더라도 업데이트된 데이터베이스로 트랜잭션이 진행되는것이 아니라,처음에 트랜잭션을 진행 하기 위해 참조한 데이터베이스로 진행된다.
    3. 이렇게 함으로써 각 사용자는 일관성 있는 데이터를 볼 수 있는 것이다.
  3. 독립성 (Independent)
    1. 둘 이상의 트랜잭션이 동시에 실행되고 있을 경우 어떤 하나의 트랜잭션이라도, 다른 트랜잭션의 연산에 끼어들 수 없다는 점을 가리킨다.

트랜잭션 관리와 보안 (DCL)

  • 조리대 트랜잭션 관리: 조리대에서의 사고(다른 요리재료와 섞이거나, 잘못 버려지는것)를 방지하기 위해 BEGIN, COMMIT, **ROLLBACK**으로 트랜잭션을 관리하는 방법을 배웁니다.
  • 접근 권한 설정하기: **GRANT**와 **REVOKE**로 누가 주방에 들어와서 요리를 할 수 있는지를 관리하는 방법을 배웁니다.
  • BEGIN 이란?
    • START TRANSACTION 과 동일하며 새로운 트랜잭션을 생성 및 시작하는 연산이다.
  • COMMIT 이란?
    • 하나의 트랜잭션이 성공적으로 끝났고, 데이터베이스가 일관성있는 상태에 있을 때, 하나의 트랜잭션이 끝났다라는 것을알려주기위해 사용하는 연산이다. 이 연산을 사용하면 수행했던 트랜잭션이 로그에 저장되며, 후에 Rollback 연산을 수행했었던 트랜잭션단위로 하는것을 도와준다.
  • ROLLBACK 이란?
    • 하나의 트랜잭션 처리가 비정상적으로 종료되어 트랜잭션의 원자성이 깨진경우, 트랜잭션을 처음부터 다시 시작하거나, 트랜잭션의 부분적으로만 연산된 결과를 다시 취소시킨다.

데이터베이스 Driver 동작 ✈️

📌 드라이버의 동작 방식은 마치 항공 교통 관제시스템✈️  과 비슷합니다. 항공기가 목적지에 안전하게 도착하기 위해서는 통제탑과의 지속적인 소통이 필요합니다. 마찬가지로, 데이터베이스 드라이버는 애플리케이션과 데이터베이스 간의 데이터 교환을 조절하고 관리하는 역할을 합니다.

드라이버의 동작 방식

  1. 연결 초기화
    • 요청 수신: 애플리케이션은 데이터베이스 작업을 시작하기 위해 드라이버에 연결을 요청합니다. 이는 마치 항공편✈️ 이 이륙 허가를 받기 위해 관제탑에 요청하는 것과 유사합니다.
    • 연결 설정: 드라이버는 데이터베이스 서버에 로그인하고 필요한 설정을 수행하여 연결을 완료합니다. 이 과정은 네트워크 정보, 인증 자격 증명 등을 사용하여 이루어집니다.
  2. SQL 전송 및 실행
    • SQL 명령 변환: 애플리케이션에서 발송된 SQL 명령을 받은 드라이버는 해당 명령을 데이터베이스가 이해할 수 있는 형태로 변환합니다. 이는 외국어를 현지 언어로 번역하는 통역사의 역할과 같습니다.
    • 명령 처리: 변환된 명령은 데이터베이스 서버로 전송되어 실행됩니다. 데이터베이스는 쿼리를 처리하고, 요구된 데이터를 검색하거나 데이터에 변화를 줍니다.
  3. 결과 처리
    • 결과 수신: 데이터베이스에서 작업의 결과를 보내면, 드라이버는 이 결과를 받아 애플리케이션에서 해석할 수 있는 형태로 변환합니다.
    • 결과 전달: 최종적으로, 드라이버는 이 결과를 애플리케이션에 전달합니다. 이는 관제탑이 항공기✈️에 착륙 지시를 내리는 과정과 유사하며, 애플리케이션은 이 정보를 사용자에게 표시하거나 다음 작업을 진행합니다.
  4. 연결 종료
    • 연결 해제: 작업이 완료되면, 드라이버는 데이터베이스 서버와의 연결을 종료합니다. 이는 비행이 끝난 후 항공기✈️가 공항 게이트에 도킹하는 것과 비슷하며, 자원을 정리하고 다음 세션을 위해 시스템을 초기화합니다.