본문 바로가기

클라우드(Cloud)

[스나이퍼팩토리] 카카오클라우드 AIaaS 마스터 클래스 4주차 - DB 1(데이터베이스1_RDB/KEY/SQL/TRANSACTION)

📌 1. 관계형 데이터베이스(RDB, Relational Database)란?

✅ 개념

  • 데이터를 행(Row)과 열(Column)로 구성된 표(Table) 형태로 저장하는 데이터베이스
  • 테이블은 하나의 엔티티(Entity)를 표현함
  • 테이블 간의 관계(Relation)를 설정해서 데이터를 효율적으로 관리

✅ 예시 (학생 테이블)

학번 이름 전공
101 홍길동 컴퓨터공학
102 김영희 산업공학
103 이철수 기계공학

→ 이 표가 바로 하나의 "관계(Relation)"이고, 이런 관계를 여러 개 만들 수 있음 (예: 과목 테이블, 성적 테이블 등)


📌 2. 관계형 데이터베이스 관리 시스템 (RDBMS)

✅ 개념

  • RDBMS는 RDB를 생성, 조회, 수정, 삭제(CRUD) 할 수 있게 도와주는 소프트웨어 시스템
  • 테이블 간의 관계 유지, 트랜잭션 처리, 동시성 제어, 보안 등을 담당

✅ 대표적인 RDBMS

제품명 설명
MySQL 오픈소스, 가볍고 속도가 빠름
PostgreSQL 오픈소스, 고급 기능과 확장성 제공
Oracle 상용 소프트웨어, 강력한 기능 제공
Microsoft SQL Server 마이크로소프트 제품, .NET과 호환성이 좋음

📌 3. RDB와 RDBMS의 차이점

항목 RDB RDBMS
정의 관계형 데이터베이스 (데이터 구조 그 자체) 관계형 데이터베이스를 관리하는 시스템
형태 테이블로 구성된 데이터 데이터를 조작하고 제어하는 소프트웨어
예시 학생, 성적 등의 테이블 MySQL, PostgreSQL, Oracle 등
기능 데이터만 저장 CRUD, 트랜잭션, 보안, 백업, 복원 등 포함

📌 4. 왜 RDBMS를 사용하는가?

  • 📋 구조화된 데이터 관리: 테이블로 명확히 표현 가능
  • 🔗 데이터 간 관계 설정: 외래키로 연결
  • 🧾 SQL 지원: 데이터를 쉽게 조회 및 조작 가능
  • 🔒 데이터 무결성 유지: 제약조건(Primary Key, Foreign Key 등)
  • 🔁 트랜잭션 지원: 데이터 일관성 보장
  • 🔐 보안 기능 제공: 사용자 권한 제어 가능

📌 5. RDB의 장/단점

[장점]

구분 장점 설명 
데이터 정합성 ACID 보장 트랜잭션의 안정성과 일관성 확보 (은행, 병원 등 핵심 시스템에 필수)
구조화된 데이터 관리 스키마 기반 설계 데이터 구조가 명확하여 설계와 유지보수가 쉬움
복잡한 쿼리 처리 가능 SQL 지원 JOIN, GROUP BY 등 다양한 조건으로 복잡한 질의 수행 가능
데이터 무결성 유지 제약조건 설정 (PK, FK) 중복 방지, 관계 보장, 데이터 오류 방지
보안 및 접근 제어 권한 기반 사용자 관리 데이터에 대한 세밀한 접근 통제 가능 (GRANT, REVOKE)
표준화된 언어 사용 SQL 표준 지원 다양한 RDBMS에서도 비슷한 문법으로 개발 가능 (MySQL, PostgreSQL, Oracle 등)
백업 및 복구 용이 운영/백업 체계 잘 갖춤 데이터 손실 시 신속한 복구 가능
성숙한 생태계 툴, 커뮤니티 풍부 다양한 ORM, 분석 도구, 대시보드 등과 호환 쉬움

 

[단점]

단점 설명
확장성 부족 (수평 확장 어려움) RDB는 Scale-Up(더 좋은 서버로 교체) 중심이라 대용량 데이터에 비효율적
복잡한 JOIN 연산 여러 테이블 간의 JOIN 연산이 많아질수록 성능 저하 발생
유연성 부족 (스키마 고정) 스키마(테이블 구조)가 사전에 고정되어 있어 데이터 변경이 어려움
비정형 데이터 처리 어려움 JSON, 이미지, 센서 데이터 등 비정형/반정형 데이터 처리에 약함
속도 이슈 특히 읽기/쓰기 트래픽이 급증하는 경우 속도가 느려질 수 있음

 

위와 같이 RDB를 구성해서 사용하기 위해서는 테이블의 키(KEY)가 매우 중요하다. 키(KEY)를 통해 테이블 간의 관계가 연결된다. 

 


📌 1. 키(Key)란?

키는 테이블에서 "각 행(Row)"을 구분하거나, "테이블 간 관계"를 연결하기 위해 사용되는 값(속성)

 

📌 2. 주요 키의 종류 및 역할

