1. DB & DBMS
1-1. DB(Database)
: 데이터를 효율적으로 저장하고 관리할 수 있도록 설계된 시스템
- ⇒ 데이터를 체계적으로 저장하고 관리하는 논리적 집합
- 목표: 데이터의 저장, 검색, 갱신을 효과적 / 효율적으로 처리하기 위함.
1-2. DBMS (Database Management System)
데이터를 효율적으로 관리하고, 데이터를 안전하게 저장하며, 여러 사용자들이 데이터베이스에 접근할 수 있도록 제어 / 관리를 수행하는 소프트웨어
- ⇒ 데이터베이스를 생성, 관리, 조작할 수 있게 해주는 소프트웨어
- DB를 직접 관리하지 않고, DBMS가 중간에서 요청을 처리함.
- DBMS는 데이터의 CRUD를 효율적이고 안전하게 수행함.
- 목표: 데이터베이스 내의 데이터를 효율적으로 관리하고, 이를 손쉽게 조작하고, 다수의 사용자가 동시에 데이터를 처리할 수 있도록 동시성 제어를 제공함.
CRUD
데이터베이스에서 데이터를 다룰 떄 수행하는 4가지 기본 작업
| 연산 | SQL 명령어 | 의미 | 예시 |
|---|
| C (Create) | INSERT | 새 데이터 추가 | INSERT INTO employees VALUES (...); |
| R (Read) | SELECT | 데이터 조회 | SELECT * FROM employees; |
| U (Update) | UPDATE | 기존 데이터 수정 | UPDATE employees SET salary = 5000 WHERE id = 1; |
| D (Delete) | DELETE | 데이터 삭제 | DELETE FROM employees WHERE id = 1; |
2. SQL
SQL, Structured Query Language
DBMS에게 지시를 내리는 명령어의 전체 집합
크게 데이터 정의, 조작, 제어, 트랜젝션 관리 기능 포함
| 분류 | 역할 | SQL 명령어 예시 |
|---|
| DDL | 데이터 구조 정의 | CREATE, ALTER, DROP, TRUNCATE |
| DML | 데이터 조작 | SELECT, INSERT, UPDATE, DELETE |
| DCL | 권한 제어 | GRANT, REVOKE |
| TCL | 트랜잭션 제어 | COMMIT, ROLLBACK, SAVEPOINT |
- DDL ⇒ 설계도를 그리는 도구
- DML ⇒ 실제 데이터 작업 도구
- DCL ⇒ 권한 관리 도구
- TCL ⇒ 실행 기록 관리 도구
2-1.DDL (Data Definition Language)
데이터 구조를 정의하는 언어
스키마와 테이블 구조를 만드는 역할을 수행함.
| 명령어 | 설명 | 예시 |
|---|
CREATE | 데이터베이스, 테이블, 인덱스 생성 | CREATE TABLE employees (...); |
ALTER | 테이블 구조 변경 | ALTER TABLE employees ADD COLUMN age INT; |
DROP | 테이블, DB, 인덱스 삭제 | DROP TABLE employees; |
TRUNCATE | 데이터 전체 삭제 (구조 유지) | TRUNCATE TABLE employees; |
- DB의 설계도를 다루는 부분으로, 스키마 관리 계층에 속함.
- 데이터 구조 변경 작업 (데이터 조작 X)
- 자동 커밋 (즉시 반영)
- 롤백 불가능
2-2. DML (Data Manipulation Language)
데이터를 조작하는 언어
CRUD와 직접적으로 관련 있음
| 명령어 | 설명 | 예시 |
|---|
INSERT | 새 데이터 추가 | INSERT INTO employees VALUES (...); |
SELECT | 데이터 조회 | SELECT * FROM employees; |
UPDATE | 데이터 수정 | UPDATE employees SET salary=6000 WHERE id=1; |
DELETE | 데이터 삭제 | DELETE FROM employees WHERE id=1; |
- DBMS 내부에서 데이터 조작 계층에 속함. (Data Manipulation Layer)
- TCL과 함꼐 사용 가능 (COMMIT, ROLLBACK)
2-3. DCL (Data Control Language)
데이터 접근 권한을 제어하는 언어
사용자, 권한, 보안 관련 제어를 담당
| 명령어 | 설명 | 예시 |
|---|
GRANT | 사용자에게 권한 부여 | GRANT SELECT ON employees TO user1; |
REVOKE | 권한 회수 | REVOKE SELECT ON employees FROM user1; |
2-4. TCL (Transaction Control Language)
트랜젝션 단위를 제어하는 언어
데이터 조작(DML)의 변경 시점을 관리
| 명령어 | 설명 | 예시 |
|---|
COMMIT | 변경사항 확정 | COMMIT; |
ROLLBACK | 변경사항 취소 | ROLLBACK; |
SAVEPOINT | 중간 저장점 설정 | SAVEPOINT pointA; |
SET TRANSACTION | 트랜잭션 속성 설정 | SET TRANSACTION READ ONLY; |
- TCL은 DBMS의 트랜잭션 관리 계층에 속함.
- DML과 함께 사용됨.
- DDL은 자동 커밋이므로 TCL의 영향을 받지 않음.
3. 테이블 & 스키마
3-1. DB 테이블
: DB에서 데이터를 구조적으로 저장하는 기본 단위
각 테이블은 하나의 엔티티를 나타내며,
행 & 열로 이루어져 있음.
- 행 (Row, Tuple, Record)
테이블에서 하나의 레코드 / 튜플을 나타냄.
각 행은 테이블 내에서 하나의 개별 데이터를 나타내며, 여러 열(속성)을 포함함.
(학생 테이블 - 한 명의 학생이 하나의 행을 차지)
- 열 (Column, Attribute)
테이블에서 데이터를 속성 단위로저장하는 부분
각 열은 특정 속성의 데이터를 저장함.
(학생 테이블 - 이름, 나이, 학번)
3-2. 스키마
스키마란?
: 테이블의 구조와 제약 조건을 정의한 설계도
- DB내에 포함될 데이터의 구조, 테이블, 속성(필드), 관계, 제약 조건 등을 정의하는 것
- 스키마 설계는 DB가 어떻게 구성될지에 대한 논리적 구조를 정의하며, DB 설계에서 매우 중요한 단계
- 스키마는 DB를 효율적이고 일관성 있게 관리하고 무결성을 보장하기 위해 살용됨
- 스키마 & DB
스키마 ⇒ 데이터의 구조적 설계도
데이터베이스 ⇒ 그 설계대로 채워진 실제 데이터 공간
스키마의 구성 요소
- 테이블 구조
각 테이블의 칼럼(속성)과 데이터 타입
- 테이블 간의 관계
1:1, 1:N, M:N 등
- 제약 조건
Primary Key, Foreign Key, Unique, Not Nul
- 뷰(View), 인덱스(Index), 프로시저(Stored Procedures) 등
스키마 3계층
사용자, 설계자, 시스템의 관점을 분리하여 DB를 설계하고 관리하는 표준적인 방식
스키마를 3단계로 나누는 가장 큰 이유는 데이터 독립성을 확보하기 위함임.
- 논리적 데이터 독립성
개념 스키마가 변경되어도, 기존 외부 스키마는 영향을 받지 않는 것을 의미함.
DB의 논리적 구조가 확장되거나 변경되어도, 기존에 사용하던 프로그램 코드를 수정할 필요가 없음.
- 물리적 데이터 독립성
내부 스키마가 변경되어도, 개념 스키마와 외부 스키마는 영향을 받지 않는 것을 의미함.
DB 관리자가 성능 튜닝을 위해 물리적 구조를 바꿔도, 사용자나 애플리케이션은 동일하게 DB를 사용할 수 있음.
-
외부 스키마 (External Schema)
[관점] 최종 사용자 / 응용 프로그램
개별 사용자나 특정 애플리케이션이 필요로 하는 DB의 일부를 정의한 것
전체 DB 중 사용자가 보게 될 창 / 뷰로 생각할 수 있음.
e.g. 쇼핑몰 DB) 고객 - 자신의 주문 내역만 볼 수 있고, 배송팀- 배송지 주소와 상품명만 볼 수 있음.
- 하나의 DB에 여러 개의 외부 스키마가 존재할 수 있음
- DB의 전체 구조를 숨기고, 사용자가 필요한 부분에만 간단하게 접근할 수 있게 함.
- 서브 스키마라고도 불림
-
개념 스키마 (Conceptual Schema)
[관점] DBA(DB 관리자 / 설계자)관맂
DB의 전체적인 논리적 구조를 정의한 것
DB에 무엇이 저장되는지 나타냄
: 어떤 엔티티가 있고, 어떤 속성을 가지며, 개체들 간 어떤 관계를 가지는지?
스키마 / ERD로 그리는 대상
- DB에 단 하나만 존재함
- 데이터의 무결성, 보안 규칙, 제약 조건 등 모두 이곳에 정의됨
- 물리적 저장 방식(내부 스키마)이나 개별 사용자 뷰(외부 스키마)와는 독립적임
-
내부 스키마 (Internal Schema)
[관점] DBMS / 시스템 프로그래머
데이터가 하드디스크와 같은 물리적 저장 장치에 실제로 어떻게 저장되는지 정의한 것
데이터의 물리적인 저장 구조, 파일 구성 방식, 인덱스 생성 방법, 데이터 압축 등을 다룸
DB의 성능, 효율성에 직접적인 영향을 줌
- DB에 단 하나만 존재함
- 물리적 스키마(Physical Schcema)라고도 부름
- 개념 스키마와 논리적 구조가 실제로 어떻게 구현될지 구체적으로 명시함
3-3. 스키마 설계
스키마 설계는 데이터의 논리적 관계와 제약을 설계하는 과정임.
- 데이터 무결성 & 정확성 확보
- PK 정의
모든 테이블의 각 행은 고유하게 식별할 수 있는 기본 키를 가져야 함.
- 정확한 데이터 타입 설정
데이터를 가장 잘 표현할 수 있는 타입을 사용하여야 함.
e.g. 나이 (INT)
- 제약조건 적극 활용
NOT NULL, UNIQUE, FK,…
- 데이터 중복 최소화 (정규화, Normalization)
- 정규화 (Normalization)
중복된 데이터를 최소화 & 데이터 무결성을 유지하기 위해 데이터를 적절히 분할하는 과정
보통 1NF (제1정규형)부터 5NF(제5정규형)까지 여러 단계로 나뉘어 데이터 구조를 최적화
정규화는 데이터 중복을 피하고 갱신 / 삭제 이상 문제를 예방하는 데 유리하지만, 조인 연산이 많아져서 성능에 영향을 미칠 수 있음.
- 1NF: 각 컬럼에 원자값(Atomic Value)만을 포함하여 데이터를 중복하지 않도록 함.
- 2NF: 부분 종속성을 제거하여 데이터 무결성을 강화함.
- 3NF: 이행적 종속성을 제거하여 데이터의 의존 관계를 단순화함.
- BCNF(보이스-코드 정규형): 3NF보다 한 단계 더 엄격한 정규화
- 명확성 & 일관성 유지
- 일관된 이름 규칙 (Naming Convention)
테이블 이름: 복수형 / 단수형 중 하나로 통일 (복수형이 일반적)
컬럼 이름: 보통 snake_case
직곽적인 이름 & 주석 추가 (설명)
-
성능 & 확장성 고려
데이터와 사용자가 많아졌을 때도 시스템이 원활하게 동작하도록 설계해야 함.
- 적절한 인덱스 설계
WHERE 절에서 자주 조회되거나, JOIN의 연결고리가 되는 컬럼에서는 인덱스를 생성하여 조회속도를 향상시킴.
단 ,인덱스는 INSERT / UPDATE 성능을 저하시킬 수 있으므로 무분별한 사용 X
- 반정규화의 전략적 사용
정규화(원칙 2)를 철저하게 지킬 경우 JOIN이 많아져 성능이 저하될 수 있음.
조회 성능을 높이기 위해 의도적으로 중복을 허용하거나 테이블을 합침. (반정규화)
반정규화는 정규화를 충분히 거친 후 성능상 이점이 확실할 때만 선택적으로 적용되어야 함.