Transactions DBMS의 성능을 향상시키기 위해서는 사용자 프로그램의 동시 실행이 필수적이다. 디스크 액세스는 빈번하게 발생하며 비교적 느리기 때문에 CPU를 활용하여 여러 사용자 프로그램을 동시에 처리하는 것이 중요하다. 사용자 프로그램은 데이터베이스에서 검색한 데이터에 대해 많은 작업을 수행할 수 있지만, DBMS는 데이터베이스에서 읽거나 쓰는 데이터에만 관심이 있기 때문이다. DBMS는 사용자 프로그램을 추상화하여 트랜잭션(Transaction)이라는 개념으로 표현한다. 트랜잭션은 읽기와 쓰기의 연속으로 구성된 DBMS의 추상적인 사용자 프로그램이다. 트랜잭션은 일련의 데이터베이스 작업으로 구성됩니다. 일반적으로 트랜잭션은 다음과 같은 단계로 진행된다. 시작 (Begin) 트랜잭션이 시작되..
개론 앞에서는 DB외에도 일반적으로 사용하는 방법을 알아보았다. 이제는 통계 DB에서의 개인정보 유출을 배워본다. 통계 DB 통계 DB에서는 개인의 정보를 다룬다. 그러나 해당 DB에서는 집계 질의문만 처리해주기 때문에 특정 개인의 정보를 알 수 없다. 평균 나이, 최소 나이, 최고 나이 등등과 같은 집계 정보만 주기에 고라니의 나이나 고라니의 몸무게와 같이 특정 데이터는 얻을 수 없다. 추론 문제 그러나 추론이 가능하다. 예를 하나 들어보자. 나이와 등급이 연결되어있는 통계 DB가 있다고 해보자. 등급은 꽤나 민감한 정보로 아무도 모르지만 현재 노근은 대학 내의 학생 중 최고령자의 이름을 알고 있다. 그리고 이 최고령자가 유일무이하단 것도 알고 있다. 이 상황에서 노근은 해당 사람의 나이를 모름에도 등..
암호화 대칭적 암호화(Symmetric Encryption) 암호화에 필요한 키가 복호화 키로도 사용이 되는 암호화 방식을 말한다. 키가 하나만 있으면 되기에 간편한 방법이지만 키를 건네줄 때 부담이 생기게 된다. 암호화된 내용도 중간에서 가로챌 수 있는데 키라고 중간에 못 가로챌 일은 또 없다. 이렇게 하나의 키로 암호화와 복호화를 모두 하게 되면 키를 교환하는데에 부담이 생기게 된다. 공개키 암호화(Public-Key Encryption) 그래서 이런 부담을 줄이고자 나온게 공개키 암호화다. 각 사용자들은 모든 사람에게 알려진 공개 암호화 키와 자신만 알고 있는 비공개 복호화 키를 하나씩 갖고 있다. 사용자가 아마존에게 암호화된 주문 정보를 보내는 것을 예시로 보자.▼ 아마존은 암호화를 해주는 pub..
기억장치 계층 구조 컴퓨터 시스템에서의 기억장치는 아래의 그림과 같이 계층구조로 구성이 되어있다.▼ 이 중에서 CPU(DBMS)가 다루는 데이터는 메인 메모리, 즉 RAM에 해당하는 데이터이다. "그렇다면 왜 컴퓨터 시스템은 CPU가 다루기 편하지 않게 RAM에 정보를 다 저장하지 않을까?" 메인 메모리에 다 저장하지 않는 이유 비용 첫번째 이유는 비용이다. 같은 용량에 대해 주 기억장치의 비용은 디스크보다 약 100배 정도가 높다. ▼ HDD는 1GB 당 36원인 반면 RAM은 1GB당 4000원 꼴이다. 소멸성 또 다른 이유는 데이터를 유지하기 위함이다. 프로그램이 아무리 오래 돌아가봐야 한 번은 컴퓨터를 종료시키는 때에 같이 종료된다. 그러나 메인 메모리는 소멸성 메모리이기 때문에 프로그램이 종료되..
개론 전에 배운 B트리는 구조 변경이 자주 일어난다는 점에서 한계가 보였다. 조회는 빠른 편이지만, 삽입과 삭제와 같이 DB에 변경이 자주 일어나게 되면 연산량이 많아진다는 단점이 있었다. 그래서 이를 보완하고자 나온 것이 B+트리이다. 특징 B 트리와 다른 점. 모든 데이터가 리프노드에 모여있다. 모든 리프노드는 연결리스트 형태를 띄고 있다. 리프노드의 부모 key는 리프노드의 첫번째 key보다 작거나 같다. B트리와 같은 점. 노드에는 최대 $M-1$개 부터 $\lceil \frac{M}{2} \rceil - 1$개의 데이터가 포함된다. 특정 노드의 데이터(key)가 $K$개라면, 자식 노드의 개수는 $K+1$개여야 한다. 특정 노드의 왼쪽 서브 트리는 특정 노드의 데이터보다 작은 값, 오른쪽 서브 ..
개론 인덱싱의 기본적인 방법들, heap, hash, sorted file 들은 일장일단의 성격을 지니고 있다. 그런데 모든 부분에서 두루두루 성능이 좋게 나오는 인덱싱 기법은 없는걸까? 모든 면에서 성능이 좋은 인덱싱 기법은 없지만 적절한 성능을 내는 기법은 있다. 바로 B+ Tree이다. 하지만 이번 포스트에선 B+ Tree가 무엇인지 알아보기 전에 B+ Tree의 이전 형태인 B Tree를 보자. 특징 1. 노드에는 2개 이상의 데이터(key)가 들어갈 수 있고, 이들은 항상 정렬된 상태로 구성된다.▼ 2. 내부 노드(루트노드와 리프노드 제외 노드들)는 최소$\lceil \frac{M}{2} \rceil$, 최대 $M$개의 자식을 가질 수 있다. 최대 $M$개의 자식을 갖는 B 트리를 $M$차 B ..
개론 "인덱싱(indexing)이란 무엇일까?" 뉴스 기사를 수집한다고 해보자.▼ 수집한 뉴스 기사를 조회한다고 할 때, 수집한 뉴스 기사의 개수가 많으면 원하는 기사를 찾는게 쉽지 않을 것이다.▼ 그런데 뉴스 기사를 기사 주제에 따라 쪽수로 표시하면 찾기가 훨씬 쉬워질 것이다. 곰 주제는 266쪽 부터 369쪽, 고라니 주제는 370쪽부터 500쪽 등등…▼ 그런데 이렇게 크게 나눠버리면 찾기 쉬워진 것은 맞으나 세부적인 기사를 찾기가 힘들다. 예를 들어 곰 주제에서 ‘곰돌이 푸가 성공한 이유’라는 주제를 찾으려면 266쪽으로 가서 369쪽까지 쭉 훑어봐야한다.▼ 그렇기에 대분류로 한 번 나누고 다시 소분류로 ‘곰돌이 푸가 성공한 이유’라는 뉴스 기사를 다시 한 번 쪽수를 분류 해야한다.▼ 이런 과정을 ..
개론 관계형 모델의 고안자인 에드거 F. 커드가 1970년에 처음으로 정규화의 개념을 도입하였다. 제 1 정규화를 발표한 이후에 이어서 제 2 정규화와 제 3 정규화를 정의하였고, 이후에는 레이먼드 F.보이스와 함께 보이스-코드 정규화(BCNF)를 정의하였다. 4 정규화 이후에는 다른 이론가들에 의해서 정의가 되었다고 한다. 위에가 간단한 정규화에 대한 역사였고, 본론인 정규화의 목적을 이야기하면, 정규화(Normalization)의 기본 목표는 불필요한 중복을 제거하는 것이다. 중복이 언제나 나쁜 것은 아니다. 때로는 설계상 중복이 필요할 때도 있다. 하지만 나쁜 것은 불필요한 중복이다. 이런 불필요한 중복은 데이터 베이스를 모호하게 만들고 각종 오류를 야기한다. 그렇기에 이런 불필요한 중복을 줄이기 ..
관계모델의 소개 릴레이션 한 릴레이션은 릴레이션 스키마(relation schema)와 릴레이션 인스턴스(relation instance)로 이루어진다. 릴레이션 스키마 각 필드의 이름과 도메인을 명시한다.▼ Student ( sid: STRING, name: STRING, login: STRING, age: INTEGER, gpa: REAL ) 릴레이션 인스턴스 레코드(record)라고 하는 튜플(tuple)들의 집합을 말한다. 도메인 제약조건(domain constraints) : 해당 릴레이션의 각 인스턴스가 만족해야하는 중요 조건을 말한다. 차수(degree, arity) : 필드들의 수를 말한다. 카디날리티(cardinality) : 해당 릴레이션에 원소로 있는 튜플들의 수를 말한다. 관계 데이..