diff --git "a/dohyung/DB/ERD\354\231\200 \354\240\225\352\267\234\355\231\224 \352\263\274\354\240\225.md" "b/dohyung/DB/ERD\354\231\200 \354\240\225\352\267\234\355\231\224 \352\263\274\354\240\225.md" new file mode 100644 index 0000000..d695c4a --- /dev/null +++ "b/dohyung/DB/ERD\354\231\200 \354\240\225\352\267\234\355\231\224 \352\263\274\354\240\225.md" @@ -0,0 +1,31 @@ +# ERD와 정규화 과정 + +ERD는 DB를 구축할 때 가장 기초적인 뼈대 역할을 하며, 릴레이션 간의 관계들을 정의한 것이다. +만약 서비스를 구축한다면 가장 먼저 신경 써야 할 부분이다. +DB를 구축한 이후에도 디버깅 또는 비즈니스 프로세스 재설계가 필요한 경우에 설계도 역할을 담당한다. +하지만 ERD는 비정형 데이터를 충분히 표현할 수 없는 단점이 존재한다. + +> **비정형 데이터** : 비구조화 데이터, 미리 정의된 데이터 모델이 없거나, 미리 정의된 방식으로 정리되지 않은 정보를 말한다. + +## 정규화 과정 + +정규화 과정은 릴레이션 간의 잘못된 종속 관계로 인한 DB 이상 현상을 해결한다. +또한 저장 공간을 효율적으로 사용하기 위해 릴레이션을 여러 개로 분리하는 과정이다. + +### 제1정규형 + +릴레이션의 모든 도메인이 더 이상 분해될 수 없는 원자 값으로만 구성되어야 한다. +만약에 반복 집합이 있다면 제거한다. + +### 제2정규형 + +릴레이션이 제1정규형이며 부분 함수의 종속성을 제거한 형태를 말한다. +부분 함수의 종속성 제거란 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속인 것을 말한다. + +### 제3정규형 + +제2정규형이고 기본키가 아닌 모든 속성이 이행적 함수 종속을 만족하지 않는 상태를 말한다. + +### 보이스/코드 정규형 + +BCNF는 제3정규형이고, 결정자가 후보키가 아닌 함수 종속 관계를 제거하여 릴레이션의 함수 종속 관계에서 모든 결정자가 후보키인 상태를 말한다. \ No newline at end of file diff --git "a/dohyung/DB/\353\215\260\354\235\264\355\204\260\353\262\240\354\235\264\354\212\244 \352\270\260\353\263\270.md" "b/dohyung/DB/\353\215\260\354\235\264\355\204\260\353\262\240\354\235\264\354\212\244 \352\270\260\353\263\270.md" new file mode 100644 index 0000000..fc32e4a --- /dev/null +++ "b/dohyung/DB/\353\215\260\354\235\264\355\204\260\353\262\240\354\235\264\354\212\244 \352\270\260\353\263\270.md" @@ -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또는 프라이머리 키라고 많이 부르며, 유일성과 최소성을 만족하는 키다. +- 자연키 : 중복된 값들을 제외하며 중복되지 않는 것을 자연스레 뽑다가 나오는 키를 자연키라고 하며 언젠가는 변하는 속성을 가진다. +- 인조키 : 인위적으로 필드를 부여해서 고유 식별자가 생겨난 키를 인조키라고 한다. +- 외래키 : 다른 테이블의 기본키를 그대로 참조하는 값으로 개체와의 관계를 식별하는 데 사용한다. +- 후보키 : 기본키가 될 수 있는 후보들이며 유일성과 최소성을 동시에 만족하는 키다. +- 대체키 : 후보키가 두 개 이상일 경우 어느 하나를 기본키로 지정하고 남은 후보키를 말한다. +- 슈퍼키 : 각 레코드를 유일하게 식별할 수 있는 유일성을 갖춘 키다. \ No newline at end of file diff --git "a/dohyung/DB/\355\212\270\353\236\234\354\236\255\354\205\230\352\263\274 \353\254\264\352\262\260\354\204\261.md" "b/dohyung/DB/\355\212\270\353\236\234\354\236\255\354\205\230\352\263\274 \353\254\264\352\262\260\354\204\261.md" new file mode 100644 index 0000000..875ed17 --- /dev/null +++ "b/dohyung/DB/\355\212\270\353\236\234\354\236\255\354\205\230\352\263\274 \353\254\264\352\262\260\354\204\261.md" @@ -0,0 +1,44 @@ +# 트랜잭션과 무결성 + +# 트랜잭션 + +## 원자성 + +원자성은 트랜잭션과 관련된 일이 모두 수행되었거나 되지 않았거나를 보장하는 특징이다. + +## 일관성 + +일관성은 허용된 방식으로만 데이터를 변경해야 하는 것을 의미한다. + +## 격리성 + +격리성은 트랜잭션 수행 시 끼어들지 못하는 것을 말한다. + +### 격리 수준 + +격리 수준은 SERIALIZABLE, REPEATABLE_READ, READ_COMMITTED, READ_UNCOMMITTED가 있다. +오른쪽으로 갈수록 동시성이 강해지지만 격리성은 약해진다. + +- **SERIALIZABLE**: 트랜잭션을 순차적으로 진행시키고 여러 트랜잭션이 동시에 같은 행에 접근할 수 없다. 매우 엄격한 격리 수준이다. +- **REPEATABLE_READ**: 하나의 트랜잭션이 수정한 행을 다른 트랜잭션이 수정할 수 없도록 막아주지만 새로운 행을 추가하는 것은 막지 않는다. +- **READ_COMMITTED**: 다른 트랜잭션이 커밋하지 않은 정보는 읽을 수 없다. 커밋 완료된 데이터에 대해서만 조회를 허용한다. +- **READ_UNCOMMITTED**: 하나의 트랜잭션이 커밋되기 전에 다른 트랜잭션에 노출되는 문제가 있지만 가장 빠르다. 가장 낮은 격리 수준이다. + +### 격리 수준에 따라 발생하는 현상 + +- **팬텀 리드**: 한 트랜잭션 내에서 동일한 쿼리를 보냈을 때 해당 조회 결과가 다른 경우를 말한다. +- **반복 가능하지 않은 조회**: 한 트랜잭션 내의 같은 행에 두 번 이상 조회가 발생했는데, 그 값이 다른 경우를 말한다. +- **더티 리드**: 한 트랜잭션이 실행 중일 때 다른 트랜잭션에 의해 수정되었지만 아직 커밋 되지 않은 행의 데이터를 읽을 수 있을 때 발생한다. + +## 지속성 + +성공적으로 수행된 트랜잭션은 영원히 반영되어야 하는 것을 의미한다. + +# 무결성 + +데이터의 정확성, 일관성, 유효성을 유지하는 것을 말한며, 무결성이 유지되어야 DB와 현실의 값 일치를 통해 신뢰성도 유지할 수 있다. + +- **개체 무결성** : 기본키로 선택된 필드는 빈 값을 허용하지 않는다. +- **참조 무결성** : 서로 참조 관계에 있는 두 데이터는 항상 일관된 값을 유지해야 한다. +- **고유 무결성** : 특정 속성에 대해 고유한 값을 가지도록 조건이 주어진 경우, 모두 고유한 값을 가진다. +- **NULL 무결성** : 특정 속성 값에 NULL이 올 수 없는 조건이 주어진 경우, 값은 NULL이 될 수 없다. \ No newline at end of file diff --git "a/dohyung/OS/CPU \354\212\244\354\274\200\354\244\204\353\247\201 \354\225\214\352\263\240\353\246\254\354\246\230.md" "b/dohyung/OS/CPU \354\212\244\354\274\200\354\244\204\353\247\201 \354\225\214\352\263\240\353\246\254\354\246\230.md" new file mode 100644 index 0000000..0cb48fe --- /dev/null +++ "b/dohyung/OS/CPU \354\212\244\354\274\200\354\244\204\353\247\201 \354\225\214\352\263\240\353\246\254\354\246\230.md" @@ -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 등 다른 스케줄링 알고리즘을 적용한 것을 말한다. +큐 간의 프로세스 이동이 안되므로 스케줄링 부담이 적지만 유연성이 떨어지는 특징이 있다.