CS/기초데이터베이스

CS/기초데이터베이스

[데이터베이스] 29. RAID

운영체제에서도 정리했지만, 조금씩 설명이 다른 부분이 있어서 DB에서도 추가로 정리한다. RAID여러 개의 디스크를 사용하여 장애에 대비하는 기법Redundant Array of Independent Disks 의 약자로, 여러 디스크의 배열을 두고, 데이터를 저장하는 방법이다.RAID는 논리적으로는 1개의 디스크로 보이지만, 실제 내부적으로는 여러 개의 디스크를 구성하는 것이다. RAID는 크게 2가지 개념이 있다. 1. 데이터 스트라이핑2. 중복 (redundant) 1번은 데이터를 여러 곳에 나누어 저장한다는 의미로 성능 향상에 효과적이다.2번은 데이터를 중복해서 저장한다는 의미로 장애에 강해져서 신뢰성 향상에 효과적이다.RAID는 데이터 스트라이핑과 중복을 구현한 디스크 배열이다.  사용자가 디스..

CS/기초데이터베이스

[데이터베이스] 28. 보안 응용

전자 상거래샘이 아마존에서 상품을 주문하면 TLS (SSL의 새로운 버전) 프로토콜을 사용해서 요청을 암호화하여 보낸다.이때 암호화를 하는 기본적인 방법은 이전 글에서 정리한 RSA를 사용하여 아마존이 제공하는 공개키를 통해 요청을 암호화한다.아마존은 수신한 요청을 자신의 비밀키로 복호화하여 내용을 확인하고 처리한다.따라서 내 요청이 다른 사람에게 탈취당하더라도 다른 사람은 내 요청 내용을 알아낼 수 없다. 그런데 아마존이 알려준 공개키를 어떻게 신뢰할 수 있을까?해커가 자신의 공개키를 대신 보내주고 마치 이게 아마존의 공개키인 것처럼 속일 수도 있지 않을까? 그래서 이를 보증하기 위해 verysign 과 같은 인증기관이 등장했다.이 기관은 이 공개키가 아마존의 공개키가 맞다는 것을 보증해준다. 아마존은..

CS/기초데이터베이스

[데이터베이스] 27. 보안 기초

암호학 : 비밀 메세지를 보내는 기법사이퍼 (chiper) : 원문 메세지의 내용을 훼손하지 않고 메세지의 각 문자를 다른 문자나 기호로 바꾸는 방법 시저 암호알파벳을 특정 key 숫자만큼 자리 이동시켜 재배열한 글자로 대체 3글자씩 뒤로 밀어서 abby를 deeb로 변환하였다. 이를 문자대신 숫자로 매칭해볼 수도 있다.  그러면 이렇게 3을 더한 값을 사용할 수 있다.물론 27은 범위를 벗어났으니 26으로 나눈 나머지를 취해서 1로 사용할 것이다.  키 값이 3이라는 것을 서로 알고 있다면, 복호화할 때는 역으로 그 값을 빼서 알파벳을 매칭시킨다.만약 음수가 나오면 26을 더한 값을 취하면 된다. (-1 + 26 = 25) 시저 암호를 사용하여 비밀 메세지를 주고 받을 때는 2가지 정보를 알아야 한다...

CS/기초데이터베이스

[데이터베이스] 26. 정규화 (1NF ~ 5NF)

정규화는 테이블에 여러 정보가 중복해서 저장될 때 발생하는 문제를 해결하기 위해 테이블을 바꾸는 것을 말한다.여러 정보가 하나의 테이블에 중복해서 (이때의 중복은 정말 동일한 데이터가 여러개 들어있는 중복만을 말하지는 않는다.) 들어있는 경우 다음과 같은 문제가 발생할 수 있다. 1. 중복 저장 (redundant store)동일한 데이터가 여러 번 저장되는 것 2. 갱신 이상데이터를 수정할 때 중복 저장된 데이터 중 일부만 수정하는 것 3. 삽입 이상데이터를 삽입할 때, 이 데이터의 삽입을 위해 상관없는 다른 데이터도 함께 삽입되는 것 4. 삭제 이상데이터를 삭제할 때, 이 데이터의 삭제를 위해 상관없는 다른 데이터도 함께 삭제되는 것 정리하면 1번은 데이터가 중복저장되는 문제2번은 1번으로 인해 수정..

CS/기초데이터베이스

[데이터베이스] 25. 동시성 제어 & 장애 복구

지난 글에서는 트랜잭션의 ACID 특징과 여러 트랜잭션이 병행적으로 들어왔을 때 이를 실행하는 스케줄의 직렬 가능성에 대해 정리하였다.이번 글에서는 트랜잭션의 실행 스케줄이 직렬가능하지 않을 때, ACID 특징을 지키면서 모든 트랜잭션이 직렬 가능하게 동작하도록 하는 동시성 제어 방법들을 알아본다. (동시성 제어라고 했지만, 동시성과 병행성이 다르다는 말이 여기에서 등장한다. 병행적으로 오는 트랜잭션은 '동시에' 도착할 수도 있지만 살짝 얽혀서 얼기설기 들어올 수도 있다.) 동시성 제어에는 크게 엄격한 2PL, Tompson Read & Write, Timestamp 방법이 있다. Strict 2 Phase Locking먼저 직렬가능하지 않은 문제가 발생하는 원인은 같은 데이터에 여러 트랜잭션이 동시에 ..

