Developer's Development

3.1.8 [DB] 데이터베이스 본문

프로그래밍과 데이터 기초/DB

3.1.8 [DB] 데이터베이스

mylee 2025. 7. 6. 22:49

Data : 관찰의 결과로 나타난 정량적 혹은 정상적인 실제 값

Information : 데이터를 기반으로 하여 의미를 부여한 것

 

Database

 

한 조직에 필요한 정보를 여러 응용 시스템에서 공유할 수 있도록 논리적으로 연관된 데이터를 모으고, 중복되는 데이터를 최소화하여 구조적으로 통합/저장해 놓은 것

정의 : 운영 데이터, 공용 데이터, 통합 데이터, 저장 데이터

특징 : 실시간 접근성, 계속적인 변화, 동시 공유, 내용에 따른 참조

 

DBMS

 

데이터베이스에서 데이터를 추출, 조작, 정의, 제어 등을 할 수 있게 해주는 데이터베이스 전용 관리 프로그램

기능 : 데이터 추출, 조작, 정의, 제어

사용 이점 : 데이터 중복 최소화, 쿼리 언어, 데이터 무결성, 데이터 백업 및 복구, 표준화

  • 관계형 데이터베이스(RDBMS) : 데이터를 테이블의 형태로 저장하며, 각 테이블은 행(레코드)과 열(필드)로 구성되어 있다.

 

MySQL

 

가장 널리 사용되는 오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS)

특징 : 오픈소스, 효율성과 성능, 다양한 운영체제 지원, 보안, 다양한 저장 엔진, 트랜잭션 처리 지원

MySQL이 제공하는 다양한 데이터베이스 엔진 : InnoDB, MyISAM, NDB Cluster

https://dev.mysql.com/downloads/mysql/

 

MySQL :: Download MySQL Community Server

Select Version: 9.3.0 Innovation 8.4.5 LTS 8.0.42 Select Operating System: Select Operating System… Microsoft Windows Ubuntu Linux Debian Linux SUSE Linux Enterprise Server Red Hat Enterprise Linux / Oracle Linux Fedora Linux - Generic Oracle Solaris mac

dev.mysql.com

  • 동작 원리 (MySQL이 쿼리를 실행하는 과정)

클라이언트/서버 통신 👉🏻 쿼리 파싱 👉🏻 최적화 및 실행 계획 생성 👉🏻 쿼리 실행 👉🏻 결과 반환

 

DDL

 

데이터베이스의 스키마를 정의하거나 수정하는 데 사용되는 SQL의 한 부분

  • CREATE : 테이블 생성
  • AUTO_INCREMENT : INSERT 시 PRIMARY 키에 해당하는 컬럼에 자동으로 번호를 발생시켜 저장
  • ALTER : 테이블 추가/변경/수정/삭제
  • DROP : 테이블 삭제
  • TRUNCATE : 테이블 초기화 (DROP 후 바로 테이블 재생성)
CREATE TABLE IF NOT EXISTS tb2 (
    pk INT AUTO_INCREMENT PRIMARY KEY,
    fk INT,
    col1 VARCHAR(255),
    CHECK(col1 IN ('Y', 'N'))
) ENGINE=INNODB;

 

CONSTRAINTS (제약조건) ⭐

 

테이블에 데이터가 입력되거나 수정될 때의 규칙을 정의하며, 데이터 무결성을 보장하는 데 도움이 된다.

  • NOT NULL : NULL값을 허용하지 않는 제약조건
  • UNIQUE : 중복값을 허용하지 않는 제약조건
  • PRIMARY KEY : 테이블에서 한 행의 정보를 찾기 위해 사용할 컬럼을 의미하며, 테이블에 대한 식별자 역할을 한다. NOT NULL + UNIQUE 제약조건의 의미이며, 한 테이블 당 한 개만 설정할 수 있다. 한 개 컬럼에 설정할 수도 있고, 여러 개의 컬럼을 묶어서 설정할 수도 있음(복합키)
  • FOREIGN KEY : 참조된 다른 테이블에서 제공하는 값만 사용할 수 있으며, 참조 무결성을 위배하지 않기 위해 사용한다.
  • CHECK : check 제약 조건 위반 시 허용하지 않는 제약조건
  • DEFAULT : 컬럼에 NULL 대신 기본 값 적용
