본문 바로가기

전체보기141

[2] 인덱스 구조 이 글은 [친절한 SQL 튜닝] 을 학습하고 정리한 글입니다. 인덱스 튜닝에 대해 살펴보기 이전에, 인덱스 구조를 통해 핵심 원리를 짚고 넘어갑시다. 인덱스는, 해당 자료를 찾기 편하게끔 데이터와 개별된 구조를 만들어 놓은 것입니다. 데이터베이스 테이블에서 데이터를 찾는 방법은 1. 테이블 전체를 스캔하거나 2. 인덱스를 이용하는 방법 위 두가지밖에 없기 때문에, 인덱스는 SQL 튜닝에서 가장 먼저 학습해야 할 부분입니다. 인덱스 튜닝의 핵심 요소 인덱스는 큰 테이블에서 소량 데이터를 검색할 때 사용합니다. 일반적인 Online Transaction Processing 시스템에서는 소량 데이터를 주로 검색하므로 인덱스 튜닝이 매우 중요합니다. 인덱스 튜닝의 핵심은 크게 두가지로 나뉘는데 첫번째는 인덱스 .. 2020. 10. 30.
[5] 팩토리 메소드 패턴 팩토리 메서드 패턴을 이용하여 불필요한 의존성을 없애는 방법에 대해 알아봅시다. 디자인 원칙중 하나가, 구현이 아닌 인터페이스를 바탕으로 개발하라는 것이였는데요 new를 이용해서 객체를 생성하는 것을 돌아보면 결국 특정 구현을 바탕으로 프로그래밍 하는 것이 됩니다. 어떤 객체를 생성할 때 조건이 붙게 되는 경우가 있을 것입니다. if(picnic){ duck = new MallardDuck(); } else if(hunting){ duck = new DecoyDuck(); } 위와 같이 특정 조건에 대해 서로 다른 구현체를 인터페이스에 대입하려면 저런 식의 조건문이 필요한데요 이런 코드가 있다는 건 결국 변경 혹은 확장할 때 동일한 코드를 다시 확인하고 추가/제거 해야한다는 뜻이 됩니다. 코드에서 구상 .. 2020. 10. 29.
[6] Heap 이 글에서는 힙 자료구조에 대해서 알아보도록 하겠습니다. Heap은 최댓값 및 최솟값을 빠르게 찾아내기 위해 고안되었고 완전이진트리를 기본으로 한 자료구조입니다. 우선 완전 이진트리 (complete binary tree)의 속성을 모두 충족합니다. 완전 이진트리란 트리의 왼쪽부터 비는 곳 없이 채워져 있게 됩니다. 위 이미지에서 complete 에 해당하는 구조가 완전 이진트리인데요 (물론 Perfect Binary Tree도 complete에 포함됩니다) 왼쪽부터 노드가 채워지고 중간에 비는 구조가 없는 것을 확인할 수 있습니다. 이런 완전이진 트리의 특성에 하나의 제약 조건을 추가하여 heap 자료구조가 구성됩니다. 그 특성은 바로 모든 Parent는 자신의 Child보다 크거나 작다는 특성입니다... 2020. 10. 28.
[5] 이진 탐색 트리 오늘은 이진 탐색 트리(Binary Search Tree)에 대해 다루어 보도록 하겠습니다. 이진 탐색 트리는 트리 구조에서 자식이 항상 2개 이하인 Binary Tree 의 특성을 그대로 물려 받고 거기에 "탐색" 이라는 키워드가 추가되었다고 생각하시면 되겠습니다. 탐색을 용이하기 위해 한가지 규칙이 더 추가되었는데요 자식을 입력할 때 왼쪽 자식엔 현재 노드보다 작은 값을, 오른쪽 자식엔 현재 노드보다 큰 값을 넣는 규칙입니다. 그런 규칙을 갖게 되면, 현재 갖고있는 key를 찾을 때 개별 node에서 크기를 비교해서 왼쪽 child로 탐색할 지 오른쪽 child로 탐색할지를 파악할 수 있어 경로를 찾기에 매우 용이합니다. Binary Search Tree의 예시인데요 Root node 인 8부터 살펴.. 2020. 10. 28.