본문 바로가기

TIL

데이터베이스

데이터베이스란?

데이터의 조직화된 집합, 데이터를 소프트웨어(프로젝트 단위) 에서 효율적으로 관리하기 위한 "저장소" 입니다.

저장소의 종류는 2가지가 있습니다. 

 

관계형 DB(RDBMS) 

  • 가장 많이 사용하는 데이터베이스
  • 데이터를 테이블 형태로 구조화하여 저장하고 관리하는 시스템
  • 테이블 간의 관계를 이용해 데이터를 연결한다.
  • ex) Oracle, MySQL, PostgreSQL, Microsoft SQL Server 등

비관계형 DB(NoSql)

  • 테이블이 아닌 key-value,document, graph 등의 다양한 형태로 데이터를 저장하고 관리한다.
  • 스키마가 고정되지 않고, 대규모 데이터 처리와 높은 확장성을 제공한다.
  • ex) MongoDB, Cassandra, Redis 등

!!!절대절대 뭐가 더 좋다, 나쁘다의 개념으로 접근해선 안된다. DB뿐만 아니라 프레임워크, 언어를 선택할때 팀(혹은 개인)의 학습 수준프로젝트의 규모, 확장가능성 등등을 고려해서 각 기술별로 장단점을 따져서 적용하는 것이지, 절대 뭐가 더 좋다 나쁘다로 접근해선 안됩니다.

트랜잭션(Transaction) : 하나의 논리작인 작업 단위를 뜻하며, 하나의 트랜잭션으로 묶여있는 작업들은 모두 성공적으로 완료하거나 하나라도 실패하면 전체가 취소됩니다.

 

지금 과정에선 NoSql은 다루지 않기때문에 언급하지 않겠습니다.

 

RDBMS(Relational Database Management System)

관계형 데이터베이스 RDB(Relational DataBase)를 관리할 수 있는 소프트웨어로 데이터를 테이블 형식으로 관리합니다. RDBMS는 데이터 간의 관계를 정의하고, 이러한 관계를 바탕으로 복잡한 Query를 실행할 수 있는 기능을 제공합니다.

 

특징

1. 테이블(Table)

  • 데이터는 테이블이라는 구조에 저장, 행(row)과 열(column)으로 구성된다.
  • 열은 데이터의 속성(유일한 이름)을 나타내고 타입(데이터 유형)을 가진다.
  • 행은 관계된 데이터의 묶음을 의미하고 tuple 또는 record라고 한다.
  • 데이터 무결성 : 특정 규칙과 제약조건(기본 키, 외래 키, 유니크 등)을 통해 데이터를 저장함으로써 데이터의 무결성(정확성, 일관성, 유효성)을 유지한다.

2. 관계(Relationships)

  • 테이블관의 관계는 외래 키(Foreign Key)를 통해 저장한다.
  • oneToOne , oneToMany, ManyToMany 등 다양한 관계를 지원한다.

3. SQL (Structured Query Language)

  • 데이터를 정의하고, 관리하기 위한 표준언어이다.
  • 데이터를 생성(Create), 읽기(Read), 갱신(Update), 삭제(Delete)하는 작업을 수행한다.

4. 키 (Keys)

  • 기본 키(Primary Key)
    • 테이블 내에서 각 행을 고유하게 식별하는 열 또는 열의 조합이다.
    • 기본 키는 중복되지 않으며, NULL 값을 가질 수 없다.
  • 외래 키(Foreign Key)
    • 한 테이블의 열이 다른 테이블의 기본 키를 참조하여 두 테이블 간의 관계를 설정하는 데 사용된다.
    • 테이블 간의 데이터 무결성을 유지할 수 있다.
  • 유일 키(Unique Key)
    • 기본 키와 유사하지만, 하나의 테이블에서 여러 개가 존재할 수 있다.
    • 중복된 값을 허용하지 않지만, NULL 값은 허용할 수 있다.

5. 트랜잭션(Transaction)

  • RDBMS는 트랜잭션이라는 단위를 통해 데이터베이스 작업을 처리하며, 이를 통해 데이터의 일관성과 무결성을 유지한다.
  • 트랜잭션은 원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), 지속성(Durability)이라는 ACID 속성을 따른다.
    • Atomicity: 트랜잭션의 모든 작업이 성공적으로 완료되거나, 실패 시 모든 작업이 롤백
    • Consistency: 트랜잭션이 데이터베이스를 일관된 상태로 유지
    • Isolation: 동시에 실행되는 트랜잭션 간의 영향을 최소화
    • Durability: 트랜잭션이 완료된 후 데이터의 변경 사항은 영구적으로 저장

6. 정규화 (Normalization)

  • 데이터의 중복을 줄이고, 일관성과 무결성을 유지하기 위해 데이터를 구조화하는 프로세스이다.
  • 여러가지 정규화 단계가 있으며, 각 단계는 데이터 중복을 줄이고 이상 현상을 방지하는 데 목적이 있다.

7. 데이터 무결성(Data Integrity)

  • 엔터티 무결성 : 각 테이블의 기본 키(PK)가 중복되지 않고 NULL 값이 아닌 상태를 유지한다.
  • 참조 무결성 : 외래 키(FK)를 통해 참조되는 데이터가 유효성을 유지하도록 보장한다.
  • 도메인 무결성 : 각 열이 정의된 데이터 타입과 제약 조건에 따라 유효한 값을 유지하도록 한다.

8. 인덱스(Index)

  • 특정 열의 검색 성능을 향상시키기 위해 사용된다.
  • 인덱스는 테이블의 데이터를 정렬하고, 효율적으로 접근할 수 있도록 지원한다.
  • 인덱스가 많아지면 삽입 및 수정 작업의 성능에 영향을 미칠 수 있다.

왜 인덱스가 많아지면 삽입 수정 성능에 영향을 미칠까?? 에 대한 공부를 좀해봤는데요,
아래 블로그에 간단하게 정리 해보았습니다. 

 

인덱스가 많아지면 수정 삽입등 성능에 영향이 미치는 이유

왜 DB테이블에서 인덱스가 많아지면 수정, 삽입등 작업에 성능영향이 갈까?? 인덱스가 있을때 조회 동작.인덱스를 쓰면 조회를 빠르게 할 수 있게 해준다고 합니다. 이유는 데이터 전체를 보지않

jamj.tistory.com

 

SQL(Structured Query Language)

강의에서 DDL/ DML/ DQL을 소개했는데 이3가지는 문법적 차이가 아닌, 역학(목적) 에 따른 분류이다.

 

1.DDL (Data Definition Language) : 구조를 정의/ 변경

데이터 베이스 생성, 테이블 생성

CREATE DATABASE hello;
CREATE TABLE users (
    id INT PRIMARY KEY,
    username VARCHAR(50),
    email VARCHAR(100)
);

테이블 구조 수정

ALTER TABLE users ADD created_at TIMESTAMP;

데이터베이스 및 테이블 삭제

DROP DATABASE hello;
DROP TABLE users;

 

2.DML (Data Manipulation Language)

데이터를 실제로 변경

테이블에 새로운사용자 정보 추가

INSERT INTO users (id, username, email) VALUES (1, 'John', 'john123@gmail.com');

 

수정

UPDATE users SET email = 'new.email@example.com' WHERE id = 1;

삭제

DELETE FROM users WHERE id = 1;

 

3. DQL (Data Query Language)

데이터 조회

SELECT * FROM users;

WHERE 절을 사용하여 특정 조건을 만족하는 데이터만 가져올 수 있습니다.

SELECT email FROM users WHERE username = 'John';