세상에서 제일 바빴던 5월이 지나갔다.팀플, 학교 내외에서 진행하는 프로젝트, 스터디 활동 등만족스러운 경험, 만족스럽지 못한 경험들이 많았다. 진로 관련1. 전공소프트웨어 공학은 랜덤으로 구성된 팀원들과 팀플을 진행했다.모두 각자의 역할을 열심히 수행해서 팀원에 대한 스트레스는 하나도 없었지만, qna를 보면서 교수님의 답변을 따라 과제를 수시로 수정하는 점은 힘들었다. 그래도 과제 결과가 만족스럽게 나와서 다행이었고, 이때는 5월 초에 진행해서 소공에만 집중할 수 있었다보니 괜찮았다. 다음 소공 과제는 개인과제로 1차, 2차로 나뉘어 진행했다.1차는 클래스 다이어그램을 그려 설계만 하는 과제, 2차 과제는 코드로 구현하고 실행을 확인한 뒤 수정된 설계도를 그리는 과제였다.지금까지는 머릿속으로 설계하고..
소프트웨어 개발의 주요 단계를 다시 정리해보면 다음의 5단계를 거쳐서 소프트웨어를 개발한다. 1. specification2. design3. implementation4. test5. maintenance specification 단계에서는 사용자의 요구사항을 파악하고, use case diagram 을 통해 시스템의 기능을 시각화하였다.또한 사용자의 액션에 따라서 시스템이 어떻게 응답해야 하는지 use case description 을 작성하여 시스템에서 개발해야 하는 부분이 어디인지도 명확하게 정의할 수 있었다. 이번 글에서는 design 단계를 진행한다.design 단계에서는 앞서 파악한 내용을 분석하여 실제로 프로그램을 개발할 때 어떤 클래스와 메서드를 사용할 지 정의한다.이 과정을 마치고나면 ..
지난 글에서 정리했듯 BST 는 on-disk 자료구조로는 적합하지 않았다.그래서 BST 를 기반으로 fanout 이 크고 트리의 높이도 더 작은 B-Tree 라는 자료구조가 등장했다.이번 글에서는 제일 기본적인 B-Tree 에 대해 정리해본다. B-Tree 를 그림으로 표현하면 아래와 같이 표현할 수 있다. 또는 책에 따라서 아래와 같이 표현하기도 한다. B-Tree 내부 각 노드가 보유한 key 값들은 일정한 순서로 정렬되어 있다.(위 그림의 경우라면 key1 따라서 하나의 노드 안에서 특정 키를 찾을 때는 이분 탐색을 사용하여 원하는 키를 찾을 수 있다. 꼭 노드 내부가 아니더라도, B-Tree 의 데이터 탐색 시간복잡도는 로그 시간복잡도를 갖는다.예를 들어 40억개 데이터 중에서 원하는 데이터..
이번 글부터는 가장 유명한 저장 구조인 B-Tree 를 이해하는데 있어 필요한 기본적인 개념들을 정리한다.지난 글에서도 언급했듯 B-Tree 는 mutability 를 갖는 저장 구조이다.그리고 대부분의 mutability 구조는 in-plcae update 메커니즘을 사용한다.이 말은 데이터를 삽입, 수정, 삭제하는 연산을 수행할 때, 그 데이터가 저장된 그 파일 안에서 연산이 일어난다는 것을 말한다. 어떤 스토리지 엔진은 같은 데이터 레코드의 여러 버전을 동시에 저장하기도 한다.다중 버전 동시성 제어, Slotted Page 가 그 예시이다.하지만 이해를 간단히 하기 위해, B-Tree 를 정리할 때는 하나의 데이터 레코드가 저장된 위치는 유일하다고 가정하자. Binary Search TreeB-Tr..
데이터베이스 스터디를 하며 인덱스를 내용을 공부하고 발표한 뒤, covering index 에 대한 질문을 받았다.스터디 책에서는 data file 을 구현하는 방법 중에 모든 데이터 레코드가 인덱스 파일에 들어있는 index-organized tables (IOT) 방식을 소개하고 있었는데, IOT 와 covering index 가 같은 개념인지 묻는 질문이었다.covering index 개념을 처음 들어봐서 다른 분의 답변을 듣고 공부할 수 있었는데, 새로 알게된 개념인만큼 이번 기회에 정리해보려고 한다. Covering Indexcovering 은 포괄한다는 의미를 갖고 있다.인덱스는 테이블 데이터를 찾을 때 사용할 일부 컬럼에 대한 데이터를 갖고 있는데, 이 데이터만으로 쿼리를 커버할 수 있는 인..
스토리지 엔진은 특정 자료구조를 기반으로 만들어진다.하지만 캐싱, 복구, 트랜잭션과 같은 기능은 이런 자료구조가 설명해주지 않는다. 스토리지 구조에는 크게 3가지 공통 변수가 있다. 1. buffering 사용 여부2. immutable file 또는 mutable file 사용3. 데이터 저장시 정렬 여부 스토리지 구조가 갖는 최적화 방법과 구별 기준 대부분은 이 3가지 개념 중 하나와 관련되어 있다. Buffering스토리지 구조가 디스크에 데이터를 저장하기 전에 특정 양의 데이터를 모았다가 저장하는지 아닌지를 나타낸다.물론 모든 디스크 기반 구조는 어느정도 버퍼링 기법을 사용할 수 밖에 없다.디스크가 최소한 block 단위로 데이터를 전달하므로, 블록 데이터를 모았다가 쓰는 것이 좋기 때문이다.따라..
개요이제 스토리지 엔진이 어떻게 데이터를 저장되는지 정리하기에 앞서, data file 과 index file 에 대해 정리해보려고한다.우리는 왜 데이터를 단순히 파일 시스템이 아니라 DBMS 를 사용해서 저장할까? DBMS도 데이터를 저장할 때 파일로 저장하지만, DBMS 는 파일 시스템이 제공하는 디렉토리 / 파일의 계층 구조를 사용하지 않는다.또한 파일을 만들 때도 DBMS에서 직접 결정한 포맷에 맞춰 파일을 구성한다.이렇게 하는 이유는 크게 3가지 이유가 있다. 1. Storage EfficiencyDBMS는 데이터 레코드를 저장할 때 storage overhead 를 최소화하는 방식으로 파일을 구성한다. 2. Access Efficiency원하는 레코드를 찾을 때 최소한의 단계를 거쳐서 찾을 수..
이번 글에서는 다양한 관점에서 DBMS 를 분류해보려고 한다.DBMS 를 분류하는데는 다양한 관점이 있지만 특히 중간 스토리지와 레이아웃 관점에서 분류해보려고 한다.(다만 DBMS가 각 관점에서 딱 잘라 분류되지는 않을 수 있다는 점을 염두해두자.) 이 두가지 관점 외에도 다음의 기준으로 3가지로 DBMS를 분류하는 방법도 있다. 1. OLTP (online transaction processing) database대량의 사용자 요청과 트랜잭션을 처리하며, 빠르게 실행되는 사전 정의된 쿼리를 자주 사용한다. 보통 웹 개발할 때 사용하는 DBMS 가 속한다고 이해했다.예를 들어 로그인 기능을 구현할 때 사용자를 조회하는 경우, 사용자 조회 쿼리는 사전에 개발자에 의해 정의되어있으며, 상대적으로 실행시간이 ..
DBMS 는 서로 다른 목적 하에 동작한다.어떤 DBMS 는 임시적인 hot data 를 처리하는데 사용되고, 어떤 DBMS 는 영구적인 cold storage 를 처리하는데 사용된다.어떤 DBMS 는 복잡한 쿼리를 통해 데이터에 접근할 수 있고, 어떤 DBMS 는 오직 key 값을 가지고 데이터에 접근한다.어떤 DBMS 는 시간순으로 들어오는 데이터를 처리하는데 유리하고, 어떤 DBMS 는 매우 큰 blob 데이터를 처리하는데 유리하다. 이런 DBMS 의 차이를 이해하기 위해서는 DBMS 의 아키텍처와 다양한 관점에서의 DBMS 분류에 대해 이해할 필요가 있다.먼저 이번 글에서는 데이터베이스 아키텍처와 스토리지 엔진에 대해 간단하게 알아본다. 데이터베이스 아키텍처DBMS 시스템에 대한 공통적인 청사진은..
벌써 4월이 끝나가고 있다.아무것도 안한 것 같은데 시간이 이렇게 빨리 지났다는 것이 신기하다.아직 4월이 다 지나지는 않았지만, 주말이 아니면 회고를 쓸 시간이 없을 것 같아서 이번 달에도 미리 써본다. 이번 달에는 2025년 목표를 다시 돌아보면서 이번 달에 무엇을 했고, 느꼈는지 정리해보려고 한다. 진로 관련 목표전공1. 졸프드디어 오픈소스 읽기를 어느 정도 마무리하고 구현을 시작했다.사실 오픈소스를 100% 이해한 것은 아니지만, 코드를 읽으면서 복잡한 구조를 통으로 이해하고 구현하기보다, 작은 단위로 이해하고 구현하는 것을 반복해야겠다고 느꼈다.(소공에서 나온 개념으로 비유하면 incremental development 방식으로..) 나는 CREATE 구문에 대한 구현을 맡았다.파서가 CREA..