Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

dohyung / 9주차 / OS 3.4, DB 4.1 ~ 4.3 #33

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions dohyung/DB/ERD와 정규화 과정.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# ERD와 정규화 과정

ERD는 DB를 구축할 때 가장 기초적인 뼈대 역할을 하며, 릴레이션 간의 관계들을 정의한 것이다.
만약 서비스를 구축한다면 가장 먼저 신경 써야 할 부분이다.
DB를 구축한 이후에도 디버깅 또는 비즈니스 프로세스 재설계가 필요한 경우에 설계도 역할을 담당한다.
하지만 ERD는 비정형 데이터를 충분히 표현할 수 없는 단점이 존재한다.

> **비정형 데이터** : 비구조화 데이터, 미리 정의된 데이터 모델이 없거나, 미리 정의된 방식으로 정리되지 않은 정보를 말한다.

## 정규화 과정

정규화 과정은 릴레이션 간의 잘못된 종속 관계로 인한 DB 이상 현상을 해결한다.
또한 저장 공간을 효율적으로 사용하기 위해 릴레이션을 여러 개로 분리하는 과정이다.

### 제1정규형

릴레이션의 모든 도메인이 더 이상 분해될 수 없는 원자 값으로만 구성되어야 한다.
만약에 반복 집합이 있다면 제거한다.

### 제2정규형

릴레이션이 제1정규형이며 부분 함수의 종속성을 제거한 형태를 말한다.
부분 함수의 종속성 제거란 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속인 것을 말한다.

### 제3정규형

제2정규형이고 기본키가 아닌 모든 속성이 이행적 함수 종속을 만족하지 않는 상태를 말한다.

### 보이스/코드 정규형

BCNF는 제3정규형이고, 결정자가 후보키가 아닌 함수 종속 관계를 제거하여 릴레이션의 함수 종속 관계에서 모든 결정자가 후보키인 상태를 말한다.
55 changes: 55 additions & 0 deletions dohyung/DB/데이터베이스 기본.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# 데이터베이스 기본

데이터베이스는 일정한 규칙, 혹은 규약을 통해 구조화되어 저장되는 데이터의 모음이다.
DB를 제어, 관리하는 통합 시스템을 DBMS라고 하며, 특정 DBMS마다 정의된 쿼리 언어를 통해 CRUD를 수행할 수 있다.
또한, DB는 실시간 접근과 동시 공유가 가능하다.

## 1. 엔티티

엔티티는 사람, 장소, 물건, 사건, 개념 등 여러 개의 속성을 가진 명사를 의미한다.
예를 들어, 회원이라는 엔티티는 이름, 아이디, 주소, 전화번호 등의 속성을 갖는다.

엔티티는 강한 엔티티와 약한 엔티티로 나뉜다.
A가 혼자서는 존재하지 못하고 B의 존재 여부에 따라 종속적이라면 A는 약한 엔티티, B는 강한 엔티티라고 할 수 있다.
예를 들어, 방은 건물 안에만 존재하기 때문에 방은 약한 엔티티라고 할 수 있고 건물은 강한 엔티티라고 할 수 있다.

## 2. 릴레이션

릴레이션은 DB에서 정보를 구분해서 저장하는 기본 단위다.
엔티티에 관한 데이터를 DB는 릴레이션 하나에 담아서 관리한다.
릴레이션은 관계형 DB에서는 테이블이라고 하며, NoSQL DB에서는 컬렉션이라고 한다.

## 3. 속성

속성은 릴레이션에서 관리하는 구체적이며 고유한 이름을 갖는 정보다.
서비스 요구 사항을 기반으로 관리해야 할 필요가 있는 속성들만 엔티티의 속성이 된다.

## 4. 도메인

도메인은 릴레이션에 포함된 각각의 속성들이 가질 수 있는 값의 집합을 말한다.
예를 들어, 성별이라는 도메인이 있다면 가질 수 있는 값의 집합은 {남, 여}가 된다.

## 5. 필드와 레코드

테이블은 칼럼 필드를 가지고 테이블에 쌓이는 행 단위의 데이터를 레코드(튜플)라고 한다.

### 필드 타입

- 숫자 타입 : TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT
- 날짜 타입 : DATE, DATETIME, TIMESTAMP
- 문자 타입 : CHAR, VARCHAR, TEXT, BLOB, ENUM, SET

## 6. 관계

DB에는 여러 개의 테이블이 있고 이러한 테이블은 서로의 관계가 정의되어 있다.
1:1, 1:N, N:M이라는 관계들이 존재한다.

## 7. 키

- 기본키 : PK또는 프라이머리 키라고 많이 부르며, 유일성과 최소성을 만족하는 키다.
- 자연키 : 중복된 값들을 제외하며 중복되지 않는 것을 자연스레 뽑다가 나오는 키를 자연키라고 하며 언젠가는 변하는 속성을 가진다.
- 인조키 : 인위적으로 필드를 부여해서 고유 식별자가 생겨난 키를 인조키라고 한다.
- 외래키 : 다른 테이블의 기본키를 그대로 참조하는 값으로 개체와의 관계를 식별하는 데 사용한다.
- 후보키 : 기본키가 될 수 있는 후보들이며 유일성과 최소성을 동시에 만족하는 키다.
- 대체키 : 후보키가 두 개 이상일 경우 어느 하나를 기본키로 지정하고 남은 후보키를 말한다.
- 슈퍼키 : 각 레코드를 유일하게 식별할 수 있는 유일성을 갖춘 키다.
44 changes: 44 additions & 0 deletions dohyung/DB/트랜잭션과 무결성.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# 트랜잭션과 무결성

# 트랜잭션

## 원자성

원자성은 트랜잭션과 관련된 일이 모두 수행되었거나 되지 않았거나를 보장하는 특징이다.

