데이터베이스(Database) 전체 또는 일부의 논리적인 구조를 표현하는 것으로 데이터베이스 내에서 데이터가 어떤 구조로 저장되는지를 나타냄.
데이터베이스에서 하나의 작업 단위. 하나의 트랜잭션은 여러 개의 데이터 조작 언어(DML) 명령어를 포함할 수 있으며, 이러한 명령어는 모두 성공적으로 수행되거나 전혀 수행되지 않아야 함.
데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위를 뜻한다.
데이터베이스의 상태를 변화시킨다?? ⇒ 간단하게 말해서 아래의 질의어(DML)를 이용하여 데이터베이스를 접근 하는 것을 의미
데이터베이스 시스템에서 데이터가 정확하고 일관되며 신뢰할 수 있는 상태를 유지하는 것을 의미
참조 무결성 : FK는 참조하는 테이블의 PK와 일치해야 하며, FK 값이 존재하지 않거나NULL가능.
ACID는 데이터베이스 관리 시스템에서 트랜잭션이 안정적으로 처리되도록 보장하는 네 가지 속성이다.
Atomicity (원자성)
Consistency (일관성)
Isolation (격리성)
Durability (지속성)
트랜잭션의 모든 작업이 전부 반영(Commit)되거나 전혀 반영되지 않아야(Rollback) 한다. 즉, 하나의 트랜잭션은 모두 성공하거나 모두 실패해야 한다.
트랜잭션이 수행된 후 데이터가 항상 정확하고 일관된 상태로 유지되어야 한다. 이는 데이터가 데이터베이스의 규칙과 제약 조건을 준수하고, 모든 트랜잭션이 올바르게 반영되어 데이터 무결성이 유지됨을 의미한다.
개발자는 데이터베이스의 일관성을 유지하기 위해 데이터 무결성에 대해 크게 신경 쓰지 않아도 되며, 데이터베이스가 알아서 일관성을 보장함.
트랜잭션이 동시에 수행될 때 서로 영향을 미치지 않고 독립적으로 실행되도록 보장하는 성질이다.
트랜잭션이 진행 중일 때 다른 트랜잭션이 중간에 끼어들지 못하게 합니다. 이를 통해 데이터의 일관성과 무결성을 유지할 수 있다.
격리 수준이 높을수록 데이터 일관성은 높아지지만, 동시성은 낮아져 성능이 떨어질 수 있다. 따라서 데이터베이스는 다양한 격리 수준을 제공하여 성능과 일관성 간의 균형을 맞추는게 중요하다.
트랜잭션이 완료된 후 그 결과는 영구적으로 데이터베이스에 반영되어야 한다. 시스템 장애가 발생하더라도 완료된 트랜잭션의 결과는 손실되지 않는다. 이를 위해 로그 및 백업을 사용해야 한다.
트랜잭션은 데이터베이스 상태를 변화시키기 위해 수행하는 작업의 단위. 트랜잭션은 다음과 같은 속성을 가짐.
비관적 잠금은 데이터베이스가 데이터에 대한 접근을 제어하여 충돌을 방지한다. 이는 여러 사용자가 동시에 데이터를 수정하려 할 때 충돌이 발생하지 않도록 한다.
NoSQL 데이터베이스는 관계형 데이터베이스(RDBMS)와는 다른 방식으로 데이터를 저장하고 관리한다. NoSQL은 특히 대규모 데이터 처리와 높은 확장성 및 가용성을 요구하는 현대 웹 애플리케이션과 빅데이터 환경에 적합함.
NoSQL은 분산 시스템의 특성을 활용하여 높은 확장성과 가용성을 제공한다. 이를 통해 수평적 확장(노드 추가)을 쉽게 할 수 있어 대규모 데이터와 트래픽을 효율적으로 처리할 수 있다.
NoSQL은 최종적으로 일관성을 보장하는 방식을 사용한다. 즉, 데이터가 여러 노드에 분산되어 저장될 때, 모든 노드가 일시적으로는 일관되지 않을 수 있지만, 일정 시간이 지나면 결국 일관된 상태가 된다.
개발자는 잠재적으로 비일관한(Inconsistent) 데이터를 처리하기 위해 애플리케이션 레벨에서 신경 써야 합니다.
Optimistic Lock은 실제로 물리적인 락을 사용하는 것이 아니라, 데이터 충돌이 발생할 가능성이 낮다고 가정하고, 충돌이 발생하면 이를 감지하고 처리하는 방식이다. 락이라는 단어가 포함되어 있지만, 실제로는 락을 거는 의미가 아니다.
작동 방식:
1. 데이터 읽기: 트랜잭션이 데이터를 읽고, 이때 데이터의 버전 정보를 함께 가져온다.
2. 데이터 수정: 트랜잭션이 데이터를 수정
3. 충돌 감지: 데이터를 저장할 때, 데이터의 현재 버전 정보와 트랜잭션 시작 시 읽었던 버전 정보 비교
4. 충돌 처리: 버전 정보가 다르면 충돌이 발생한 것으로 간주하고, 트랜잭션을 재시도하거나 실패로 처리. 버전 정보가 같으면 데이터를 저장하고 버전 정보를 업데이트 진행
Optimistic Concurrency Control (OCC): 낙관적 동시성 제어로, 락을 사용하지 않고 트랜잭션 충돌을 감지하고 해결하는 방식이다. 이는 주로 데이터 충돌이 적은 환경에서 사용된다.
NoSQL은 전통적인 트랜잭션을 지원하지 않는다. 이는 데이터 무결성을 보장하지 않음을 의미한다.
NoSQL 데이터베이스는 트리 구조 데이터를 사용하여 데이터 간 종속성을 표현한다. 이는 복잡한 데이터 구조와 비정형 데이터를 저장하는 데 유리하다.
NoSQL은 ACID의 데이터 무결성을 희생하고, 확장성 및 가용성을 얻기 위해 트랜잭션 포기.
BASE databases abandon the consistency requirements of the ACID model pretty much completely. One of the basic concepts behind BASE is that data consistency is the developer's problem and should not be handled by the database
BASE 데이터베이스는 ACID 의 데이터 일관성을 버리는데, BASE 의 기본 컨셉 중 하나가 데이터 일관성은 데이터베이스가 처리할것이 아니라 개발자가 처리해야할 문제라는것이다.

데이터를 키와 값의 쌍으로 저장. 각 키는 고유하며 이를 통해 데이터를 빠르게 검색할 수 있다. 이 유형의 데이터베이스는 단순한 구조로 인해 매우 빠른 읽기 및 쓰기 성능을 제공한다.
문서 저장소는 데이터를 JSON, BSON, XML 등의 형식으로 저장한다. 각 문서는 고유한 키를 가지며, 문서 내의 데이터는 구조화된 형태로 저장된다. 이는 비정형 데이터나 복잡한 데이터를 저장하는데 적합하다.
열 기반 저장소는 데이터를 행과 열의 구조로 저장하지만, 각 행의 열 수와 구조가 다를 수 있다. 이는 대규모 데이터 분석 및 처리에 적합하며, 읽기 및 쓰기 성능이 뛰어나다.
그래프 데이터베이스는 데이터를 노드와 엣지의 형태로 저장한다. 노드는 엔터티를 나타내며, 엣지는 엔터티 간의 관계를 나타낸다. 이는 복잡한 관계를 모델링하고 쿼리하는 데 적합하다.

