CS

[Database] 클러스터링 인덱스와 논 클러스터링 인덱스 0. 들어가기전에 자주 나오는 인덱스 개념인 클러스터링 인덱스와 논 클러스터링 인덱스에 대해서 알아보았습니다. 1. 클러스터링 인덱스 MySQL InnoDB에서는 클러스터링 인덱스를 항상 사용한다.보통 테이블의 PK에 적용이 되는 인덱스이며, PK가 없으면 not null + unique한 컬럼에 사용이 되며, 이마저도 없으면 임의의 값으로 MySQL이 만들어서 사용한다. 그래서 항상 InnoDB를 사용하는 테이블에는 클러스터링 인덱스가 적용되어 있다고 할 수 있다. 그렇다면 왜 이런 방식을 사용하는 걸까? 그 이유는 검색 속도가 빠르기 때문이다. 클러스터링 인덱스는 테이블을 물리적으로 정렬을 한 인덱스이다. 즉, PK가 있다면 PK 기준으로..
[Database] 인덱스 0. 들어가기 전에 성능 측정 공부를 하기전에 인덱스에 대해서 알아봤습니다. 1. 인덱스 인덱스는 무엇일까? 해당하는 단어를 사전에서 찾아보면 색인이라고 되어있다. 즉 무언가를 찾을 때 더 빨리 찾을 수 있게 하는 방법이라는 뜻이다. 좀 더 프로그래밍 관점에서 설명하자면 인덱스는 저장 성능(쓰기, 삭제, 수정) 성능을 희생하면서 읽기 성능을 높이는 방법이다. 그렇다면 이런 생각이 들 것이다. 저장 성능이 떨어진다고? 항상 좋은 것만은 아니네? 맞는 말이다. 일반적으로 인덱스는 10%의 저장소의 비율을 차지하고, 인덱스의 정렬 비용 때문에 저장 성능이 떨어진다. 따라서 인덱스는 읽기 성능을 높이기 때문에 저장 횟수보다 읽기 횟수가 더 많은 서비스에서 사용되면 좋다. 클라우드 서비..
[DataBase] Flyway 톺아보기 0. 들어가기 전에 테코톡을 준비하면서 알아본 flyway를 정리해보았습니다. 1. Flyway란? 오픈소스 데이터베이스 마이그레이션 툴 Flyway의 공식 홈페이지에서는 flyway를 오픈소스 마이그레이션 툴이라고 소개하고 있습니다. 일반적으로 마이그레이션은 데이터나 소프트웨어를 한 시스템에서 다른 시스템으로 이동하는 것을 의미합니다. 그렇지만 flyway에서는 데이터베이스의 변경을 마이그레이션이라고 합니다. 즉, 데이터베이스에 테이블이 추가, 삭제, 수정되는 행위를 마이그레이션이라고 합니다. 2. 특징 Flyway는 7가지의 특징이 있습니다. 2.1 Migrate SQL파일을 추가해서 테이블을 변경할 수 있습니다. 자세한 방법은 아래에서 알아보겠습니다. 2.2..
· CS/[NETWORK]
[네트워크] JWT란? 0. 들어가기 전에 JWT를 개념을 처음 접하게 되어서 정리해보았습니다. 1. JWT란? Json 포맷을 이용하여 사용자의 정보를 저장하는 토큰 JWT는 Json Web Token의 약자로, 토큰 자체에 정보를 Json 포맷 형식으로 저장하여 사용한다. 1.1 JWT 구조 [ 헤더 ] JWT에서 사용할 타입(typ)과 해시 알고리즘의 종류(alg)가 담겨 있음 [ 페이로드 ] 토큰에서 사용할 정보를 담고 있음 이러한 정보들의 조각을 claim이라고 함. 서버에서 첨부한 사용자 권한 정보의 데이터 토큰에 대한 데이터 [ 서명 ] (헤더를 Base64로 인코딩한 값 + "." + 페이로드를 Base64로 인코딩한 값)를 서버의 비밀키를 이용해서 헤더에 명시된 알고리즘으로 암호화된 값 ..
[Algorithm] Quick Sort(퀵 정렬) 1. 정의 피벗(기준)을 하나를 정해서 피벗보다 큰 수는 오른쪽 작은수는 왼쪽으로 옮겨가며 정렬하는 기법 불안정 정렬 시간 복잡도 평균 : $O(nlogn)$ 최악 : $O(n^2)$ 2. 동작 과정 피벗을 하나 정한다. 양 끝에 포인터를 각각 두고 포인터를 움직인다. 2 - 1. 왼쪽 포인터는 피벗 보다 큰 값이 나올때까지 오른쪽으로 움직인다. 2 - 2. 오른쪽 포인터는 피벗 보다 작은 값이 나올때까지 왼쪽으로 움직인다. 2 - 3. 값을 찾으면 서로 교환한다. 2 - 4. (2 - 1) ~ (2 - 3)을 반복한다. 포인터가 서로 교차하면 2개의 구간이 생기는데, 각각의 구간 별로 1번부터 반복한다. 3. 장단점 장점 병합 정렬과는 달리 추가적인 ..
[Algorithm] Merge Sort(병합 정렬) 1. 정의 데이터 배열의 원소를 반으로 나누고, 합쳐서 정렬하는 알고리즘 분할 정복을 사용 시간 복잡도 최선 : $O(nlogn)$ 평균 : $O(nlogn)$ 최악 : $O(nlogn)$ 2. 동작 과정 배열의 원소가 2개가 남을 때까지 이등분 한다. 2개의 원소를 반으로 나누어 각각 비교하여 정렬된 배열을 얻는다. 나머지 배열들을 병합하면서 정렬한다. 3. 장단점 장점 순차적인 비교로 정렬 일정한 속도 안정 정렬 LinkedList 정렬할 때 퀵 정렬 보다 효율이 좋음 LinkedList는 순차 접근을 해야하는데 퀵 정렬은 임의 접근이기 때문 단점 추가적인 공간이 필요 4. 코드 public void mergeSort(int[] arr, int l..
[Algorithm] Insertion Sort(삽입 정렬) 1. 정의 2번째 원소부터 시작하여 그 앞의 원소들과 대소비교하여 삽입할 위치를 결정하여 삽입 Selection Sort와 유사하지만, 좀 더 효율적인 알고리즘 시간복잡도 최선 : $O(n)$ → 모두 다 정렬되어 있을 경우 평균 : $O(n^2)$ 최악 : $O(n^2)$ 2. 동작 과정(오름차순) 2번째 인덱스 값을 tmp에 저장 tmp 앞에 있는 원소들과 비교하여 가장 알맞은 자리(arr[i] < arr[tmp] < arr[i + 1])에 삽입 → 삽입하는 자리는 뒤로 한칸씩 밀린다. 1번으로 돌아가 반복 3. 장단점 장점 알고리즘이 단순 정렬되어 있을 경우 매우 효율적 제자리 정렬 안정 정렬 단점 평균과 최악의 시간복잡도가 $O(n^2)..
[Algorithm] Selection Sort(선택 정렬) 1. 정의 배열에서 자리를 선택한 후 특정 값을 찾아 교환하면서 정렬하는 방법 오름차순일 경우 뒷 부분에서 가장 작은 값을 찾아서 교환한다. 시간복잡도 최선 : $O(n^2)$ 평균 : $O(n^2)$ 최악 : $O(n^2)$ 2. 동작 과정(오름차순) 주어진 배열 중에 최소값을 찾는다. 찾은 값을 첫번째 원소와 교환한다. → 첫번째 원소는 정렬되어 있는 상태가 됨 정렬된 원소를 제외하고 가장 최소값을 찾아 정렬이 안된 첫번째 원소와 교환한다. 반복 3. 장단점 장점 자료 이동 횟수가 미리 결정 됨 제자리 정렬 단점 안정성을 만족하지 않음 → 상대적 위치가 바뀜 같은 원소가 중복되어 있으면 중복된 원소의 순서를 보장하지 않음 효율성이 떨어짐 4..
쿠엔크
'CS' 카테고리의 글 목록