트랜잭션(Transcation)과 프로시저

jiji·2023년 10월 31일
1

DataBase

목록 보기
6/14

1. 트랜잭션이란?

트랜잭션(Transcation) 이란 여러개의 작업을 하나로 묶은 실행 유닛을 말하며, 데이터베이스 관점에서는 데이터베이스의 상태를 변환시키는 기능을 수행하기 위한 하나 이상의 쿼리를 모아 놓은 하나의 작업 단위를 말한다.

☝🏻 데이터베이스의 상태를 바꾼다는 것은?
: SELECT , INSERT, UPDATE, DELETE

☝🏻 작업의 단위란?
많은 질의어 명령문들을 사람이 정하는 기준에 따라 정하는 것을 의미한다.
예를 들면, 게시판에 글을 작성(INSERT) -> 최신 정보 유지를 위해 다시 SELECT한다.
INSERT, SELECT문을 합친 것을 작업의 단위라고 하며, 하나의 트랜잭션이라고 한다.

💡즉, 데이터베이스 관련 작업에는 서로 관련이 있는 것들이 존재하기 마련인데, 이를 하나의 단위로 묶어서 처리하는 것을 트랜잭션이라고 생각하면 됩니다.

2. ACID

1) Atomicity (원자성)

  • All or Nothing 즉, 모든 작업이 실행되거나, 혹은 모든 작업이 실행되지 않아야 한다.
  • Commit or Rollback

2) Consistency (일관성)

  • 데이터베이스의 상태가 일관되어야 한다는 성질이다.
  • 모든 트랜잭션이 종료된 후에 DB의 제약 조건을 모두 지키고 있는 상태가 되어야 한다.

예를 들어, 일반적인 계좌의 잔액은 0원 보다 작을 수 없습니다.
따라서 해당 조건을 위반하는 트랜잭션은 모두 중단되어야 합니다.
(단, 트랜잭션 도중에 위배하더라도 결과과 정상적인 상태면 일관성을 가지는 것으로 간주합니다.)

3) Isolation (격리성)

  • 트랜잭션 A 와 다른 트랜잭션들은 독립적으로 동작해야 한다.
  • 서로의 작업을 알지 못하는 상태여야 한다.

쉽게 말해, 여러 트랜잭션 각각의 동작이 서로 영향을 끼치지 않으면서 독립적으로 동작해야 한다는 것입니다.
하지만, 현실에서는 완전한 격리성을 지키기가 어렵습니다.
완전한 격리성을 지향해서 설계를 하면 안정성 측면에서는 가장 좋지만 성능이 떨어지게 됩니다.(느린 DB 작업) 🚨

결국 안정성과 성능 측면이 Trade off 관계에 놓여 있기 때문에 4가지의 트랙잭션 격리 수준 이 존재하게
되는데 여기에는 (READ_UNCOMMITED, READ_COMMITED, REPEATABLE_READ, SERIALIZABLE) 이 있습니다.

☝🏻 트랜잭션의 격리 수준이란?
특정 트랜잭션이 다른 트랜잭션에서 변경하는 데이터를 볼 수 있도록 허용할지 말지를 결정하는 것
쉽게 얘기해서 격리 수준을 결정하는 행위는 각 트랜잭션의 격리 정도를 결정하여 안정성과 성능의 균형을 결졍하는 행위라고 할 수 있습니다.

4) Durability (지속성)

  • 하나의 트랜잭션이 성공적으로 수행되었다면, 해당 트랜잭션에 대한 로그가 남아야 한다는 성질을 말합니다.
  • 즉 트랜잭션 커밋 후, 데이터베이스에 영구적으로 보존되어야 합니다.

프로시저

💡 어떤 업무를 수행하기 위한 절차

  • 쿼리문을 하나의 메서드 형식으로 만들고 어떤 동작을 일괄적으로 처리하는 용도로 쓰인다.
  • 특정한 로직을 처리하기만 하고 결과 값을 반환하지 않는 서브 프로그램
  • 데이터베이스에 대한 일련의 작업을 정리한 절차를 관계형 데이터베이스 관리 시스템에 저장한 것
  • 테이블에서 데이터를 추출, 조작하고 결과를 다른 테이블에 다시 저장하거나 갱신하는 처리를 할 때 프로시저를 사용한다.
  • 함수와 비슷하다. 함수와의 차이점도 알아두자

장점

  • 하나의 요청으로 여러 SQL문을 실행 가능
  • 네트워크 소요 시간을 줄여 성능개선이 가능
  • 여러 어플리케이션과 공유 가능
  • 기능 변경 편리 → 특정 기능을 변경할 때 프로시저만 변경하면 된다.

단점

  • 문자나 숫자열 연산에 사용하면 java보다 느린 성능을 보일 수 있다.
  • 프로시저가 앱의 어디에 사용되는지 확인이 어렵다 → 유지보수가 어려움

📌 프로시저와 함수 차이점?

프로시저함수
특정한 작업을 수행한다특정한 계산을 수행한다
리턴값을 가질 수 도 있고 안가질 수도 있다리턴값은 반드시 가져야 한다.
리턴값을 여러개 가질 수 있다오직 하나의 리턴 값을 가질 수 있다
서버(DB)에서 기술화면(Client)에서 기술
수식 내에서 사용이 불가능하다수식 내에서만 사용이 가능하다
단독으로 문장 구성이 가능하다단독으로 문장 구성이 불가능하다

함수는 프로시저를 포함하고 있는 개념이다.
이러한 프로시저를 포함한 함수들이 여러개 모여 하나의 프로그램을 구성하는 것을
절차지향적 프로그래밍이라고 한다.

[참조]
https://velog.io/@choidongkuen/트랜잭션Transaction-에-대해-알아봅시다
https://scoring.tistory.com/entry/프로시저란 [LightSourceCoder:티스토리]
https://seohee-ha.tistory.com/125

0개의 댓글