트랜잭션(Transcation) 이란 여러개의 작업을 하나로 묶은 실행 유닛을 말하며, 데이터베이스 관점에서는 데이터베이스의 상태를 변환시키는 기능을 수행하기 위한 하나 이상의 쿼리를 모아 놓은 하나의 작업 단위를 말한다.
☝🏻 데이터베이스의 상태를 바꾼다는 것은?
: SELECT , INSERT, UPDATE, DELETE
☝🏻 작업의 단위란?
많은 질의어 명령문들을 사람이 정하는 기준에 따라 정하는 것을 의미한다.
예를 들면, 게시판에 글을 작성(INSERT) -> 최신 정보 유지를 위해 다시 SELECT한다.
INSERT, SELECT문을 합친 것을 작업의 단위라고 하며, 하나의 트랜잭션이라고 한다.
💡즉, 데이터베이스 관련 작업에는 서로 관련이 있는 것들이 존재하기 마련인데, 이를 하나의 단위로 묶어서 처리하는 것을 트랜잭션이라고 생각하면 됩니다.
예를 들어, 일반적인 계좌의 잔액은 0원 보다 작을 수 없습니다.
따라서 해당 조건을 위반하는 트랜잭션은 모두 중단되어야 합니다.
(단, 트랜잭션 도중에 위배하더라도 결과과 정상적인 상태면 일관성을 가지는 것으로 간주합니다.)
쉽게 말해, 여러 트랜잭션 각각의 동작이 서로 영향을 끼치지 않으면서 독립적으로 동작해야 한다는 것입니다.
하지만, 현실에서는 완전한 격리성을 지키기가 어렵습니다.
완전한 격리성을 지향해서 설계를 하면 안정성 측면에서는 가장 좋지만 성능이 떨어지게 됩니다.(느린 DB 작업) 🚨
결국 안정성과 성능 측면이 Trade off 관계에 놓여 있기 때문에 4가지의 트랙잭션 격리 수준 이 존재하게
되는데 여기에는 (READ_UNCOMMITED, READ_COMMITED, REPEATABLE_READ, SERIALIZABLE) 이 있습니다.
☝🏻 트랜잭션의 격리 수준이란?
특정 트랜잭션이 다른 트랜잭션에서 변경하는 데이터를 볼 수 있도록 허용할지 말지를 결정하는 것
쉽게 얘기해서 격리 수준을 결정하는 행위는 각 트랜잭션의 격리 정도를 결정하여 안정성과 성능의 균형을 결졍하는 행위라고 할 수 있습니다.
💡 어떤 업무를 수행하기 위한 절차
프로시저 | 함수 |
---|---|
특정한 작업을 수행한다 | 특정한 계산을 수행한다 |
리턴값을 가질 수 도 있고 안가질 수도 있다 | 리턴값은 반드시 가져야 한다. |
리턴값을 여러개 가질 수 있다 | 오직 하나의 리턴 값을 가질 수 있다 |
서버(DB)에서 기술 | 화면(Client)에서 기술 |
수식 내에서 사용이 불가능하다 | 수식 내에서만 사용이 가능하다 |
단독으로 문장 구성이 가능하다 | 단독으로 문장 구성이 불가능하다 |
함수는 프로시저를 포함하고 있는 개념이다.
이러한 프로시저를 포함한 함수들이 여러개 모여 하나의 프로그램을 구성하는 것을
절차지향적 프로그래밍이라고 한다.
[참조]
https://velog.io/@choidongkuen/트랜잭션Transaction-에-대해-알아봅시다
https://scoring.tistory.com/entry/프로시저란 [LightSourceCoder:티스토리]
https://seohee-ha.tistory.com/125