전체 글
-
H2 DB "data.sql" 삽입 오류ETC 2024. 3. 26. 17:30
버전 정보 id 'org.springframework.boot' version '3.2.4' java { sourceCompatibility = '17' } 문제 상황 H2 DB, 스프링 부트 3.x, Java 17을 기본 환경으로 로컬 서버를 운영할 때 마다 data.sql을 통해 데이터 삽입을 하고자 했다. 이전까지는 아래와 같은 설정만을 통해 간단히 데이터를 삽입할 수 있었는데 아래와 같은 오류가 발생해 이번엔 간단히 해결할 수 없었다. H2 data.sql, Failed to execute SQL script statement sql: init: mode: always 시도한 것들 가장 먼저 시도한것은 H2 DB를 다운그레이드 해보았다. (2.4.x -> 1.4.x) 실패 스프링 부트 3.x 버전..
-
프로세스의 이해운영체제 2024. 3. 1. 16:37
Process Concept 프로세스는 실행 중인 프로그램을 나타내며, 운영체제는 이를 작업의 기본 단위로 활용합니다. 프로세스는 작업을 수행하기 위해 아래와 같은 특정 리소스가 필요합니다. CPU time memory files or I/O devices (resource) 일반적으로 CPU는 직접 스토리지에 저장된 프로그램을 실행하지 않으며, 프로그램은 메모리에 로드되어야 합니다. 이때 메모리에 로드된 프로그램을 실행 중인 프로세스라고 할 수 있습니다. 프로세스의 메모리 레이아웃 프로세스의 메모리 레이아웃은 아래와 같이 여러 섹션으로 나뉩니다. • Text section: 실행 코드 • Data section: 전역 변수 • Heap section: 프로그램 실행 시간 동안 동적으로 할당되는 메모리 ..
-
Set과 Hash SetData Structures 2024. 1. 25. 18:20
Set 실무에서 자주 쓰이는 자료구조는 대표적으로 List와 Set이 존재한다. 그 중 Set은 데이터를 저장하는 추상 자료형(ADT)로 순서를 보장하지 않고 데이터 중복을 허용하지 않는다는 특징이 있다. 데이터 조회(search)에 있어서 List 보다 더 빠른 속도를 가지는데 Set 자료형은 O(1)의 시간 복잡도를 갖는다. 중복된 데이터를 제거해야 할 때 Set을 사용하기 좋으며 데이터의 존재 여부를 확인할 필요가 있을때 역시 Set 사용을 고려할 수 있다. (이 경우 필터링이 필요한 상황을 떠올려보자) Set의 구현체 set을 구현한 구현체는 크게 세 가지로 Hash Set, Linked Hash Set, Tree Set이 존재하는데 그 중 Hash Set에 대해 다뤄보자 Hash Set은 해시 ..
-
동적 배열과 연관 배열Data Structures/Array 2024. 1. 22. 15:38
배열과 0번 인덱스 Array란 같은 타입의 데이터들을 저장하는 자료 구조로 연속된 메모리 공간에 데이터를 저장한다는 특징이 있다. 필드에 데이터를 저장하는것과 달리 연속된 데이터의 각각엔 이름이 없지만 인덱스를 통해 해당 데이터에 접근할 수 있다. 이 때 인덱스 번호는 0부터 시작하게 되는데 이는 배열에서 인덱스가 offset 개념으로 사용 되기 때문이다. C와 같은 프로그래밍 언어에서 특정 영역의 메모리 주소는 기준 주소와 offset으로 계산되는데 기준 주소가 a이고 각 프레임의 크기가 s라고 할 때, i 번째 프레임의 주소값은 다음과 같은 등차수열의 일반항을 통해 계산할 수 있다. a + s * (i - 1) # 1-based a + s * i # 0-based 여기서 0-based 방식은 런타임..
-
B-Tree와 데이터 삭제 동작 방식Data Structures/B-Tree 2024. 1. 17. 11:06
개요 리프 노드의 수는 BST와 B-Tree를 구별하는 주요 차이점 중 하나로 BST는 두 개로 고정이되는 반면, B-Tree는 차 수에 따라 말단 노드의 개 수가 결정된다. 만약 데이터를 삽입하는 과정을 갖는다면 항상 리프 노드에서 발생하게 되는데 이는 삭제하는 과정 역시 동일하지만 삽입을 통해 자녀 노드의 수가 기준 값 보다 커졌을 경우 승진을 통한 재조정이 발생하지만 삭제의 경우 key의 개수가 최소 key의 수보다 적어졌다면 재조정이 이루어지게된다. B-Tree에 저장되는 데이터가 있다면 이 데이터 각각은 Key를 통해 동작하지만 여기선 데이터가 Key의 역할까지 수행하기 때문에 두 단어를 혼용해서 사용한다. 데이터 삭제 과정 다음과 같은 3차 B-Tree가 존재한다고 했을때, 데이터 삭제 과정에..
-
B-Tree와 데이터 삽입 과정Data Structures/B-Tree 2024. 1. 16. 14:44
이진 탐색 트리 BST 이진 탐색 트리가 가지는 특징 모든 노드의 왼쪽 서브 트리는 해당 노드의 값보다 작은 값들만 가지고, 모든 노드의 오른쪽 서브 트리는 해당 노드의 값보다 큰 값들만 가질 수 있고 자녀 노드는 최대 두 개까지 가질 수 있다. 트리 형태의 자료 구조의 특성상 깊이가 깊어질수록 소모되는 자원이 커질 수 밖에 없기 때문에 최대한 작은 depth를 통해 많은 자녀 노드를 확보할 필요가 있다. 이 생각을 바탕으로 기존 BST를 확장해 값의 범위를 세분화하게 되면 아래와 같이 범위를 갖는 트리 구조를 얻게 된다. 이 방식을 적용하면 이진 탐색 트리와 동일한 방식으로 동작 하면서도 하나의 노드가 자녀 노드의 개 수를 두 개 이상도 가질 수 있도록 만들 수 있는것이다. 범위를 갖게된 노드를 서브 ..
-
DB와 B-Tree 인덱스Database 2024. 1. 15. 14:21
B-Tree는 정렬된 데이터를 유지하고 로그 시간 내에 검색, 삽입 및 삭제가 가능한 균형 트리 자료 구조로 대용량 데이터를 효율적으로 구성하고 관리하는데 주로 사용된다. B-Tree는 여러 키와 하위 포인터가 포함된 노드가 있는 계층 구조로 데이터 세트가 증가하더라도 효율적인 검색 작업을 제공하도록 설계되었고, 밸런싱 유지는 트리의 깊이가 로그 형식으로 유지되도록 보장하여 다양한 작업에 대해 일관된 성능을 유지하는데 도움이 된다. 데이터베이스의 맥락에서 B-Tree는 인덱스를 구현하는데 자주 사용되며, 이를 통해 인덱스된 컬럼을 기반으로 데이터를 빠르게 검색할 수 있다. DB Index로 B-Tree 계열이 사용되는 이유 Self-balancing BST와 B-Tree 시간 복잡도 스스로 균형을 잡지 ..
-
SQL 튜닝 방법론Database 2023. 11. 28. 17:41
온라인 SQL과 배치 SQL 온라인 SQL과 대규모 배치 SQL은 시기, 범위, 실행 특성에 따라 SQL 쿼리를 실행하는 다양한 방법을 나타내는 방식을 말한다. 온라인 SQL 이는 일반적으로 즉각적인 사용자 요청이나 진행 중인 시스템 간 상호 작용에 대한 응답으로 실시간으로 실행되는 SQL 쿼리 작업을 의미한다. 온라인 SQL 쿼리는 사용자가 상호 작용을 기반으로 즉각적인 피드백이나 데이터 검색을 기대하는 웹 애플리케이션과 같이 사용자 작업에 대한 빠른 응답이 필요한 앱 또는 시스템과 관련되는 경우가 많으므로 이와 관련된 쿼리는 요청 시 필요한 특정 데이터 검색, 업데이트 또는 삽입을 포함하며 규모가 작은 편에 속한다. 이런 특성으로 온라인 SQL은 원활한 사용자 경험을 보장하기 위해 짧은 대기 시간과 ..