키(KEY) 설명 예시
Primary Key (기본키) 테이블에서 각 행을 유일하게 식별하는 키. NULL 불가, 중복 불가 학번, 주문ID 등
Foreign Key (외래키) 다른 테이블의 기본키를 참조하여 관계를 맺는 키 학생.학과ID → 학과.학과ID
Candidate Key (후보키) 기본키가 될 수 있는 후보들 중 하나. 유일성과 최소성을 만족 주민번호, 이메일 등
Alternate Key (대체키) 후보키 중에서 선택되지 않은 나머지 키 기본키가 아닌 이메일, 전화번호 등
Composite Key (복합키) 두 개 이상의 컬럼으로 구성된 기본키 과목ID + 학번 (수강 테이블)
Super Key (슈퍼키) 유일성은 만족하지만 최소성은 만족하지 않는 학번+이름, 학번+전화번호 등
Unique Key (유니크키) 기본키는 아니지만 중복 없이 고유해야 하는 값, NULL은 허용 이메일, 전화번호 등

📌 3. 실전 예제로 이해해보기

예시 테이블: 학생(Students)

학번(PK) 이름 학과ID(FK) 이메일(UNIQUE)
2023001 홍길동 CSE gil@example.com
2023002 김영희 ISE kim@example.com
  • Primary Key: 학번
  • Foreign Key: 학과 ID → 학과 테이블의 학과ID
  • Unique Key: 이메일
  • Candidate Key: 학번, 이메일
  • Alternate Key: 이메일
  • Composite Key: (예: 수강 테이블에서 학번 + 과목코드)

📌 4. 주요 키 제약 조건 요약

중복 허용 NULL 허용 역할
Primary Key ❌ 불가능 ❌ 불가능 유일한 식별자
Foreign Key ✅ 가능 ✅ 가능 관계 연결
Unique Key ❌ 불가능 ✅ 가능 고유값 보장
Composite Key ❌ 불가능 ❌ 불가능 여러 컬럼 조합으로 식별

 

위의 내용을 통해 DB의 테이블이 생성되고 관리된다. 이때 우리는 관계형 데이터베이스(RDB)를 잘 다루기 위해 SQL 명령어를 통해 쿼리문을 작성하며 데이터베이스를 관리하게 된다. 

 

SQL 명령어는 아래와 같이 분류된다. 


📌 1. SQL 명령어 분류 총정리

분류 이름 주 명령어 역할
🔧 DDL Data Definition Language CREATE, DROP, ALTER, TRUNCATE 데이터베이스 구조 정의/수정
🧾 DML Data Manipulation Language SELECT, INSERT, UPDATE, DELETE 데이터 조작 (조회/삽입/수정/삭제)
🛡 DCL Data Control Language GRANT, REVOKE 사용자 권한 제어
🔄 TCL Transaction Control Language COMMIT, ROLLBACK, SAVEPOINT 트랜잭션 제어

📌 2. 각 SQL 종류별 예제와 설명

✅ 🔧 DDL (데이터 정의 언어)

명령어 설명 예시
CREATE 테이블, 데이터베이스 생성 CREATE TABLE users (id INT, name VARCHAR(50));
DROP 테이블, DB 삭제 DROP TABLE users;
ALTER 구조 변경 ALTER TABLE users ADD email VARCHAR(100);
TRUNCATE 데이터 전체 삭제 (구조는 유지) TRUNCATE TABLE users;

🚨 주의: DDL은 트랜잭션 롤백이 안 됨!


✅ 🧾 DML (데이터 조작 언어)

명령어 설명 예시
SELECT 데이터 조회 SELECT * FROM users;
INSERT 데이터 삽입 INSERT INTO users VALUES (1, '홍길동');
UPDATE 데이터 수정 UPDATE users SET name='김영희' WHERE id=1;
DELETE 데이터 삭제 DELETE FROM users WHERE id=1;

✅ 트랜잭션 적용 가능 (롤백/커밋 가능)


✅ 🛡 DCL (권한 제어 언어)

명령어 설명 예시
GRANT 권한 부여 GRANT SELECT ON users TO 'user1';
REVOKE 권한 회수 REVOKE SELECT ON users FROM 'user1';

보안 정책이나 사용자 관리에서 사용


✅ 🔄 TCL (트랜잭션 제어 언어)

명령어 설명 예시
BEGIN 또는 START TRANSACTION 트랜잭션 시작 START TRANSACTION;
COMMIT 변경 내용 확정 COMMIT;
ROLLBACK 변경 내용 취소 ROLLBACK;
SAVEPOINT 중간 저장점 설정 SAVEPOINT sp1;
ROLLBACK TO 특정 저장점으로 롤백 ROLLBACK TO sp1;

 

DDL, DML, DCL 모두 DB의 데이터와 관련된 명령어들이라는 것을 알 수 있다. 

 

여기서 이것들과는 조금 다른 TCL(Transaction Control Language), 트랜잭션과 관련된 명령어를 볼 수 있다. 

트랜잭션에 대해 이해하면 위의 명령어도 쉽게 이해될 것이다. 

 

📌 3. 트랜잭션(Transaction)이란?

