본문 바로가기

Computer Science20

[DB] 정규화(Nomalization) 정규화(Normalization) 정규화란 관계형 데이터베이스의 데이터 모델 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 의미하며 이상이 있는 관계를 재구성하여 작고 잘 조직된 관계를 생성하는 것을 목표로 합니다. 정규화는 테이블 간의 종속성을 분석하고 데이터를 여러 테이블로 분할하여 중복을 줄이는데 중점을 두고있으며 하나의 테이블에서의 데이터의 삽입, 삭제, 변경이 정의된 관계들로 인하여 데이터베이스의 나머지 부분들로 전파되게 하는 것입니다. 출처 또한 정규화는 여러 단계로 정의되어 있는 정규형(Normal Form)이라는 규칙을 따라 데이터 모델의 정규화가 이루어지는데 각 단계는 아래와 같습니다. 먼저 다음과 같은 정규화 되지 않은 테이블이 존재한다고 가정하겠습니다. 관리자 아이디 관리자.. 2023. 11. 17.
[DB] 인덱스(Index) 인덱스(Index) 출처 인덱스란 데이터베이스 테이블 내의 특정 열에 대한 검색 및 정렬 성능을 향상시키기 위해 사용되는 자료 구조를 뜻합니다. 인덱스 구조의 유일한 목적은 데이터를 검색하는 동안 디스크의 I/O를 최소화하도록 제한하는 것에 있습니다. 즉 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 및 정렬 성능을 향상시키는 자료 구조로 인덱스가 생성되면 인덱스된 열과 연결된 테이블의 값 위치가 기록됩니다. 인덱스는 특정 열에 대한 정렬된 키와 해당 키가 위치한 데이터 블록에 대한 포인터로 구성되어 있습니다. 테이블의 다른 세부 항목들은 갖고 있지 않기 때문에 보통 테이블을 저장하는데 필요한 디스크 공간보다 작으며 관계형 데이터베이스에서의 인덱스는 테이블 부분에 대한 하나의 사본.. 2023. 11. 15.
[Algorithm] 기수 정렬(Radix Sort) 기수 정렬(Radix Sort) 출처 기수 정렬(Radix Sort)은 데이터를 구성하는 기본 요소, 즉 기수를 이용해서 정렬을 진행하는 알고리즘입니다. 기수 정렬은 비교 정렬 알고리즘과는 다르게 비교 없이 수행하는 정렬 알고리즘으로 입력 데이터를 여러 개의 버킷으로 나누고 각 버킷에 속한 데이터들을 개별적으로 정렬하는 버킷 정렬 정렬의 일종으로 취급되기도 합니다. 데이터의 각 자릿수를 기준으로 정렬을 수행하기 때문에 자릿수가 존재하지 않는 데이터를 기수 정렬로 정렬하는 것은 불가능합니다. 또한 기수 정렬은 정렬 방법의 특수성 때문에 부동소수점 실수처럼 특수한 비교 연산이 필요한 데이터에는 적용할 수 없고 길이가 다른 데이터들을 대상으로는 정렬이 불가능합니다. 예제 먼저 다음과 같이 정렬되지 않은 배열이.. 2023. 11. 11.
[DB] Lock Lock 출처 데이터베이스 락이란 여러 사용자 또는 프로세스와 같이 여러 스레드를 실행하는 환경에서 데이터 일관성과 무결성을 유지하기 위해 트랜잭션의 순차적 진행을 보장할 수 있는 직렬화 장치를 뜻합니다. 락은 상호 배제 동시성 제어 정책을 강제하기 위해 설계되며 자원에 대한 접근에 제한을 강제하기 위한 동기화 메커니즘입니다. 락은 데이터베이스 관리 시스템(DBMS) 내에서 사용되며 데이터베이스 객체에 대한 동시 엑세스 및 수정을 제어하는데 사용됩니다. Level 출처 Locking Level이 낮을수록 동시성은 좋지만 관리해야할 락의 개수가 증가하기 때문에 더 많은 리소스를 소비하게 됩니다. 반면에 Locking Level이 높을수록 적은 양의 락 리소스를 사용하지만 하나의 락으로 많은 레코드를 관리하.. 2023. 11. 9.
[Algorithm] 퀵 정렬(Quick Sort) 퀵 정렬(Quick Sort) 출처 퀵 정렬(Quick Sort)는 다른 원소와의 비교만으로 정렬을 수행하는 비교 정렬로 분할 정복(divide and conquer) 알고리즘을 기반으로 동작합니다. 분할 정복 알고리즘은 큰 문제를 작은 하위 문제로 나누고 각 하위 문제를 해결한 다음 그 결과를 결합하여 원래 문제를 해결하는 방식으로 진행합니다. 다만 동일하게 분할 정복 알고리즘을 활용하는 병합 정렬과는 다르게 분할되는 배열이 불균등합니다. 때문에 정렬 이후 데이터의 순서가 정렬 이전 원래 순서와 같음을 보장하지 못하는 불안정 정렬에 속합니다. 주어진 배열에서 임의의 한 원소를 고릅니다. 이렇게 고른 원소를 피벗(Pivot)이라 부릅니다. 피벗 앞에는 피벗보다 값이 작은 모든 원소들이 오고 피벗 뒤에는 .. 2023. 11. 8.
[Algorithm] 병합 정렬(Merge Sort) 병합 정렬(Merge Sort) 출처 병합 정렬(Merge Sort)은 비교 기반 정렬 알고리즘이자 분할 정복 알고리즘 중 하나입니다. 분할 정복 알고리즘은 큰 문제를 작은 하위 문제로 나누고 각 하위 문제를 해결한 다음 그 결과를 결합하여 원래 문제를 해결하는 방식으로 진행합니다. 또한 하위 배열들을 병합하는 과정에서 투 포인터 기법이 사용됩니다. 분할: 주어진 배열을 반으로 나누는 과정으로 시작하며 정렬되지 않은 배열의 중간 지점을 기준으로 나눕니다. 해당 분할 작업을 더이상 나눌수 없을 때까지 재귀적으로 반복합니다. 정복: 나뉜 하위 배열들들에 대해 재귀적으로 병합 정렬 진행합니다. 각 하위 배열은 독립적으로 정렬됩니다. 병합: 투 포인터 기법을 사용하여 두 정렬된 하위 배열을 하나로 합칩니다. 두.. 2023. 11. 3.
[DB] Transaction Transaction 트랜잭션은 데이터베이스에서의 상호 작용의 단위이며 하나 이상의 작업을 처리하는 개념으로 데이터베이스의 무결성과 데이터의 일관성을 보장하기 위한 단위를 의미합니다. 트랜잭션은 데이터베이스의 상태를 변환시키는 하나의 논리적인 작업 단위를 구성하는 연산들의 집합입니다. 데이터베이스에서 수행되는 일련의 여러 작업이며 모두 단일 논리적 작업 단위로 사용됩니다. 사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변환 과정의 작업단위입니다. 하나의 트랜잭션은 Commit 되거나 Rollback 됩니다. 트랜잭션은 "전체"로 처리하려는 작업 단위이며 이는 완전히 일어나거나 전혀 일어나지 않아야 합니다. 동작 데이터베이스는 초당 수백만 개의 동시 요청을 처리하며 대부분의 경우 이런.. 2023. 11. 2.
[Algorithm] 선택 정렬(Selection Sort) 선택 정렬(Selection Sort) 출처 선택 정렬(Selection Sort)은 배열에서 가장 작은(또는 가장 큰) 원소를 선택하고 이를 배열의 앞쪽으로 이동시키는 방식으로 동작합니다. 비교 연산을 기반으로 동작하며 원소 간의 비교를 통해 작은(또는 큰) 값을 찾고 배열에서 다른 위치로 이동시키는 방식으로 동작합니다. 예제 먼저 다음과 같이 정렬되지 않은 배열이 있다고 가정하겠습니다. 위 배열을 오름차순으로 정렬하기 위한 선택 정렬 알고리즘은 다음과 같이 동작합니다. 먼저 첫 번째 위치의 값과 해당 배열에서의 가장 작은 값이 무엇인지 확인합니다. 영 번째 인덱스의 값인 15보다 세 번째 인덱스의 값 10이 더 작은 값 입니다. 가장 작은 값인 10을 영 번째 인덱스에 넣고 15는 세 번쨰 인덱스로 .. 2023. 10. 28.
[Algorithm] 삽입 정렬(Insertion Sort) 삽입 정렬(Insertion Sort) 삽입 정렬은 자료 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여 자신의 위치를 찾아 삽입함으로써 정렬을 완성하는 알고리즘입니다. 정렬되지 않은 목록(리스트, 배열)을 정렬된 부분과 정렬되지 않은 부분으로 나누며 정렬되지 않은 부분의 원소를 하나씩 선택하여 정렬된 부분의 적절한 위치에 삽입하는 방식으로 동작합니다. 출처 예제 먼저 다음과 같이 정렬되지 않은 배열이 있다고 가정하겠습니다. 위 배열을 오름차순으로 정렬하기 위한 삽입 정렬 알고리즘은 다음과 같이 동작합니다. 0 번째 인덱스 요소인 5는 정렬된 상태로 가정을하고 그 외 나머지 1... n-1 인덱스 요소는 정렬되지 않은 배열이라고 가정합니다. 첫 번쨰 요소를 정렬된 하위 배열의 요.. 2023. 10. 22.