본문 바로가기

CS 과목(CS科目)/데이터 베이스(データベース)

18. LOCK을 활용한 concurrency control 트랜잭션 1의 목적을 달성하기 위해서는 write(x=20) 작업이 필요하다. 그러나, 위 그림은 설명을 쉽게 하기 위해서 단순히 write(x=20) Operation 하나만 실행을 해주면 되는 것처럼 적어놨다. 그러나 write를 하게 될 때, 만약 index가 걸려 있다면 거기에 대한 처리도 해야 할 것이고, 이 데이터가 실제로 저장되는 파 일에 대해서도 이런 저런 처리를 해줘야 하므로, 실제로는 복잡한 실행 과정을 거쳐야 한다. 이때, 트랜잭션1의 write와 트랜잭션2의 write가 동시에 실행이 된다고 해보자. 어떠한 데이터를 write하는 과정은 복잡한 과정이므로, 같은 데이터를 트랜잭션2에서 write를 동시에 처리하게 되면, 최종 적으로 데이터가 깔끔하게 처리되지 않을 가능성이 높다. 그.. 더보기
17. transaction isolation level DB에 {x=10, y=20}이 있을 때, Transaction1,2이 동시에 실행됐을 때 일어나는 현상을 살펴보자. 두 개의 트랜잭션이 nonserial(비순차적)으로 동시에 실행되고 있는 상황이다. 트랜잭션1에 대해 commit이 일어나서, x는 10에서 80으로 영구적으로 저장이 되었다. 그런데, 트랜잭션2에 대해 어떠한 종류의 에러가 발생을 하여 roll back이 실행이 되었을 때를 생각을 해보자. roll back의 실행에 의해, 트랜잭션2가 시작되기 이전의 상태, 즉 y=20으로 데이터를 복구하게 된다. 근데, DB에 저장된 x의 값 80은 read(x)에 얻은 10과 트랜잭션2 유효하지 않은 write(y)의 결과값인 70을 더하여서 나온 값이다. 이 유효하지 않은 Operation인 wr.. 더보기
16. concurrency control - Part 2 unrecoverable schedule 위 그림에서 보듯, transaction1은 commit의 명령어를 만나면서 실행이 종료가 돼, H의 balance=250만원인 상태가 DB 서 버에 영구적으로 저장이 됐다. ( 참고로, 이 commit은 Transaction1에 대한 commit이므로, Transaction2에 해당하는 빨간색 으로 표시된 2개의 명령문에 대해서는 commit이 되지 않는다.) 그런데, Transaction2에서 어떤 예기치 못한 에러가 발생을 하여, ABORT(중단)가 되면, Transaction2에 대해 roll back이 실행이 돼(autocommit에 의해 에러 발생 시, 자동으로 roll back이 실행이 된다), Transaction2의 Operation들의 실행이 모.. 더보기
15. concurrency control(Serial schedule, NonSerial schedule) - Part1 이번 concurrency 부분은 난이도가 있는 부분이므로, 시간을 들여서 공부를 하자! 위 예제에 대한 트랜잭션 작성에는 아래와 같이 3가지 case가 있다. case1~3의 트랜잭션의 실행의 결과는 우리가 원한 답이 나온다. 그러나, case 4의 경우, 최종적으로 우리가 원한 답이 나오지를 않는다.(이 이유에 대해서는 지난 번에 설명을 했으므로 여 기서는 설명을 하지 않겠다.) case4와 같이 transaction2의 업데이트 결과가 반영되지 않아서 최종 업데이트된 값(Transaction1의 최종값)이 원하는 값이 나오지 않는 오류, 이러한 오류를 Lost Update 현상 이라고 부른다. read(), write() 등 각각의 작업을 Operation이라고 부른다. case4의 Operatio.. 더보기
14.Transaction Transaction 우선 예제를 한 번 보자!! 위 2개의 SQL문이 모두 정상적으로 실행이 완료되야 지만 이체라는 것이 성립된다. 그런데 만약 2개의 SQL문 중 어느 1개만 정상적으로 실행된 경우에는 어떻게 되버릴까?? 아래에서 살펴 보자!!! 이렇게 되면 J는 100만원 그대로가 되고, H는 200만원에서 220만원이 된다. 갑자기 없던 20만원이 H에게 생겨버렸다. 이렇게 되면, J는 100만원에서 80만원으로 바뀌고, H는 200만원이 그대로 있다. 원래 있던 20만원이 증발해버렸다. 이와 같이 이체라는 작업은, 이 2개의 SQL문이 모두 실행이 돼야 하는 작업이다. 그럼 SQL문을 사용하여 Transaction을 구현해보자 START TRANSACTION RDBMS에게 이제 TRANSACTI.. 더보기
13. Trigger(부제 : 방아쇠를 함부로 땡기지는 말자 ㅋㅋ) Trigger 데이터 베이스에서 어떠 Event가 발생을 하였을 때, 자동적으로 실행되는 프로시저(procedure). 조금 더 자세히 설명을 하면, 데이터에 변경이 생겼을 때, 즉 DB에 INSERT, UPDATE, DELETE(select는 해당x)가 발생을 하였을 때, 이것 이 계기가 되어 자동적으로 실행되는 프로시저(procedure)를 trigger라고 한다. users라는 테이블에서 nickname을 UPDATE하였을 때, UPDATE되기 이전의 {id,nickname}과 변경을 한 시간(until)을 자동적으로 user_log에 저장하는 trigger(procedure)를 만들어 보자. (아래와 같은 결과가 나와야 함) 1.[BEFORE] [UPDATE] 2.ON [users] 3.FOR [.. 더보기
12. stored procedure PART 2 주된 사용 목적이 비즈니스 구현이라는 것은 비즈니스 로직이 Logic tier뿐 아니라 Data tier에 존재할 수도 있다는 뜻이다. stored procedure의 장점 위 그림은 프론트엔드(Presentation tier)를 제외한 백엔드 부분(Logic tier, Data tier)부분만을 나타내고 있다. Logic tier에는 현재 4개의 Spring 서버가 있고, Data tier에는 1개의 MySQL 서버가 있는 상황이다. 4개의 자바 서버는 똑같은 logic으로 이루어 져 있다. 만약 logic을 바꿔줘야 할 때, 4개를 동시에 바꾸면 안된다. 왜냐하면, 4개의 서버를 동시에 바꾸는 동안에 만약 client에서 어떠한 request가 있을 경우, 그 request에 response가 안됨... 더보기
11. stored Procedure PART 1 Stored Procedure 프로시저와 함수의 차이를 알고 가자!!!(이 부분이 이해 안 돼도 괜찮다. 아래 부분에서 자세히 다시 다룬다.) CREATE PROCEDURE product (IN a int, IN b int, OUT result int) IN : INput 매개변수라는 뜻. 즉 매개변수에 값을 받을 수 있을 뿐, BODY 부분에서 그 변수의 값을 변경하지는 못함. OUT : OUTput 매개변수라는 뜻. 즉, 매개변수에 어떤 값을 받을 필요는 없고, BODY 내에서 그 변수에 값을 넣어서 반환시킬 때 사용! (나중에 배울, INOUT이라는 키워드는 위 2가지 기능을 모두 가지고 있다.) -> 만약, 매개 변수 앞에 IN, OUT 중 어느 것도 적혀져 있지 않으면, default로 IN이 .. 더보기