오늘 데이터베이스 강의를 들으며 관련 내용을 간단히 찾아보고 정리하고자 함
데이터베이스를 쓰는 이유로 효과적인 데이터 인출, 백업과 복구에 용이함, ACID특성*, 데이터 관리의 중앙화, 고가용성, 민감한 데이터 보안 등 아주 다양하고 실리적인 이유들이 있음
여기서 ACID특성에 대한 리서치를 좀 해봄:
이 특성을 알기 전 트랜잭션의 개념부터 짚고 넘어가야 함 --- "트랜잭션이란 질의(query)를 하나의 묶음 처리해서 만약 중간에 실행이 중단됐을 경우, 처음부터 다시 실행하는 Rollback을 수행하고, 오류없이 실행을 마치면 commit을 하는 실행 단위를 의미함. 즉, 한 번 질의가 실행되면 질의가 모두 수행되거나 모두 수행되지 않는 작업수행의 논리적 단위임"
트랜잭션을 사용하는 이유로 --- "트랜잭션은 DB 서버에 여러 개의 클라이언트가 동시에 액세스 하거나 응용프로그램이 갱신을 처리하는 과정에서 중단될 수 있는 경우 등 데이터 부정합을 방지하고자 할 때 사용함. 부정합이 발생하지 않으려면 프로세스를 병렬로 처리하지 않도록 하여 한 번에 하나의 프로세스만 처리하도록 하면 되는데, 이는 효율이 너무 떨어짐. 즉, 병렬로 처리할 수 밖에 없는 현실적인 상황으로 인해 부정합을 방지하고자 트랜잭션을 사용하는 것"
그리고 트랜잭션의 특성으로 ACID가 나옴 (갖다 씀 주의) ---
트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 능력이다. 위의 예시와 같이, 입금처리는 성공할 수도 실패할 수도 있지만 보내는 쪽에서 돈을 빼 오는 작업만 성공하고 받는 쪽에 돈을 넣는 작업을 실패해서는 안된다. 트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않은 상태로 남아 있어야 한다. (All or Nothing)원자성은 이와 같이 중간 단계까지 실행되고 실패하는 일이 없도록 하는 것이다.
트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 의미한다. 트랜잭션이 실행 되기 전의 데이터베이스 내용이 잘못 되어 있지 않다면 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안된다.
트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미한다. 즉 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안된다. 이것은 트랜잭션 밖에 있는 어떤 연산도 중간 단계의 데이터를 볼 수 없음을 의미한다. 은행 관리자는 보안상 이체 작업을 하는 도중에 쿼리를 실행하더라도 특정 계좌간 이체하는 양 쪽을 볼 수 없다. 공식적으로 독립성은 트랜잭션 실행내역은 연속적이어야 함을 의미한다. 성능관련 이유로 인해 이 특성은 가장 유연성 있는 제약 조건이다.
성공적으로 수행된 트랜잭션의 결과와 데이터베이스의 내용은 영원히 반영되어야 함을 의미한다. 시스템 문제, DB 일관성 체크 등을 하더라도 유지되어야 함을 의미한다. 일반적으로 모든 트랜잭션은 로그로 남고 시스템 장애 발생 전 상태로 되돌릴 수 있다. 트랜잭션은 로그에 모든 것이 저장된 후에만 commit상태로 간주될 수 있다.
[Node.js] 심화 이론 (1-3) (객체 지향 구분 기준: 캡슐화 / 다형성 / 상속 / 추상화) (0) | 2024.02.19 |
---|---|
[javascript] 쓰로틀링 vs 디바운싱 / 페이지네이션 / 메타데이터 (0) | 2024.02.06 |
[Node.js] Windows 환경 Error: EPERM: operation not permitted 2 (0) | 2024.01.29 |
[Node.js] Windows 환경 Error: EPERM: operation not permitted (1) | 2024.01.29 |
2024.01.18 node.js 환경설정 이슈 몇가지 (1) | 2024.01.19 |