역할: DBMS는 데이터베이스의 구조를 정의할 수 있는 기능을 제공한다. 우리 쇼핑몰에 어떤 데이터가 필요한지, 각 데이터는 어떤 형태(숫자, 문자열, 날짜 등)로 저장될지, 데이터들 간의 관계는 어떻게 되는지, 어떤 제약조건(예: 상품 가격은 항상 양수여야 한다, 고객 ID는 중복될 수 없다)을 가져야 하는지 등을 명시할 수 있다.
-- 데이터 베이스 시작하기
CREATE DATABASE my_shop;
-- 생성된 데이터 베이스 확인하기
SHOW DATABASES;
-- 해당 데이터 베이스 사용하기
USE my_shop;
-- 해당 데이터 베이스 접속 후 테이블 생성하기
CREATE TABLE sample(
product_id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL UNIQUE,
price INT NOT NULL,
stock_quantity INT DEFAULT 0,
release_date DATETIME DEFAULT CURRENT_TIMESTAMP
)
-- 생성된 테이블 목록 확인하기
SHOW TABLES;
-- 생성된 테이블 구조 확인
DESC sample;
-- 생성된 테이블 삭제하기(테이블 구조 포함하여 완전히 삭제)
DROP TABLE sample;
-- 생성된 데이터베이스 삭제하기
DROP DATABASE my_shop;
2. 데이터 조작 기능 (Data Manipulation Language - DML)
역할: 일단 데이터베이스의 구조가 정의되면, 사용자는 이 구조에 맞춰 데이터를 등록(Insert), 조회(Select), 수정(Update), 삭제(Delete)할 수 있어야 한다. DBMS는 이러한 데이터 조작을 위한 효율적이고 편리한 방법을 제공한다. 특히 관계형 DBMS에서는 SQL(Structured Query Language)이라는 표준화된 언어를 주로 사용한다.
// 데이터 베이스를 생성(CREATE DATABASE 데이터베이스이름) 후 생성한 데이터베이스 접속(USE 데이터베이스이름)
// 데이터베이스에 접속 후 테이블 생성 CREATE TABLE 테이블이름 (컬럼속성, 컬럼속성1, 컬럼속성2);
// 생성한 테이블 구조 확인 DESC 테이블이름;
CREATE TABLE sample(
product_id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL UNIQUE,
price INT NOT NULL,
stock_quantity INT DEFAULT 0,
release_date DATETIME DEFAULT CURRENT_TIMESTAMP
)
✅ 해당 sample이라는 테이블과 해당 속성을 가진 테이블을 만든 후 DML을 조작해보자!
-- (INSERT, SELECT, UPDATE, DELETE)
UPDATE sample
SET price = 40000
WHERE product_id = 1;
DELETE : 데이터 지우기(Delete)
DELETE FROM sample
WHERE product_id = 1;
-- DELETE 구문을 사용할 때 특히 주의해야되는 점!
-- DLEETE 구문을 조건없이 사용하면 해당 테이블을 데이터 및 구조까지 없애버리는 무시무시한 명령어..
-- DLELETE 구문을 사용할 땐 꼭 WHERE 조건문을 함께 사용해야 한다.
3. 보안, 동시성 제어, 트랜잭션 관리 기능
역할 : DBMS는 데이터의 보안을 유지하고, 여러 사용자가 동시에 데이터에 접근할 때 발생할 수 있는 문제를 제어하는 기능을 수행한다.
보안(Security) : 허가된 사용자만이 데이터에 접근할 수 있도록 하고, 사용자별로 접근 가능한 데이터의 범위나 수행할 수 있는 작업(읽기, 쓰기, 수정 등)을 제한할 수 있다.
동시성 제어(Concurrency Control) : 여러 사용자가 동시에 같은 데이터를 수정하려고 할 때, 데이터의 일관성이 깨지지 않도록 순서를 제어하거나 잠금(Locking) 메커니즘을 사용한다. (예: 쇼핑몰에서 동시에 여러 고객이 마지막 남은 한 개의 상품을 주문하려고 할 때, 한 고객에게만 판매가 완료되도록 처리)
트랜잭션 관리(Transaction Management) : 아주 중요한 개념인데, 여러 개의 작업을 하나의 논리적인 단위(트랜잭션)로 묶어서 처리한다. 이 트랜잭션은 전부 성공적으로 완료되거나(Commit), 하나라도 실패하면 전부 이전 상태로 되돌아가야(Rollback) 데이터의 일관성이 보장된다 (이를 원자성(Atomicity) 이라고 한다). 예를 들어, 계좌 이체라는 것은 (1) 나의 돈을 출금하고, (2) 대상 계좌에 돈을 입금하는 과정이다. 만약 나의 돈을 출금했는데, 대상 계좌에 돈을 입금하는 과정에서 문제가 발생하게 되면, 나의 돈만 사라지는 심각한 문제가 발생한다. 따라서 이 두 작업은 모두 성공하거나 모두 실패해야 한다. 만약 대상 계좌에 돈을 입금하는 과정에서 문제가 발생하면 나의 돈을 출금했던 것도 취소되어야 한다. DBMS는 이러한 트랜잭션 관리를 통해 데이터의 일관성과 안정성을 보장한다.
트랜잭션이 지켜야 할 기본 원칙 AICD 속성
🔹 ACID란?
ACID는 Atomicity(원자성), Consistency(일관성), Isolation(고립성), Durability(지속성) 의 약자입니다. 데이터베이스가 신뢰성 있게 동작하기 위해 꼭 보장해야 하는 네 가지 성질을 말합니다.
1. 원자성 (Atomicity)
트랜잭션의 작업은 모두 수행되거나(All) 전혀 수행되지 않아야(Not at all) 합니다.
즉, 중간에 일부만 실행되는 일이 없어야 함.
예: 은행 계좌 이체
A 계좌에서 10만 원 출금 → B 계좌로 10만 원 입금
중간에 장애가 나면 두 작업 모두 취소(rollback)되어야 함.
2. 일관성 (Consistency)
트랜잭션이 실행 전후에 데이터베이스의 무결성이 항상 유지되어야 합니다.
즉, 데이터가 규칙(제약조건, 무결성 제약 등)을 깨지 않아야 함.
예: 은행 계좌 총액이 100만 원이라면, 이체 후에도 전체 합계는 반드시 100만 원이어야 함.
3. 고립성 (Isolation)
동시에 여러 트랜잭션이 실행될 때, 서로의 중간 결과를 볼 수 없어야 함.
즉, 각 트랜잭션은 독립적으로 실행된 것처럼 보장되어야 함.
예: 두 사용자가 동시에 같은 상품을 주문할 때, 트랜잭션이 완전히 끝나기 전까지는 다른 사용자가 그 데이터를 읽을 수 없음.
4. 지속성 (Durability)
트랜잭션이 성공적으로 완료되면, 그 결과는 시스템에 영구적으로 반영되어야 합니다.
시스템 장애(전원 꺼짐, 서버 다운 등)가 발생해도 데이터는 보존되어야 함.
예: 주문이 완료되어 결제까지 성공했다면, 서버가 꺼지더라도 주문 내역은 남아 있어야 함.