RDBMS (Relational Database Management System), 즉 관계형 데이터베이스 관리 시스템은 데이터를 테이블(Table)이라는 정해진 형식의 2차원 표에 저장하고 관리하는 시스템입니다.
가장 대표적인 예로 MySQL, PostgreSQL, Oracle, MSSQL 등이 있습니다.
id, 이름, 이메일)user_id로 연결됨)이 관계 덕분에 데이터의 중복을 최소화하고(정규화), 데이터의 일관성(무결성)을 유지하기 매우 용이합니다.
데이터베이스의 구조(Schema)를 정의하거나 수정, 삭제할 때 사용합니다. 데이터의 틀을 만드는 역할입니다.
CREATE: 새로운 데이터베이스나 테이블을 생성합니다.CREATE TABLE Users (id INT, name VARCHAR(50));ALTER: 기존 테이블의 구조를 수정합니다. (열 추가/삭제, 타입 변경)ALTER TABLE Users ADD email VARCHAR(100);DROP: 데이터베이스나 테이블을 완전히 삭제합니다.DROP TABLE Users;TRUNCATE: 테이블의 모든 데이터를 삭제하지만, 테이블 구조(틀)는 남겨둡니다. (로그가 남지 않아 DELETE보다 빠름)테이블 안의 실제 데이터를 조작(추가, 조회, 수정, 삭제)할 때 사용합니다. 개발자가 가장 빈번하게 사용하는 SQL입니다.
SELECT: 데이터를 조회합니다. (가장 중요!)SELECT FROM Users WHERE name = **홍길동**;INSERT: 테이블에 새로운 데이터를 삽입합니다.INSERT INTO Users (id, name) VALUES (1, **홍길동**);UPDATE: 기존 데이터를 수정합니다.UPDATE Users SET name = **김철수** WHERE id = 1;DELETE: 특정 데이터를 삭제합니다.DELETE FROM Users WHERE id = 1;데이터베이스 사용자의 권한을 관리(부여하거나 뺏는) 데 사용됩니다.
GRANT: 특정 사용자에게 특정 작업(예: SELECT, INSERT)을 수행할 권한을 부여합니다.REVOKE: 부여했던 권한을 회수합니다.Key와 Index는 데이터베이스의 무결성과 성능을 좌우하는 매우 중요한 개념입니다.
Key는 테이블의 각 행(Row)을 식별하거나 테이블 간의 관계를 맺는 데 사용되는 특별한 열(Column)입니다.
UNIQUE), NULL 값(빈 값)을 허용하지 않습니다. (NOT NULL)user_id, student_id)user_id는 반드시 회원 테이블에 존재하는 user_id여야 함)Index는 데이터베이스의 SELECT 조회 속도를 획기적으로 향상시키는 기술입니다.
WHERE 절의 조건(예: name = **홍길동**)을 찾기 위해 테이블의 모든 데이터를 처음부터 끝까지 스캔합니다. (Full Table Scan)name)에 대해 만들어진 Index 테이블(B-Tree 구조)을 탐색합니다. Index에는 홍길동이라는 값이 실제 데이터의 어느 위치(주소)에 저장되어 있는지 기록되어 있어, 해당 주소로 바로 찾아갈 수 있습니다.SELECT (조회) 속도가 매우 빨라집니다.INSERT, UPDATE, DELETE (쓰기/수정) 속도는 느려집니다. (데이터가 변경될 때마다 Index 테이블도 함께 수정되어야 하기 때문)결론: Index는 조회(SELECT)가 자주 발생하는 열(WHERE 절에 자주 쓰이는 열)에 대해 전략적으로 생성해야 합니다.
RDBMS (Relational Database Management System), 즉 관계형 데이터베이스 관리 시스템은 데이터를 테이블(Table)이라는 정해진 형식의 2차원 표에 저장하고 관리하는 시스템입니다.
id, 이름)RDBMS가 관계형이라고 불리는 이유는 테이블 간에 논리적인 연결(관계)을 맺을 수 있기 때문입니다. 이는 Foreign Key(외래 키)를 통해 구현되며, 데이터의 중복을 최소화하고 일관성을 유지합니다.
User 테이블과 User_Profile 테이블처럼, 하나의 데이터가 다른 테이블의 데이터 하나와만 연결됩니다.User 테이블과 Post 테이블처럼, 한 명의 유저가 여러 개의 게시글을 작성할 수 있습니다. (가장 일반적인 관계)Student 테이블과 Subject 테이블처럼, 한 명의 학생이 여러 과목을 수강하고 한 과목을 여러 학생이 수강할 수 있습니다. (이 경우, Student_Subject라는 중간 테이블(매핑 테이블)을 두어 1:N 관계 두 개로 풀어냅니다.)ACID는 RDBMS가 트랜잭션(Transaction)을 처리할 때 반드시 보장해야 하는 4가지 핵심 원칙입니다. 트랜잭션이란 은행 송금처럼 모두 성공하거나 모두 실패해야 하는 하나의 작업 단위를 의미합니다.
데이터베이스의 구조(Schema)를 정의, 수정, 삭제합니다. (데이터의 틀 관리)
CREATE: 테이블 생성. (CREATE TABLE Users ...)ALTER: 테이블 구조 수정. (ALTER TABLE Users ADD email ...)DROP: 테이블 완전 삭제. (DROP TABLE Users;)TRUNCATE: 테이블 데이터만 삭제. (구조는 남김)테이블 안의 실제 데이터를 조작(추가, 수정, 삭제)합니다.
INSERT: 데이터 삽입. (INSERT INTO Users ...)UPDATE: 데이터 수정. (UPDATE Users SET ...)DELETE: 데이터 삭제. (DELETE FROM Users ...)데이터를 조회합니다. (많은 곳에서 DML의 일부로 보기도 하지만, SELECT는 워낙 중요하고 방대하여 따로 분류하기도 합니다.)
SELECT: 데이터를 조회. (SELECT FROM Users ...)데이터베이스 사용자의 권한을 관리합니다.
GRANT: 사용자에게 권한을 부여합니다.REVOKE: 사용자의 권한을 회수합니다.ACID 특성을 보장하는 트랜잭션을 제어할 때 사용합니다. DML 작업(INSERT, UPDATE, DELETE)을 논리적인 작업 단위로 묶습니다.
COMMIT: 모든 작업을 최종 확정하고 데이터베이스에 영구 저장합니다.ROLLBACK: 작업 중 문제가 발생했을 때, 마지막 COMMIT 시점(혹은 SAVEPOINT)으로 모든 작업을 되돌립니다.SAVEPOINT: 트랜잭션 내에 임시 저장 지점을 만들어, 전체가 아닌 특정 지점까지만 ROLLBACK 할 수 있게 합니다.Key는 테이블의 각 행(Row)을 식별하거나 테이블 간의 관계를 맺는 데 사용되는 특별한 열(Column)입니다.
(학번), (주민등록번호), (학번, 이름))(학번), (주민등록번호))NULL과 중복을 허용하지 않습니다.학번)주민등록번호)Index는 데이터베이스의 SELECT 조회 속도를 획기적으로 향상시키는 기술입니다. 책 맨 뒤의 찾아보기(Index)와 같습니다.
인덱스는 대부분 B-Tree (Balanced Tree)라는 자료구조로 구현됩니다.
pointer)를 빠르게 찾을 수 있습니다. (Full Table Scan이 이라면, Index 탐색은 O(logN))BETWEEN, >)에 매우 빠릅니다.name에도, email에도 인덱스 생성 가능)SELECT (조회) 속도가 WHERE, JOIN, ORDER BY 절에서 매우 빨라집니다.INSERT, UPDATE, DELETE 시, 데이터뿐만 아니라 B-Tree 인덱스 구조도 재정렬하고 수정해야 하므로 성능이 저하됩니다.결론: Index는 조회(SELECT)가 압도적으로 많고, 데이터 변경(INSERT 등)이 적으며, WHERE 절에 자주 쓰이는 열(카디널리티가 높은 열)에 대해 전략적으로 생성해야 합니다.
간략한 개념 정리 후에 뒤에서 심화 내용을 알려주어 더 이해가 쉬웠던 것 같습니다!