티스토리 뷰
1. 관계형 데이터베이스(RDBMS, Relational Database Management System)
1.1 정의
- 데이터를 표 형태로 저장, 관계를 정의한 시스템
1.2 구성(행렬 + 관계 + Fiexd Schema)
- 2차원(행렬) 구조 데이터에 각 요소 간의 관계(Relation)를 기반으로 데이터의 종속성을 표현
1) 데이터는 테이블이라는 2차원 배열 형식(행렬)으로 저장
2) 복잡한 다차원 데이터를 다수의 2차원 Entity(테이블)에 분할
3) 고정된 Column의 정의에 맞게 데이터 적재(Fiexd Schema) - Fiexd Schema를 이용하여
- ORM 형성 :: 관계형(DB - 2차원 구조 데이터) + 객체 지향(Application - 트리 구조 객체데이터)
- 자체 쿼리 최적화 :: Parsing → Query Plan → Query Optimization // 빠른 분류, 정렬, 탐색 - 구조적 단점 :: 스키마 수정이 어려우며, 수평적 확장에 대한 한계
==> 수평적 확장 시, Guaranteed Consistency의 보장을 위해 대기 시간이 긺
1.3 목적
:: 데이터 무결성, 일관성 (Integrity, Consistency)을 보장
:: 고신뢰성(High Reliability)을 보장
1.4 RDBMS, SQL의 종류
:: 관계형 데이터베이스는 정형화된 2차원(행렬) 데이터 구성을 갖기에, 수많은 RDBMS 종류가 있어도 쿼리만 다르다
- 쿼리가 다름 == 쿼리 문법이나 쿼리 수행 시 최적화 방식이 다르다
- 쿼리 문법 :: 표준 ANSI SQL 문법을 기반으로 DBMS 각자 독자적인 기능을 위한 다양한 SQL Dialect
- 쿼리 수행 시 최적화 방식 :: Query Optmization, 어떻게 적은 탐색 비용으로 더 빠르게 결과 반환할지
- 방법 비교 :: (Procedural Language) PL/SQL (Oracle), PL/pgSQL (PostgresQL), T-SQL (MS-SQL) 등
2. 특징
1. 데이터의 정규화
2. SQL을 통한 데이터 조작
3. 트랜잭션 처리(ACID - compaliant 준수)
4. Guaranteed Consistency(데이터의 일관성 보장 - Pessimistic Lock)
2.1 트랜잭션의 특징(ACID)
:: DBMS에서는 Operation(Query) 수행 시마다 트랜잭션을 생성 및 활용
항목 | 내용 | |
1. 원자성 / Atomicity | 트랜잭션 내의 모든 작업이 완료 or 아예 취소 | |
2. 일관성 / Consistency | 트랜잭션이 실행되기 전과 후에 데이터가 일관된 상태를 유지 -> 데이터 저장 시, 모든 제약 조건에 만족 -> 데이터 조작 시, 최신 값 반영 |
|
3. 격리성 / Isolation | 각 트랜잭션은 다른 트랜잭션의 영향을 받지 않고 독립적으로 실행 | |
4. 지속성 / Durability | 트랜잭션이 성공적으로 종료되면 그 결과는 영구적으로 저장 -> 로그 및 백업을 통한 보완 |
2.1.1 격리성에서의 격리 레벨
- Isolation Level (격리 수준) 을 통해 독립(고립)의 정도를 정의
- 데이터베이스 :: 데이터베이스에 기본 설정 + 쿼리마다 세부 설정 가능
- 어플리케이션 :: 쿼리마다 세부 설정 가능 (DB 호출 함수에 각각에 대해, Spring JPA)
Isolation Level | 독립의 정도에 대한 정의 |
0 Level : Read Uncommitted | -에러 Dirty Read 발생 |
1 Level : Read Committed | -에러 Non-Repeatable Read 발생 |
2 Level : Repeatable Read | - 에러 Phantom Read 발생 |
3 Level : Serializable | - 에로 발생 X, 시간(성능) 하락 |
위배 시 “Could not serialize access due to concurrent update” 발생 |
2.2 Guarnteed Consistency / Pessimistic Lock
:: DB가 데이터의 일관성을 보장하는 방법
:: DB built-in lock - 개발자나 애플리케이션에서 비일관적인 데이터(Inconsistent)를 DB가 알아서 관리
- Pessimistic Lock
:: Pessimistic Concurrency Control(비관적 동시성 제어)의 일환
:: DB가 특정 데이터 수정 시, Lock으로 다른 트랙잭션의 접근을 제한
:: 경쟁 조건(Race Condition) or 데이터 충돌 방지
- 경쟁 조건(Race Condition)
:: 2개 이상의 스레드가 공유 데이터에 엑세스하여 동시 변경할 때, 발생하는 문제
:: 갱신 전에 값에 대한 수정 / 읽기 등을 통해 실제 갱신 값에 대한 누락 발생
참고
ASAC 수업자료
읽어보기
Guarnteed Consistency
[동시성] DataBase Concurrency Controll(Pessimistic, Optimistic, Named Lock)
🎯 DataBase Concurrency ControllRace Condition경쟁상태는 두 개 이상의 스레드가 공유 데이터에 액세스 할 수 있고, 동시에 변경을 하려고 할 때 발생하는 문제Race Condition 으로 동시에 들어오는 요청들이
data-make.tistory.com
Pessimistic Lock
[database] 낙관적 락(Optimistic Lock)과 비관적 락(Pessimistic Lock)
안녕하세요. 오늘은 낙관적 락과 비관적 락의 개념에 대해서 알아보는 시간을 가져보도록 하겠습니다.DB 충돌 상황을 개선할 수 있는 방법database에 접근해서 데이터를 수정할 때 동시에 수정이
sabarada.tistory.com
RDBMS, SQL의 종류별 차이
Exploring SQL Dialects: A Guide to Popular Database Management Systems
Structured Query Language (SQL) is a powerful programming language that enables users to manage and manipulate relational databases…
medium.com
'정리용 > DB' 카테고리의 다른 글
[DB 기초] 3-1. DB 동시성 제어 기법(Pessimistic / Optimistic Lock) (0) | 2025.03.11 |
---|---|
[DB 기초] 3. DB 동시성 제어(Concurrency Control) (0) | 2025.03.11 |
[DB 기초] 2. DB 확장 방법 (0) | 2025.03.11 |
[DB 기초] 1-2. 비관계형 데이터베이스(NoSQL) (0) | 2025.03.11 |
[DB 기초] 1. RDBMS, NoSQL (0) | 2025.03.10 |
- Total
- Today
- Yesterday
- useCallback
- useRef
- useState
- asac7
- Nginx
- useContext
- react
- useEffect
- useMemo
- asac7#asac
- memo
- ssh
- useLayoutEffect
- acac
- git
- asac#asac7기
- acas#acas7기
- useReducer
- ASAC
- asac7기
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |