본문 바로가기
cs

01. 데이터베이스

by 왜안돼요 2025. 4. 4.
728x90

데이터베이스와 DBMS

  • 데이터베이스: 원하는 기능을 동작시키기 위해 마땅히 저장해야하는 정보의 집합

데이터베이스는 프로그램, 웹 서비스에 있어 중요하다. 어떤 데이터가 저장되는지에 따라 웹 서비스의 정체성이 달라질 수 있으며 

데이터가 저장되는 방식에 따라 웹 서비스의 성능이 달라질 수 있기 때문이다.

이것을 관리하기 위한 수단이 데이터베이스 관리 시스템(DBMS)임.

 

DBMS: 데이터베이스를 관리하기 위한 프로그램

 

DBMS 종류

크게 두 유형으로 구분할 수 있다.

  • 관계형 데이터베이스 관리 시스템 (RDBMS 또는 관계형 데이터베이스)
  • NoSQL 데이터베이스 관리 시스템 (NoSQL DBMS 또는 NoSQL 데이터베이스)

RDBMS: MySQL, Oracle, PostgreSQL, SQLite, MariaDB, Microsoft SQL Server 등

NoSQL: MongoDB, Redis 등

 

서버로서의 DBMS

DBMS도 응용프로그램이다. 사용자와 직접 상호작용보다는 개발자가 만든 프로그램과 상호작용하며 실행된다.

응용 프로그램의 입장에서 DBMS는 마치 서버와도 같다. 쓰리 웨이 핸드셰이크를 통한 TCP 연결을 맺으며 디비에 접속하기 위한 인증이 필요하기도 한다.

DBMS 클라이언트는 DBMS에 쿼리를 보낸다. DBMS는 디비를 다루기 위한언어를 제공한다.

 

SQL: 대표적인 데이터베이스 언어이며 RDBMS에서 데이터를 조작하고 관리하기 위한 언어

 

SQL은 크게 네 종류로 구분된다.

  • DDL: 데이터 정의
  • DML: 데이터 조작
  • DCL: 데이터 제어
  • TCL: 트랜잭션을 제어
종류 명령 설명
DDL CREAT 데이터베이스 혹은 테이블, 뷰, 인덱스 등의 데이터베이스 객체 생성
ALTER 데이터베이스 객체 갱신
DROP 데이터베이스 객체 삭제
TRUNCATE 테이블 구조를 유지한 채 모든 레코드 삭제
DML SELECT 테이블의 레코드 조회
INSERT 테이블에 레코드 삽입
UPDATE 테이블의 레코드 갱신
DELETE 테이블의 레코드 삭제
DCL COMMIT 데이터베이스에 작업 반영
ROLLBACK 작업 이전의 상태로 되돌림
SAVEPOINT 롤백의 기준점 설정
TCL GRANT 사용자에게 권한 부여
REVOKE 사용자로부터 권한 회수

 

왜 파일 대신에 데이터베이스를 이용하는거지요..?

운영체제의 파일 시스템을 활용하면 데이터를 파일과 디렉터리 형태로 관리할 수 있다고 했는디 왜 파일 시스템 대신에 데이터베이스를 이용할까?

 

데이터 일관성 및 무결성 제공이 어려움

보통 여러명의 사용자, 프로그램이 동시다발적으로 데이터베이스를 이용한다. 그렇게 되면 레이스 컨디션 문제가 발생할 여지가 있으며

이로 인해 데이터의 일관성이 훼손되기 쉽다.

 

동기화 도구를 이용해도 되지만 저장된 파일에 대한 모든 접근에 일일이 동기화 도구를 사용하는 건 번거롭다 입니다.

또한 파일에 명시된 데이터에 결함이 없음을 일일이 검사하기도 번거로움

 

결론: 데이터의 무결성을 보장하기 어렵다.

 

불필요한 중복 저장이 많아짐

파일로 다량의 데이터를 관리할 경우 불필요한 중복 저장이 발생하기 쉽다.

 

데이터 변경 시 연관 데이터 변경이 어려움

만약에 학과이름이 컴퓨터과학에서 컴퓨터학과로 변경되었다고 가정했을때 학과가 컴퓨터과학인 학생들을 일일이 이름을 바꿔줘야함.

말만들어도 힘들지요

 

정교한 검색이 어려움

데이터가 많은경우 파일 내 문자열 검색에 국한되는 경우가 많다.

정교한 검색의 경우 파일만으로 어렵다.

 

백업 및 복구가 어려움

데이터베이스에서 백업과 복구 기능을 제공한다. 하지만 파일 입출력에선 이러한 기능을 제공하지 않거나 데이터베이스에 비해 부족한 수준으로 지원해준다.

다량의 데이터를 관리할 경우에는 데이터베이스가 효율적

 

데이터베이스의 저장 단위와 트랜잭션

데이터베이스의 저장 단위

데이터베이스에는 다양한 속성을 가진 독립적 객체들이 저장될 수 있다.

  • 엔티티(entity): 독립적으로 존재할 수 있는 객체

어떠한 특성을 가진 대상을 엔티티라고 볼 수 있다

엔티티들

  • 속성(attribute): 엔티티의 특성

구매자 ID, 이름, 성별, 제품 번호, 이름이 엔티티 속성이실게요

 

  • 엔티티 집합: 같은 속성을 공유하는 개별 엔티티

1,2는 구매자라는 엔티티 집합으로 표현할 수 있고 3,4는 제품이라는 엔티티 집합으로 표현할 수 있다.

 

그러먼 DBMS는 엔티티랑 엔티티 집합을 어떻게 표현하고 저장하냐?????

RDBMS는 엔티티 집합을 테이블 형태로 표현한다.

 

  • 릴레이션: RDBMS이차원 테이블 형태의 엔티티 집합
  • 컬렉션: NoSQL DBMS의 일종인 몽고 디비의 엔티티 집합
  • 레코드: 데이터베이스에 기록된 각각의 엔티티
  • 필드: 데이터베이스에 저장된 엔티티 속성

RDMS에서는 개별 레코드를 테이블의 행으로 표현하고 필드를 테이블의 열로 표현한다.

몽고디비에서는 개별 레코드를 Json 형태의 데이터인 도큐먼트라는 단위로 표현하고 필드를 Json 키의 형태로 표현한다.

 

 

스키마

RDBMS와 NoSQL을 구분하는 주요 기준 중 하나로 스키마의 유무를 꼽을 수 있다.

  • 스키마: 데이터베이스에 저장되는 레코드의 구조와 제약 조건을 정의한것

테이블의 구조와 각 필드의 데이터 타입, 제약 조건 등이 정의 된 틀이 스키마이다.

 

NoSQL에서는 명확한 스키마가 정의되지 않기 때문에 스키마 리스 데이터베이스라고도 부른다.

레코드들이 지켜야 할 구조와 제약 조건에 제한이 없어 RDBMS보다 자유로운 형태의 레코드를 작성할 수 있다.

 

 

트랜잭션과 ACID

  • 트랜잭션: 데이터베이스와의 논리적 상호작용의 단위를 의미

트랜잭션은 데이터베이스가 처리하는 작업의 단위를 나타내므로 초당 트랜잭션이라는 지표로 데이터베이스의 작업 성능을 나타내기도한다.

 

*유의할 점: 트랜잭션이 하나의 쿼리만 포함하는것은 아니다. 태율이 경원에게 오천원을 이체하는 트랜잭션에서는 2개이상의 쿼리가 포함될 수 있다.

 

  • 태율의 계좌 잔액을 오천원 감소
  • 경원의 계좌 잔액을 오천원 증가

트랜잭션이 지켜야하는 성질에는 크게 4가지가 있는데 각 단어 앞글자만 따서 ACID라고한다.

원자성, 일관성, 격리성, 지속성의 줄임말이다!

 

1. 원자성(Atomicity)

하나의 트랜잭션 결과가 모두 성공하거나 실패하는 성질을 의미

 

예)경원이의 계좌 잔액을 오천원 증가시키는 작업 실행 도중에 DBMS가 다운됐다면 태율의 계좌 잔액을 오천원 감소시켰던 작업도 취소 되어야함.

트랜잭션이 하나의 단위로 처리되는 것을 원자성이라고 한다.

 

  • 태율의 계좌 잔액을 오천원 감소
  • 경원의 계좌 잔액을 오천원 증가

All or Nothing 주어진 작업을 모두 성공하거나 모두 실패할 뿐, 일부 성공이나 일부 실패는 허용하지 않는다.

 

2. 일관성

트랜잭션 전후로 데이터베이스가 일관된 상태를 유지하는 성질

 

  • 일관된 상태란 : 데이터베이스가 지켜야하는 일련의 규칙들을 지키는 상태를 의미

3. 격리성

동시에 수행되는 여러 트랜잭션이 서로 간섭하지 않도록 보장하는 성질을 의미

긍께 한 트랜잭션이 어떤 데이터에 접근하여 조작 중일 때는 다른 트랜잭션이 접근할 수 없음!

 

예) 재고가 1개뿐인 상품을 두 명의 사용자가 동시에 구매하려고 시도하는 상황

  • 격리성이 보장되지 않을 경우: 두 트랜잭션이 동시에 재고 확인 -> 각각 재고가 있다고 판단하여 결제 시도 -> 재고 부족 문제 발생
  • 격리성이 보장되었을 경우: 두 트랜잭션이 동시에 수행되지 않음! 

4. 지속성

트랜잭션이 성공적으로 완료된 후에 그 결과가 영구적으로 반영되는 성질을 의미

시스템 장애가 발생하더라도 완료된 트랜잭션의 결과는 손실되지 않아야함.

 

예) 돈 입금 하는 트랜잭션이 성공적으로 완료되었다면 결과가 디스크에 기록되어 시스템 장애가 발생해도 입금 내역이 사라지지 않아야함.

 

요즘엔 잘 구현 되어있다고 합니다잉

 

 

 

 

'cs' 카테고리의 다른 글

03. SQL  (0) 2025.04.04
02. RDBMS의 기본  (0) 2025.04.04
04. 전송계층 - TCP와 UDP  (0) 2025.03.19
03. 네트워크 계층 - IP  (0) 2025.03.19
02. 물리 계층과 데이터 링크 계층  (0) 2025.03.19

최근댓글

최근글

skin by © 2024 ttuttak