락 편집하기

이동: 둘러보기, 검색

경고: 로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다. 로그인하거나 계정을 생성하면 편집자가 아이디(ID)으로 기록되고, 다른 장점도 있습니다.

편집을 되돌릴 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 저장해주세요.
최신판 당신의 편집
33번째 줄: 33번째 줄:
 
== 관련 개념 ==
 
== 관련 개념 ==
 
===데이터베이스===
 
===데이터베이스===
[[데이터베이스]]는 여러 사람이 공유하여 사용할 목적으로 체계화해 통합, 관리하는 데이터의 집합이다. 여러 응용 [[시스템]]들의 통합된 정보들을 저장하여 운영할 수 있는 공용 데이터들의 묶음이다. 논리적으로 연관된 하나 이상의 자료의 모음으로 그 내용을 고도로 구조화함으로써 검색과 갱신의 효율화를 꾀한 것이다. 즉, 몇 개의 자료 [[파일]]을 조직적으로 통합하여 자료 항목의 중복을 없애고 자료를 [[구조화]]하여 기억 시켜 놓은 자료의 집합체라고 할 수 있다.<ref>〈[https://ko.wikipedia.org/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4 데이터베이스]〉, 《위키백과》</ref>
+
데이터베이스는 여러 사람이 공유하여 사용할 목적으로 체계화해 통합, 관리하는 데이터의 집합이다. 여러 응용 [[시스템]]들의 통합된 정보들을 저장하여 운영할 수 있는 공용 데이터들의 묶음이다. 논리적으로 연관된 하나 이상의 자료의 모음으로 그 내용을 고도로 구조화함으로써 검색과 갱신의 효율화를 꾀한 것이다. 즉, 몇 개의 자료 [[파일]]을 조직적으로 통합하여 자료 항목의 중복을 없애고 자료를 [[구조화]]하여 기억 시켜 놓은 자료의 집합체라고 할 수 있다.<ref>〈[https://ko.wikipedia.org/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4 데이터베이스]〉, 《위키백과》</ref>
  
 
===트랜잭션===
 
===트랜잭션===
[[트랜잭션]]은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산을 의미한다. 트랜잭션은 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적 단위고, 사용자가 시스템에 대한 [[서비스]] 요구 시 시스템이 응답하기 위한 상태 변환 과정의 작업 단위이다.
+
트랜잭션은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산을 의미한다. 트랜잭션은 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적 단위고, 사용자가 시스템에 대한 [[서비스]] 요구 시 시스템이 응답하기 위한 상태 변환 과정의 작업 단위이다.
  
 
* '''원자성'''(Atomicity) : 트랜잭션의 연산은 데이터베이스에 모두 반영되는지 아니면 전혀 반영되지 않아야 하고, 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 한다. 모두가 완벽히 수행되지 않고 어느 하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 한다.
 
* '''원자성'''(Atomicity) : 트랜잭션의 연산은 데이터베이스에 모두 반영되는지 아니면 전혀 반영되지 않아야 하고, 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 한다. 모두가 완벽히 수행되지 않고 어느 하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 한다.
46번째 줄: 46번째 줄:
 
* '''롤백 연산''' : 하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성을 깨뜨렸을 때 이 트랜잭션의 일부가 정상적으로 처리되었더라도 트랜잭션의 원자성을 구현하기 위해 이 트랜잭션이 행한 모든 연산을 취소하는 연산이다. 롤백 시에는 해당 트랜잭션을 재시작하거나 폐기한다.<ref>코딩팩토리, 〈[https://coding-factory.tistory.com/226 (DB기초) 트랜잭션이란 무엇인가?]〉, 《티스토리》, 2018-08-20</ref>
 
* '''롤백 연산''' : 하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성을 깨뜨렸을 때 이 트랜잭션의 일부가 정상적으로 처리되었더라도 트랜잭션의 원자성을 구현하기 위해 이 트랜잭션이 행한 모든 연산을 취소하는 연산이다. 롤백 시에는 해당 트랜잭션을 재시작하거나 폐기한다.<ref>코딩팩토리, 〈[https://coding-factory.tistory.com/226 (DB기초) 트랜잭션이란 무엇인가?]〉, 《티스토리》, 2018-08-20</ref>
  
가장 흔한 예로 계좌이체 작업이 있다. A라는 계좌에서 B계좌로 이체하는 작업은 A 계좌의 잔액을 읽어서 이체할 금액 차감이 가능하면 차감 후 잔액을 A 계좌에 기록하고 B 계좌에 이체 금액만큼 더하여 그 결과를 B 계좌에 기록하면 모든 작업이 완료된다. 하지만 A계좌의 차감까지 진행된 상태에서 전원이 나가는 등의 장애로 B 계좌에 더해진 금액이 기록되지 않으면 문제가 발생한다. 이러한 문제 발생을 막기 위해서는 위의 개별적인 작업들을 하나로 묶어 트랜잭션으로 구성하게 된다.<ref>〈[http://www.devholic.net/xe/?menu_code=tipsql&category=0&search_target=title&search_keyword=&sort_target=&sort_type=DESC&page=1&listStyle=&document_srl=1000292&act= 트랜잭션(Transaction)]〉, 《devholic》</ref>
+
가장 흔한 예로 계좌이체 작업이 있다. A라는 계좌에서 B계좌로 이체하는 작업은 A 계좌의 잔액을 읽어서 이체할 금액 차감이 가능하면 차감 후 잔액을 A계좌에 기록하고 B계좌에 이체 금액만큼 더하여 그 결과를 B계좌에 기록하면 모든 작업이 완료된다. 하지만 A계좌의 차감까지 진행된 상태에서 전원이 나가는 등의 장애로 B계좌에 더해진 금액이 기록되지 않으면 문제가 발생한다. 이러한 문제 발생을 막기 위해서는 위의 개별적인 작업들을 하나로 묶어 트랜잭션으로 구성하게 된다.<ref>〈[http://www.devholic.net/xe/?menu_code=tipsql&category=0&search_target=title&search_keyword=&sort_target=&sort_type=DESC&page=1&listStyle=&document_srl=1000292&act= 트랜잭션(Transaction)]〉, 《devholic》</ref>
  
 
===블로킹===
 
===블로킹===
59번째 줄: 59번째 줄:
  
 
===교착상태===
 
===교착상태===
[[교착상태]](DeadLock) 또는 데드락은 두 트랜잭션이 각각 락을 성정하고 다음 서로의 락에 접근하여 값을 얻어오려고 할 때 이미 각각의 트랜잭션에 의해 락이 설정되어 있기 때문에 양쪽 트랜잭션 모두 영원히 처리되지 않게 되는 상태를 말한다. 상대방 락이 끝나야 원하는 데이터를 가져오는데 바라보고 있는 서로의 락이 같은 상태가 되다 보니 영원히 끝나지 않는 상황이 발생하게 된다. 이를 방지하기 위해서는 접근 순서를 동일하게 하는 것이 중요함으로, 접근 순서 규칙을 정해야 한다. 교착상태를 해결하려면 둘 중 하나의 트랜잭션을 강제로 종료해야 한다.<ref name="티스토리"></ref>
+
교착상태(DeadLock) 또는 데드락은 두 트랜잭션이 각각 락을 성정하고 다음 서로의 락에 접근하여 값을 얻어오려고 할 때 이미 각각의 트랜잭션에 의해 락이 설정되어 있기 때문에 양쪽 트랜잭션 모두 영원히 처리되지 않게 되는 상태를 말한다. 상대방 락이 끝나야 원하는 데이터를 가져오는데 바라보고 있는 서로의 락이 같은 상태가 되다 보니 영원히 끝나지 않는 상황이 발생하게 된다. 이를 방지하기 위해서는 접근 순서를 동일하게 하는 것이 중요함으로, 접근 순서 규칙을 정해야 한다. 교착상태를 해결하려면 둘 중 하나의 트랜잭션을 강제로 종료해야 한다.<ref name="티스토리"></ref>
  
 
{{각주}}
 
{{각주}}

해시넷에서의 모든 기여는 다른 기여자가 편집, 수정, 삭제할 수 있다는 점을 유의해 주세요. 만약 여기에 동의하지 않는다면, 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다 (자세한 사항은 해시넷:저작권 문서를 보세요). 저작권이 있는 내용을 허가 없이 저장하지 마세요!

취소 | 편집 도움말 (새 창에서 열림)