본문 바로가기

CS

(14)
[데이터베이스] 인덱스(Index) 인덱스(Index)란? 인덱스는 데이터를 더 빠르게 검색하고 조회하는 기능을 제공하는 자료구조이다. 이름이 색인인 것처럼 책의 색인과 유사하게 작동하게 되는데, 책의 한 주제를 찾을 때 첫 장부터 순차적으로 조회하지 않고 목차를 확인하듯 DB 또한 책의 목차와 같이 색인을 통해 데이터를 빠르게 조회할 수 있다. 대부분의 인덱스는 B tree, 해시 구조를 사용하고, 해당 자료구조를 통해 조회 성능을 향상시킨다. 인덱스를 사용하는 이유 인덱스의 필요성은 데이터의 양이 많을 수록 높아진다. 인덱스를 사용하지 않는 경우 원하는 데이터를 검색하고 조회하기 위해서는 모든 데이터를 조회하여 WHERE 절에 맞는 조건이 만족하는지 비교가 필요하다. 데이터 N에 대한 모든 비교가 필요하므로, 조회시 O(N)의 비용이 ..
[데이터베이스] 리플리케이션(Replication) 리플리케이션이란? 데이터베이스 리플리케이션은 운용중인 데이터베이스의 복제본을 만들어 운용하는 것을 말한다. 리플리케이션은 실제 데이터의 백업, 시스템의 성능 향상 등에 사용이 된다. 원본 데이터베이스를 master, primary, leader 등으로 부르고 복제된 데이터베이스를 slave, secondary, replica 등으로 부른다. 리플리케이션의 목적 리플리케이션은 기본적으로 데이터베이스의 안정성을 높히기 위해 사용됩니다. 다양한 이유가 있지만 대표적인 목적은 다음과 같다. 데이터 무결성 및 복구 : 원본 데이터베이스에 문제가 생겼을 때 복제본을 통해 데이터를 복구할 수 있다. 데이터 가용성 및 서비스 연속성 향상 : 하나의 데이터베이스에 장애가 발생해도 다른 위치에서 데이터베이스를 사용할 수 ..
[데이터베이스] 샤딩(Sharding) Sharding이란? 하나의 데이터베이스 데이터가 커지게 되면 병목현상, 용량 부족 등의 성능에 안좋은 영향을 미치게 된다. 또한 이 문제들은 실제 서비스의 CRUD를 느리게 만드는 원인이 되고 사용자 경험까지 영향을 준다. 이런 문제를 해결하기 위해 사용되는 것이 샤딩이다. 샤딩은 데이터베이스를 작은 그룹들로 나누고 데이터들 또한 각 데이터베이스에 나누어 분할하는 것을 의미한다. 각 분할된 부분을 샤드라고 하고 여러 데이터베이스 서버에 분할하여 저장함으로써 부하 문제를 해결한다. 파티셔닝의 수평 분할(Horizontal partitioning)을 생각해 볼 수 있는데, 수평 분할이 하나의 데이터베이스 내에서 테이블의 데이터를 분할하는 방식이었다면 샤딩은 분할된 데이터를 다수의 데이터베이스에 보관한다. ..
[데이터베이스] 트랜잭션 격리 수준(Transaction Isolation Level) 트랜잭션 격리 수준(Transaction Isolation Level)이란? 데이터베이스에서 동시에 여러 트랜잭션이 수행될 때 발생하는 이상 현상에 대한 허용 수준이라고 볼 수 있다. 제약이 없을수록 제약사항이 없기 때문에 트랜잭션의 처리량은 증가하지만, 데이터의 불일치가 발생할 가능성인 높아진다. 트랜잭션의 동시성 문제를 발생하지 않도록 막을 수 있지만, 제약사항이 많아지고 처리할 수 있는 트랜잭션의 수가 줄어들어 DB의 처리량이 크게 하락하게 된다. 따라서 사용자가 트랜잭션으로 발생할 수 있는 문제들을 인식하고, 필요에 의해서 적절히 사용할 수 있도록 레벨을 나누었는데 그것이 트랜잭션 격리 수준(Transaction Isolation Level)이다. SQL:1992 표준에서 제시한 트랜잭션 격리 수..
[데이터베이스] 파티셔닝 파티셔닝이란? 데이터베이스 분할(Partitioning) 또는 파티셔닝은 데이터베이스를 여러 부분으로 분할하는 것이다. 데이터베이스 분할은 중요한 튜닝기법으로 데이터가 너무 커져서, 조회하는 시간이 길어질 때 또는 관리 용이성, 성능, 가용성 등의 향상을 이유로 행해지는 것이 일반적이다. 분할된 각 부분을 ‘파티션’이라고 부른다. - 위키백과 서비스 규모가 커지면서 DB의 크기 또한 커지게 되면 기존의 시스템에서 성능 저하와 메모리 부족 등의 문제가 발생 할 수 있다. 하나의 테이블에 너무 많은 데이터가 생겨 크기가 커지면 이런 문제들이 발생하게 되는데 이런 문제를 해결하기 위해 파티셔닝 기법이 사용된다. 목적 성능 Query의 성능을 향상시킨다. 풀 스캔에서 데이터를 읽어오는 범위를 줄여 성능을 향상시..
[데이터베이스] Database Connection Pool, DBCP Database Connection Pool 이란? 편의를 위해 DBCP로 칭하도록 하겠습니다. DBCP는 미리 연결된 Connection을 Connection Pool에 만들어두고, 필요에 의해 사용하고 반환함으로써 Connection을 재활용할 수 있게 해주는 기법을 의미한다. DBCP는 연결 생성, 연결 재사용, 연결 제한, 연결 유지, 연결 검사와 같은 주요한 기능을 제공한다. 연결 생성 : Connection을 얼마나 생성할 지 지정할 수 있다. 연결 재사용 : 생성된 Connection을 반환받아 재사용할 수 있다 연결 제한 : DBCP 내부의 Connection을 얼마나 개방할 지 제한한다. 이를 통해서 시스템 부하를 관리할 수 있다. 연결 유지 : Connection이 사용되고 있지 않아도..
[고정소수점, 부동소수점] 컴퓨터의 실수 표현 컴퓨터가 기본적으로 소수를 왜 부동소수점 방법으로 사용이 되는지 이해하기 위해서 소수를 알아본다. 소수 수학 소수(素數, [소수])는 수학에서 1과 그수 자신 이외의 자연수로는 나눌 수 없는, 1보다 큰 자연수이다. 소수(小數, [소수]) 수학에서 소수점을 찍어 나타낸 실수이다. 소수(小數)는 수학에서 0보다 크고 1보다 작은 수이다. - 위키백과 소수는 수학에서 소수점을 찍어 나타낸 실수이며 0보다 크고 1보다 작은 수, 즉 정수로 표현할 수 없다. 이런 수를 표현하기 위해 소수점을 이용해 표시하며, 소수점을 기준으로 정수부와 소수부를 나눈다. 예를 들어 0.5에서 0은 정수부이고 5는 소수부이다. 그리고 소수는 분수로 표현할 수 있는데 10진수를 사용하여 5/10으로 표현할 수 있으며, 공약수로 나누..
서로소 집합 : Disjoint Set(Union-Find) 개념 서로소 집합 자료구조, Disjoint Set, Union-Find 등의 이름으로 불린다. 서로소는 공통으로 포함하는 원소가 없는 두 집합의 관계다. 즉, Disjoint Set은 공통되는 원소를 처리하기 위한 자료구조라 할 수 있다. Disjoint Set은 Union, Find라는 두가지 연산을 가진다. Union : 원소를 하나의 집합으로 합친다. Find : 원소가 속한 집합이 어떤 집합인지 찾는다. 동작과정 조건 원소의 갯수가 1~6이 있고 아래와 같이 원소를 합친다. 처리할 연산 → (1, 2), (2, 3), (3, 4), (5, 6) 구현 원소의 갯수만큼 배열을 만들고 해당 배열은 자기 자신을 가리키는 각각의 집합으로 초기화한다. union 메서드 public void union(in..