✅ 개념

트랜잭션이란, 데이터베이스에서 하나의 논리적인 작업 단위를 의미한다. 
여러 DML 명령을 한 덩어리로 묶어 처리하며, 성공하면 COMMIT, 실패하면 ROLLBACK.


✅ 트랜잭션의 4대 특성 (ACID)

항목 의미 
A - Atomicity (원자성) 모든 작업은 전부 수행되거나, 전혀 수행되지 않음
C - Consistency (일관성) 트랜잭션 전후로 DB 상태가 일관됨
I - Isolation (격리성) 동시에 실행되는 트랜잭션 간 간섭 없음
D - Durability (지속성) 커밋된 내용은 시스템 장애 후에도 유지됨

✅ 트랜잭션 예시

START TRANSACTION;

UPDATE 계좌 SET 잔액 = 잔액 - 10000 WHERE 계좌번호 = 'A123';
UPDATE 계좌 SET 잔액 = 잔액 + 10000 WHERE 계좌번호 = 'B456';

COMMIT; -- or ROLLBACK;
 

이 두 UPDATE는 한 덩어리 트랜잭션으로 처리되어야 한다. 
하나만 실행되면 돈이 사라지거나 두 번 입금되는 오류가 발생할 수 있다. 


📌 4. 트랜잭션 격리 수준 (Isolation Level)

수준 Dirty Read Non-Repeatable ReadPhantom Read 성능
READ UNCOMMITTED 발생 ❗ 발생 ❗ 발생 ❗ 🔥 최고
READ COMMITTED 방지 ✅ 발생 ❗ 발생 ❗
REPEATABLE READ 방지 ✅ 방지 ✅ 발생 ❗ (MySQL InnoDB는 방지함) ⬆⬆
SERIALIZABLE 방지 ✅ 방지 ✅ 방지 ✅ ⬆⬆⬆ 가장 느림

💡 기본 격리 수준:

  • MySQL(InnoDB): REPEATABLE READ
  • PostgreSQL: READ COMMITTED

📌 5. 💥 동시성 제어 (Concurrency Control)

✅ 왜 필요할까?

  • 다수의 트랜잭션이 동시에 동일한 데이터를 조작하면 충돌이 발생할 수 있음
  • 예) 두 사람이 동시에 은행 계좌에서 돈을 인출하면, 잔액 오류 발생 가능

📌 6. 🔒 잠금(Locking) 메커니즘

잠금(Lock) 은 하나의 트랜잭션이 자원을 사용할 때 다른 트랜잭션의 접근을 막는 방식

 

📌 6.1 잠금의 종류

구분 이름 설명
범위 Row-level Lock 특정 행(Row)만 잠금 (정밀함, 병행성 높음)
  Table-level Lock 전체 테이블을 잠금 (간단함, 병행성 낮음)
권한 Shared Lock (S-Lock) 다른 트랜잭션도 읽기는 허용, 쓰기는 불가
  Exclusive Lock (X-Lock) 읽기/쓰기 모두 막음, 오직 하나의 트랜잭션만 허용

📌 6.2 잠금 예시 (MySQL InnoDB 기준)

✅ Shared Lock (읽기 잠금)

SELECT * FROM accounts WHERE id = 1 LOCK IN SHARE MODE;

 

✅ Exclusive Lock (쓰기 잠금)

SELECT * FROM accounts WHERE id = 1 FOR UPDATE;
 
 

🔐 이 명령들은 트랜잭션 안에서만 유효하고 COMMIT 또는 ROLLBACK 시 해제됨


📌 7. 🔁 교착 상태(Deadlock)란?

두 개 이상의 트랜잭션이 서로가 가진 자원을 기다리며 무한 대기하는 상태

 

💥 발생 예시

  • 트랜잭션 A: 행 X → 행 Y 잠금 요청
  • 트랜잭션 B: 행 Y → 행 X 잠금 요청

→ 서로 상대의 잠금 해제를 기다리며 영원히 멈춤

Deadlock Error

✅ 해결 방법

  • DBMS가 자동으로 한쪽 트랜잭션을 강제 종료 (ROLLBACK)
  • 쿼리 실행 순서 정렬, 타임아웃 설정, 명시적 잠금 사용으로 사전 방지 가능

우리의 일상에서 쉽게 찾아볼 수 있는 예시로 은행, 재고 관리 등 트랜잭션으로 이루어지는 동작들이 많이 있다. 

 

DB에 관련된 내용으로 RDB부터 시작해 SQL, 쿼리문, Transaction까지 알아보았다.

다음에는 JOIN, 정규화, INDEX 등에 대해 자세히 알아볼 예정이다. 

 

 


본 후기는 [카카오엔터프라이즈x스나이퍼팩토리] 카카오클라우드로 배우는 AIaaS 마스터 클래스 (B-log) 리뷰로 작성 되었습니다.

 

#카카오클라우드 #AIaaS마스터클래스 #AIaaS #카카오엔터프라이즈 #한국생산성본부 #스나이퍼팩토리 #부트캠프 #개발자교육 #클라우드개발자 #클라우드엔지니어