Multiway Search Tree (다원 탐색 트리) / m-way Search Tree (m 분기 탐색 트리) 한 노드가 가질 수 있는 key의 값이 최대 m-1개이고 가질 수 있는 Child의 수가 m개인 트리를 Mulituway Search Tree라 합니다. 이진 트리 : 2-way search tree AVL 트리 : 2-way search tree 2-3 트리 : 3-way search tree 정의는 다음과 같습니다. m-way Search Tree는 다음을 만족하는 검색 트리입니다. 1. Leaf Node를 제외한 모든 노드는 m개 이하의 서브 트리를 가집니다. 2. k개의 자식 노드를 갖는 노드는, k-1개의 요소(key)를 가집니다. 3. 각 노드의 key는 오름차순으로 정렬되어 있..
2-3 Tree 2-3트리는 검색 트리이지만 BST는 아닙니다. 차수가 3인 노드가 존재할 수 있으므로, Binary가 아니기 때문입니다. 2-3 Tree는 트리의 높이가 균형을 이루며 내부노드의 차수가 2 또는 3인 균형 탐색트리입니다. 2-3 Tree 조건 2-3 Tree에는 Internal Node와 External Node의 개념이 존재합니다. Internal Node(내부노드)는 Key가 들어있는 내부 노드이며, External Node(외부노드)는 데이터가 들어있지 않은 노드로써 Internal Node의 Leaf Node의 자식으로 존재하는 가상의 노드입니다. 2-3 Tree에서 각각의 내부 노드는 2-Node 이거나 3-Node 입니다. 중복된 Key는 허용하지 않습니다. 2-Node는 1..
BST의 문제점 일반적인 BST(이진 검색 트리)는 데이터가 삽입되는 순서에 따라 한쪽으로 편향되는 형태로 트리가 형성될 수 있습니다. 예를 들어 입력열이 50 -> 30 -> 100 -> 20 -> 150 인 경우 다음과 같습니다. 그러나 입력열이 20 -> 30 -> 50 -> 100 -> 150 인 경우 다음과 같습니다. 이렇게 BST는 트리의 높이를 $log(n)$ 으로 보장받지 못할 가능성이 있습니다. 트리에서의 성능은 트리의 높이와 연관되어 있습니다. 즉 트리의 높이가 $log(n)$을 보장받지 못한다면, BST의 삽입과 삭제, 검색의 연산 역시 시간복잡도 $O(log(n))$을 보장받지 못합니다. AVL 트리 AVL 트리는 이진 검색 트리(BST)의 한가지 종류로써 스스로 높이의 균형을 잡는..
들어가기에 앞서 해시가 어디에 쓰이는지 알아보도록 하겠습니다. 유튜브를 예시로 생각해 보도록 하겠습니다. 제가 어떤 사람의 동영상을 그대로 제 채널에 올리려고 한다면, 그 순간 바로 유튜브에서 중복되는 동영상이라는 에러 메세지를 보내줍니다. 동영상은 크기도 매우 크고, 그 수도 매우 많습니다. 그렇게 많은 동영상 중에서 어떻게 중복되는 동영상인지를 빠르게 판단할 수 있을까요? 앞으로 살펴볼 자료구조인 해시테이블이 바로 이것을 가능하게 만들어줍니다. Hash Function (해시 함수) 해시 함수 (Hash Function) 또는 해시 알고리즘은 임의의 데이터를 배열의 인덱스로 매핑(변환)하는 함수입니다. 해시 테이블은 배열입니다. 따라서 인덱스를 통해 접근할 때에는 O(1)의 시간복잡도로 매우 빠르게 ..
(전 순정 백엔드 개발자기 때문에 React는 못합니다. React 코드는 Chat GPT 시켜서 구현하였고, 대신 백엔드에 온 진심을 담하서 구현하였으니, 프론트 코드는 정말 그냥 테스트용으로만 참고해 주시면 감사하겠습니다.) OAuth의 개념에 대해서는 이미 많은 블로그들에서 다루고 있으므로 저는 이에 대해서는 따로 다루지 않겠습니다. 이 글에서는 (적어도 제가 살펴보았던) 대부분의 블로그에서 애매하게 설명되어있는 프론트엔드와 백엔드의 역할과, 실제로 어떻게 구현하는지를 집중적으로 다뤄보도록 하겠습니다. 또한 이 과정에서 단순히 구현하고 끝내는 것이 아니라 새로운 타사 플랫폼을 추가하는 과정도 간단하게 처리할 수 있도록 유연하고 확장 가능한 구조를 가져가는 코드를 작성해보도록 하겠습니다. 소스 코드는..
🧐 N + 1 문제N + 1 문제는 연관관계가 설정된 엔티티 사이에서 한 엔티티를 조회하였을 때,조회된 엔티티의 개수(N 개)만큼 연관된 엔티티를 조회하기 위해 추가적인 쿼리가 발생하는 문제를 의미합니다. 즉 N + 1에서, 1은 한 엔티티를 조회하기 위한 쿼리의 개수이며, N은 조회된 엔티티의 개수만큼 연관된 데이터를 조회하기 위한 추가적인 쿼리의 개수를 의미합니다. N + 1보다는, 1 + N이라 부르는 것이 더 이해하기 쉬우며, 정리하면 다음과 같습니다.엔티티 조회 쿼리(1 번) + 조회된 엔티티의 개수(N 개)만큼 연관된 엔티티를 조회하기 위한 추가 쿼리 (N 번) 🧐 발생하는 상황N + 1 문제가 발생하는 상황을 알아보기 위해 게시글과 댓글을 예시로 사용해 보도록 하겠습니다. 하..