## 일관성

일관성은 허용된 방식으로만 데이터를 변경해야 하는 것을 의미한다.

## 격리성

격리성은 트랜잭션 수행 시 끼어들지 못하는 것을 말한다.

### 격리 수준

격리 수준은 SERIALIZABLE, REPEATABLE_READ, READ_COMMITTED, READ_UNCOMMITTED가 있다.
오른쪽으로 갈수록 동시성이 강해지지만 격리성은 약해진다.

- **SERIALIZABLE**: 트랜잭션을 순차적으로 진행시키고 여러 트랜잭션이 동시에 같은 행에 접근할 수 없다. 매우 엄격한 격리 수준이다.
- **REPEATABLE_READ**: 하나의 트랜잭션이 수정한 행을 다른 트랜잭션이 수정할 수 없도록 막아주지만 새로운 행을 추가하는 것은 막지 않는다.
- **READ_COMMITTED**: 다른 트랜잭션이 커밋하지 않은 정보는 읽을 수 없다. 커밋 완료된 데이터에 대해서만 조회를 허용한다.
- **READ_UNCOMMITTED**: 하나의 트랜잭션이 커밋되기 전에 다른 트랜잭션에 노출되는 문제가 있지만 가장 빠르다. 가장 낮은 격리 수준이다.

### 격리 수준에 따라 발생하는 현상

- **팬텀 리드**: 한 트랜잭션 내에서 동일한 쿼리를 보냈을 때 해당 조회 결과가 다른 경우를 말한다.
- **반복 가능하지 않은 조회**: 한 트랜잭션 내의 같은 행에 두 번 이상 조회가 발생했는데, 그 값이 다른 경우를 말한다.
- **더티 리드**: 한 트랜잭션이 실행 중일 때 다른 트랜잭션에 의해 수정되었지만 아직 커밋 되지 않은 행의 데이터를 읽을 수 있을 때 발생한다.

## 지속성

성공적으로 수행된 트랜잭션은 영원히 반영되어야 하는 것을 의미한다.

# 무결성

데이터의 정확성, 일관성, 유효성을 유지하는 것을 말한며, 무결성이 유지되어야 DB와 현실의 값 일치를 통해 신뢰성도 유지할 수 있다.

- **개체 무결성** : 기본키로 선택된 필드는 빈 값을 허용하지 않는다.
- **참조 무결성** : 서로 참조 관계에 있는 두 데이터는 항상 일관된 값을 유지해야 한다.
- **고유 무결성** : 특정 속성에 대해 고유한 값을 가지도록 조건이 주어진 경우, 모두 고유한 값을 가진다.
- **NULL 무결성** : 특정 속성 값에 NULL이 올 수 없는 조건이 주어진 경우, 값은 NULL이 될 수 없다.
44 changes: 44 additions & 0 deletions dohyung/OS/CPU 스케줄링 알고리즘.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# CPU 스케줄링 알고리즘

## 1. 비선점형 방식

프로세스가 스스로 CPU 소유권을 포기하는 방식이다.
강제로 프로세스를 중지하지 않기 때문에 컨텍스트 스위칭으로 인한 부하가 적다.

### 1-1. FCFS

First Come, First Served로 가장 먼저 온 것을 먼저 처리하는 알고리즘이다.
길게 수행되는 프로세스 때문에 준비 큐에서 오래 기다리는 현상인 convoy effect가 발생하는 단점이 존재한다.

### 1-2. SJF

Shortest Job First는 실행 시간이 가장 짧은 프로세스를 가장 먼저 실행하는 알고리즘이다.

### 1-3. 우선순위

기존 SJF 스케줄링의 경우 긴 시간을 가진 프로세스가 실행되지 않는 현상이 있다.
이는 오래된 작업일수록 우선순위를 높이는 aging을 통해 단점을 보완한 알고리즘이다.

## 2. 선점형 방식

현대 운영체제가 쓰는 방식으로 지금 사용하고 있는 프로세스를 알고리즘에 의해 중단시킨다.
그리고 강제로 다른 프로세스의 CPU 소유권을 할당하는 방식이다.

### 2-1. 라운드 로빈

RR, Round Robin은 현대 컴퓨터가 쓰는 스케줄링인 우선순위 스케줄링의 일종이다.
각 프로세스는 동일한 할당 시간을 주고 그 시간 안에 끝나지 않으면 다시 준비 큐의 뒤로 가는 알고리즘이다.
예를 들어 q만큼의 할당 시간이 부여되고 N개의 프로세스가 운영된다고 하면 (N - 1) * q 시간이 지나면 자기 차례가 온다.
할당 시간이 너무 크면 FCFS가 되고 짧으면 컨텍스트 스위칭이 잦아져서 오버헤드, 즉 비용이 커진다.
일반적으로 전체 작업 시간은 길어지지만 평균 시간을 짧아진다는 특징이 있다.
로드밸런서에서 트래픽 분산 알고리즘으로도 쓰인다.

### 2-2. SRF

SJF는 중간에 실행 시간이 더 짧은 작업이 들어와도 기존 짧은 작업을 모두 수행하고 그 다음 짧은 작업을 이어나간다.
SRF는 중간에 더 짧은 작업이 들어오면 수행하던 프로세스를 중지하고 해당 프로세스를 수행하는 알고리즘이다.

### 2-3. 다단계 큐

다단계 큐는 우선순위에 따른 준비 큐를 여러 개 사용하고, 큐마다 라운드 로빈이나 FCFS 등 다른 스케줄링 알고리즘을 적용한 것을 말한다.
큐 간의 프로세스 이동이 안되므로 스케줄링 부담이 적지만 유연성이 떨어지는 특징이 있다.