CS/기초데이터베이스

[데이터베이스] 24. 트랜잭션 & 직렬 가능성

트랜잭션은 일련의 읽기와 쓰기 동작으로 이루어진 하나의 실행 동작을 말한다.트랜잭션은 여러 사용자가 같은 데이터에 동시에 접근할 때, 데이터의 일관성을 유지할 수 있도록 도와주며, 장애 복구에도 유용하게 사용된다. 이를 위해서 트랜잭션은 다음의 4가지 성질을 만족해야 한다. ACID1. atomicity (atomic)트랜잭션을 구성하는 일련의 동작들은 모두 수행되거나 모두 수행되지 않아야 한다.따라서 트랜잭션을 수행하는 일반 사용자는 트랜잭션 내 동작들이 일부만 수행되다가 장애가 발생했을 때도 그 영향에 대해 걱정할 필요가 없다. 2. Consistency각각의 트랜잭션은 데이터베이스의 일관성을 유지해야 한다.즉, 동시에 수행되지 않는 각각의 트랜잭션은 언제나 일관된 데이터를 보고 있어야 한다.(수업 ..

CS/기초데이터베이스

[데이터베이스] 23. Postgresql Explain

https://www.postgresql.org/docs/current/using-explain.html 대부분의 DBMS는 Explain 이라는 명령어를 통해서 SQL의 질의 수행 계획과 비용을 계산해볼 수 있다.이를 통해 어떤 관계 대수 연산이 먼저 실행되는지도 알 수 있다.이러한 질의 수행 계획은 DBMS가 알아서 계산하며, 인덱스를 추가하는 등의 방법으로 더 좋은 질의 계획을 만들도록 유도할 수 있다.(인덱스를 추가한다고 항상 좋아지는 건 아니다)  EXPLAIN 키워드는 이렇게 수행할 SQL 앞에 EXPLAIN 키워드만 붙이면 끝이다.  data grip 에서 다른 테이블에 대해 수행했을 때는 이렇게 나타난다. 위 예시에서는 where 절 없이 단순히 모든 데이터를 조회하였으므로, 관계 대수 연..

CS/기초데이터베이스

[데이터베이스] 22. 외부 정렬

데이터베이스에서는 다양한 이유로 레코드를 정렬해야 할 때가 있다. - order by 와 같은 SQL을 처리해야 할 수도 있고- 트리 인덱스에 데이터를 많이 넣고자 할 때도 정렬이 필요하고- projection 연산 결과로 중복을 제거할 때도 정렬이 유용하며- 조인을 구현할 때 정렬을 사용하여 조인할 수도 있다. 우리가 흔히 쓰는 정렬 알고리즘은 in place 방식이라고 하더라도 O(N)의 공간복잡도가 필요하다.하지만 요즘 메인 메모리의 크기가 점점 늘어나고는 있음에도 처리해야 할 데이터는 너무 많아서 메인 메모리만으로는 모든 데이터를 한번에 정렬할 수 없다.그렇다고 디스크를 메모리처럼 보고 정렬하기에는 너무 많은 입출력 비용이 발생하기 때문에 디스크 접근 비용을 최소화하면서 적은 메모리로 데이터를 정..

CS/기초데이터베이스

[데이터베이스] 21. 질의 수행 (Query Plan)

SQL 문장을 실제로 컴퓨터가 실행할 때는 어떤 과정으로 실행될까?먼저 SQL은 확장된 형태의 관계 대수로 변환된다.그리고 이 관계 대수식을 기반으로 '질의 처리 계획'을 만드는데, 이는 관계 대수 연산자를 노드로 하는 트리로 표현된다.트리의 각 노드에는 해당 연산자가 어떤 알고리즘을 사용할 것인지 표시하는 라벨이 있다.이렇게 관계 대수 연산자는 질의 수행의 기본 단위가 되며, 이 연산자들의 동작을 구현하는 것은 최대 성능을 위해 최적화 되어 있다. 시스템 카탈로그DBMS가 쿼리를 처리할 때, 어떻게 처리할 지 결정하는 과정에서 테이블의 구조와 인덱스 등의 데이터를 참고한다.이 정보는 '시스템 카탈로그'라는 특별한 '테이블' 에 저장된다. (데이터 딕셔너리, 카탈로그라고 부르기도 한다.)실제 테이블 데이..

CS/기초데이터베이스

[데이터베이스] 20. 해시 기반 인덱스

해시 기반 인덱스해시 기반 인덱스는 등호 조건 조회에 최적화된 인덱스 기법이다.(범위 조건 조회에는 사용할 수 없다. 탐색 키가 일 때, a >= 10 과 같은 질의를 수행하려면 10, 11, 12, .. 를 모두 해싱해야 하며, a = 10 에 대해서도 b, c 를 임의의 값을 모두 지정해서 해싱해야 하기 때문이다.반면 a = 1, b = 2, c = 3 과 같이 조건이 명확할 때는 매우 빠르게 원하는 데이터를 찾아낼 수 있다. 정적 해싱 정적 해싱 기반의 인덱스는 primary bucket page 와 overflow page 로 구성된다.하나의 인덱스 파일은 0 ~ N-1 까지의 고정된 크기의 버켓으로 이루어지며, 처음에는 버켓 당 하나의 기본 페이지만 존재한다.버켓은 데이터 엔트리를 갖고 있고,..

에버듀
'CS/기초데이터베이스' 카테고리의 글 목록