DROP TABLE IF EXISTS user_foreignkey1;
CREATE TABLE IF NOT EXISTS user_foreignkey1 (
    user_no INT PRIMARY KEY,
    user_id VARCHAR(255) NOT NULL,
    user_pwd VARCHAR(255) NOT NULL,
    user_name VARCHAR(255) NOT NULL,
    gender VARCHAR(3) CHECK (gender IN ('남','여')),
    age INT CHECK (age >= 19),
    add_day DATE DEFAULT (current_date),
    FOREIGN KEY (grade_code) REFERENCES user_grade (grade_code)
) ENGINE=INNODB;

 

INDEX

 

데이터 검색 속도를 향상시키는 데이터 구조로, 데이터를 빠르게 조회할 수 있는 포인터를 제공한다. 데이터베이스에서 데이터를 찾을 때 전체 테이블을 검색하는 대신 인덱스를 통해 검색을 하므로 속도가 더 빨라진다.

-- 인덱스 생성
CREATE INDEX idx_name_price ON phone (phone_name, phone_price);

-- 인덱스 확인
SHOW INDEX FROM phone;

-- 쿼리 실행 계획 확인
EXPLAIN SELECT * FROM phone WHERE phone_name = 'iPhone14pro';

-- 테이블과 인덱스 최적화 (InnoDB 엔진 사용 시)
OPTIMIZE TABLE phone;

-- 인덱스 삭제
DROP INDEX idx_name ON phone;

 

VIEW

 

SELECT 쿼리문을 저장한 객체로, 가상테이블이라고도 불린다.

실질적인 데이터를 물리적으로 저장하고 있지 않고 쿼리만 저장했지만, 테이블을 사용하는 것과 동일하게 사용할 수 있다.

 

STORED PRODECURE

 

미리 컴파일되어 데이터베이스에 저장된 SQL 문의 집합으로, 프로시저라고도 불린다.

복잡한 작업을 하나의 프로시저로 만들어 필요할 때마다 호출할 수 있으며, 코드의 재사용성과 유지보수성을 높여준다.

 

 TRIGGER

 

특정 데이터 변경 이벤트(DML 작업: INSERT, UPDATE, DELETE)가 발생할 때 자동으로 실행되는 저장된 프로시저의 한 종류로, 데이터의 무결성과 일관성을 유지하는 데 사용된다. 

* 활용 : 변경 이력(LOG) 관리, 복잡함 비즈니스 로직 구현

 

백업 및 복원

 

백업 : 데이터 손실에 대비하여 현재의 데이터베이스 상태를 저장하는 과정

  • 논리적 백업 : 데이터베이스의 구조와 데이터를 SQL 문장으로 덤프하여 저장하는 방법
  • 물리적 백업 : 데이터 파일 자체를 복사하여 백업하는 방법

복원 : 데이터를 사용하여 데이터베이스를 이전 상태로 복구하는 과정

 

TRANSACTION

 

데이터 베이스에서 한 번에 수행되는 작업의 단위

시작, 진행, 종료 단계를 가지며 만약 중간에 오류가 발생하면 롤백을 수행하고, DB에 재대로 반영하기 위해서는 커밋을 진행한다.

MySQL은 기본적으로 자동 커밋 설정이 되어 있어(롤백이 안됨), 롤백을 하기 위해서는 자동 커밋 설정을 해제해 주어야 한다.

'프로그래밍과 데이터 기초 > DB' 카테고리의 다른 글

3.1.13 [Python] MySQL 연동  (0) 2025.07.08
3.1.12 [DB] JOIN, SUBQUERY  (1) 2025.07.08
3.1.11 [DB] DML  (0) 2025.07.08
3.1.10 [DB] SELECT  (1) 2025.07.08
3.1.9 [DB] 데이터 모델링  (3) 2025.07.07