데이터베이스(Database) : 데이터의 집합 저장소
데이터베이스의 종류
관계형 DB : 데이터를 테이블 형태로 구조화하여 저장하고 관리하는 시스템
→ 테이블 간의 관계를 이용해 데이터를 연결
ex: Orable, MySQL, PostgreSQL
비관계형 DB(NoSQL) : 테이블이 아닌 key-value, document, graph 등의 다양한 형태로 데이터를 저장하고 관리
→ 스키마가 고정되지 않고, 대규모 데이터 처리와 높은 확장성 제공
ex: MongoDB, Redis
→ 데이터 간의 관계를 정의하고, 이 관계를 바탕으로 복잡한 쿼리를 실행할 수 있는 기능 제공
관계형 데이터베이스 특징
테이블(Table) : 행(row)과 열(column)로 구성된 테이블에 데이터 저장
→ 특정 규칙과 제약 조건으 통해 데이터를 저장함으로써 데이터의 무결성(정확성, 일관성, 유효성)을 유지
관계(Relatioships) : 테이블 간의 관계를 외래 키(Foreign Key)를 통해 설정됨
→ 1:1 관계, 1:다 관계, 다:다 관계 등 다양한 유형의 관계 지원
SQL(Structured Query Language) : RDBMS에서 데이터를 정의하고, 관리하기 위한 표준 언어
→ 데이터를 생성(Create), 읽기(Read), 갱신(Update), 삭제(Delete)하는 작업 수행
키(Keys)

기본 키(Primary Key) : 테이블 내에서 각 행을 고유하게 식별하는 열 또는 열의 조합
→ 중복 값 X, NULL 값 X
→ 한 테이블에서 하나만 생성 가능 (여러 컬럼을 묶어서 하나의 PK로 설정하는 것은 가능)
외래 키(Foreign Key) : 두 테이블 간의 관계를 설정하는 데 사용
→ 테이블 간의 데이터 무결성 유지
유일 키(Unique Key) : 기본 키와 유사하지만, 하나의 테이블에서 여러 개 생성 가능
→ 중복 값 X, NULL 값 O
트랜잭션(Transaction) : 하나의 논리적인 작업 단위
트랜잭션의 ACID 속성
원자성(Atomicity) : 트랜잭션의 모든 작업이 성공적으로 완료되거나, 실패 시 모든 작업이 롤백
→ 개발자는 언제 커밋하고, 언제 롤백할 지에 대한 기준을 세우고 코드를 작성해야 함
일관성(Consistency) : 트랜잭션 이전과 이후에 데이터베이스를 일관된 상태로 유지
→ 트랜잭션이 DB에 정의된 규칙을 위반했는지는 DBMS가 커밋 전에 확인하고 알려줌
고립성(Isolation) : 동시에 실행되는 트랜잭션 간의 영향을 최소화
→ DBMS는 여러 종류의 isolation level을 제공하고, 개발자는 이중에서 어떤 레벨로 트랜잭션을 동작시킬지 설정
지속성(Durability) : 트랜잭션이 완료된 후 데이터의 변경 사항은 영구적으로 저장
정규화 (Normalization) : 데이터의 중복을 줄이고, 일관성과 무결성을 유지하기 위해 데이터를 구조화하는 프로세스

데이터 무결성 (Data Integrity)
인덱스 (Index) : 특정 열의 검색 성능을 향상시키기 위해 사용
→ 테이블의 데이터를 정렬, 효율적으로 접근할 수 있도록 지원
※ 인덱스가 많아지면 삽입, 수정 작업의 성능에 영향을 미칠 수 있음
DDL(Data Definition Language) : 데이터베이스 구조 정의
| CREATE | 새로운 데이터베이스 및 테이블 생성 | id, uername, email 컬럼을 가진 users 테이블 생성
CREATE TABLE users ( id INT PRIMARY KEY, username VARCHAR(50), email VARCHAR(100) ); |
| --- | --- | --- |
| ALTER | 기존 데이터베이스 및 테이블 구조 수정 | users에 created_at 컬럼 추가
ALTER TABLE users ADD created_at TIMESTAMP; |
| DROP | 데이터베이스 및 테이블 삭지 | users 테이블 삭제 : DROP TABLE users;
example 데이터베이스 삭제 : DROP DATABASE example; |