오늘부터 내가 이전에 했던 개인 프로젝트를 Kotlin으로 옮기는 작업을 할 예정이다.
이제와서 다시 보니 첫 Spring Boot 웹 프로젝트였기에, 꽤 조잡한 부분이 있어서, 생각보다 수정을 많이 가할 것 같다. 그래서 시간이 예상보다 더 걸릴 것으로 예상이 된다. 둘러보니 이 프로젝트에서 Index를 사용했는데, 아무 생각 없이 책에 나와 있는 코드를 그냥 가져왔던 것 같다. 그래서 데이터베이스에서의 Index에 대해 정리를 해보고자 한다.
Index는 데이터베이스 테이블에 대한 검색 속도를 향상시켜주는 자료구조이다. 데이터베이스에서 테이블은 첫 번째 데이터부터 순서대로 데이터를 찾는 방식인데, 이 Index를 활용하면 데이터 검색을 빠르게 할 수 있다. Index는 쉽게 말해서 목차를 생성하는 개념이다. 책의 색인과 비슷한데, 생성된 목차를 이용해서 검색 범위를 줄요서 속도를 높일 수 있다.
특정 컬럼에 대한 Index를 생성하면 해당 컬럼의 데이터들을 정렬하고, 별도의 메모리 공간에 데이터의 물리적 주소와 컬럼을 저장한다. 일단 Index를 생성하면 SQL을 빠르고 효율적으로 수행할 최적의 처리를 생성해주는 DBMS 내부 핵심 엔진인 "Optimizer"가 생성된 Index를 통해 데이터의 물리적 주소로 가서 데이터를 가져온다.
Index의 종류에는 여러가지가 있는데, 자동으로 생성되는 Clustered Index가 있고, itmap Index, IOT Index, B-tree Index 등등 존재한다. 보통 B-tree가 많이 사용된다고 하는데, B-tree는 밸런스 트리 중 하나로 노드 삽입이나 삭제를 할 떄, 양쪽 자식의 노드 수의 밸런스를 유지하는 트리이다. 밸런스를 유지하기에 탐색에는 O(Log N)의 시간 복잡도를 가진다.
Index의 장점음 위에서 언급되었듯 검색 속도를 빠르게 해준다는 점이다. 하지만 단점 또한 있는데, 가장 큰 문제점은 정렬된 상태를 계속 유지해줘야해서, 데이터가 추가되거나 수정이 된다면, index 테이블 값들을 다시 정렬해야한다. 위의 B-tree를 예를 들면 양 쪽 자식간의 균형을 맞추기 위해서 B-tree는 노드 삽입과 삭제시에 재정렬이 필요하다.
따라서 Index는 조건절에 자주 사용하는 컬럼을 상대로 사용하는 것이 좋고, insert, update, delete 등의 데이터의 변화가 빈번히 일어나는 경우엔 되려 엄청난 성능저하를 일으키므로 사용을 삼가야한다.
Kotlin에서 index를 생성하지 위해서는 다음과 같이 사용한다.
@Entity
@Table(name = "Comment", indexes = [Index(name = "idx_comment_board_bno", columnList = "board_bno")])
class Comment(
오늘은 개인사정으로 조퇴를 하기에 여기까지 적기로한다. 더 작업을 진행하면, 쓸 내용이 생길 것 같지만, 일단 여기까지 하고, 내일 이어서 첫 웹사이트 개인 프로젝트를 Kotlin으로 옮기면서 코드를 개선해보는 작업을 해보자.
'부트캠프 일지' 카테고리의 다른 글
부트캠프 74일차 후기 (0) | 2024.03.14 |
---|---|
부트캠프 73일차 후기 (1) | 2024.03.13 |
부트캠프 68일차 후기 (1) | 2024.03.06 |
부트캠프 67일차 후기 (0) | 2024.03.05 |
부트캠프 66일차 후기 (0) | 2024.03.04 |