Database란?
여러 사람이 공유하고 사용하는 데이터의 조직화된 집합이다.
데이터의 집합 저장소
DBMS란?
데이터베이스를 관리하고 데이터를 정의, 저장, 검색, 수정, 삭제하는 시스템이다.
벡엔드 개발자가 되려면 데이터베이스를 잘 알아야 한다.
웹 애플리케이션은 사용자 데이터를 저장하거나 요청을 처리하는 시스템이다. 데이터베이스는 웹 애플리케이션에서 중요한 역할을 하며, 효율적인 데이터 관리와 성능을 보장하기 위해 반드시 필요한 지식이다.
✅ DBMS의 주요 기능
- 데이터 정의: 데이터베이스 구조 정의.
- 데이터 관리: 데이터를 효율적으로 저장하고 쿼리 언어(SQ)로 관리.
- 데이터 보안: 사용자 권한 관리 및 데이터 암호화.
- 트랜잭션 관리: ACID 속성 보장.
- 백업 및 복구: 데이터 손실 방지.
- 동시성 제어: 다수의 사용자 접근 시 데이터 일관성 유지.
개발자는 데이터베이스를 잘 이해함으로써 웹 애플리케이션의 성능, 보안, 확장성을 향상시킬 수 있다.
✅ DBMS의 종류
1️⃣ 관계형 DMBS(RDBMS):
- 가장 많이 사용하는 DB.
- 테이블 형태로 데이터를 관리(Oracle, MySQL 등).
2️⃣ NoSQL:
- 테이블이 아닌 key-value, document, graph 등의 형태로 데이터를 저장하고 관리
- 대규모 데이터 처리와 높은 확장성을 제공( MongoDB, Cassandra, Redis 등)
3️⃣ 다중 모델 DBMS: 여러 데이터 모델을 동시에 지원(Amazon DynamoDB 등).
- 여러 데이터 모델을 지원하는 시스템
- 관계형 데이터, 문서형, 그래프형 데이터를 함께 관리( Amazon DynamoDB, Microsoft Azure Cosmos DB 등)
✅ 트랜잭션(Transaction)이란?
트랜잭션(Transaction)은 데이터베이스에서 작업을 하나의 단위로 묶어서 처리하는 개념이다.
즉, 데이터베이스의 상태를 변화시키는 일련의 작업들을 하나의 논리적인 단위로 묶어 수행하는 것입니다.
✅ 트랜잭션의 특징
트랜잭션은 데이터베이스에서 여러 작업을 하나로 묶어 수행하며, 다음과 같은 ACID 속성을 보장한다
- Atomicity (원자성)
- 트랜잭션 내의 작업들은 모두 완전하게 실행되거나 전혀 실행되지 않은 상태로 처리된다. 즉, 트랜잭션 중 하나라도 실패하면, 모든 작업이 취소되고 초기 상태로 복구한다.
- Consistency (일관성)
- 트랜잭션이 시작되기 전과 후, 데이터베이스는 항상 일관성 있는 상태를 유지해야 한다. 트랜잭션 실행 전후에 데이터의 무결성을 보장한다.
- Isolation (격리성)
- 트랜잭션이 수행되는 동안 다른 트랜잭션은 그 트랜잭션의 중간 상태를 볼 수 없다. 각각의 트랜잭션은 독립적으로 실행되어야 하며, 트랜잭션 간의 간섭을 방지한다.
- Durability (내구성)
- 트랜잭션이 완료된 후, 그 결과는 영구적으로 기록되어야 하며, 시스템 오류가 발생하더라도 데이터는 손실되지 않는다.
온라인 쇼핑몰을 예로 들어보자.
사용자가 온라인 쇼핑몰에서 상품을 구매하면. 구매를 위한 트랜잭션은 여러 단계로 나뉘게 된다.
1️⃣ 상품 재고 차감
- 사용자가 구매한 상품의 재고에서 1개가 차감
- 예시: 사용자가 '노트북'을 구매하면, 쇼핑몰의 재고에서 '노트북' 1개가 차감
2️⃣ 사용자의 결제 처리
- 사용자의 카드 또는 다른 결제 수단에서 결제 금액이 차감
- 예시: 사용자가 '노트북'을 구매한 금액(100만원)이 결제 수단에서 차감
3️⃣ 배송 준비 상태로 변경
- 결제가 완료되면, 해당 상품의 배송 준비 상태로 변경
- 예시: '노트북'이 '배송 준비 중'으로 상태가 변경
✔️ 트랜잭션 실패 시
트랜잭션 중 하나라도 실패하면:
- 재고 부족: 재고가 없어서 상품 구매가 불가능하면, 결제도 진행되지 않음
- 결제 오류: 결제 과정에서 오류가 발생하면, 재고 차감 및 배송 준비 상태로 변경되지 않음
- 배송 준비 실패: 결제가 완료되었지만, 배송 준비에 실패하면 상품이 발송되지 않음
이 경우 모든 작업이 롤백되어 이전 상태로 돌아가게 된다.
예를 들어, 재고가 차감되지 않거나 결제가 취소된다.
✔️ 트랜잭션 성공 시
모든 단계가 성공적으로 처리되면:
- 상품의 재고가 차감되고,
- 결제가 정상적으로 완료되며,
- 배송 준비 상태로 상품이 전환된다.
이 모든 과정은 원자성(Atomicity)을 보장하며, 모든 작업이 성공적으로 완료되거나 실패 시 전체 작업이 롤백되어 데이터 일관성을 유지한다.
예시처럼 트랜잭션을 사용하면 모든 작업이 일관되게 처리되므로, 하나라도 실패하면 중간 상태로 남지 않게 된다.
'Spring' 카테고리의 다른 글
JDBC (0) | 2025.03.24 |
---|---|
롬복(Lombok)이란? (0) | 2025.03.21 |
간단한 CRUD 메모장으로 REST API 알아보기 (1) | 2025.03.19 |
Spring MVC란? (0) | 2025.03.18 |
HTTP 개념과 특징 (1) | 2025.03.17 |