분류 전체보기 235

선형 자료 구조

👣 개요 말 그대로 자료 구조가 일렬로 나열되어 있는 자료 구조를 일컫느다. 👣 배열 물리적으로 메모리에 나열되어 있는 데이터 집합. 요소들의 크기가 정해져 있고 같은 변수 타입으로 이뤄져 있다. 중복을 허용하고 순서가 존재. Random Read Sequential Read Insert Delete 시간 복잡도 O(1) O(n) O(n) O(n) 👣 연결 리스트 논리적으로 나열되어 있는 데이터 집합. 각 요소를 포함한 노드 앞단에 포인터가 존재해 다음 포인터를 표시할 수 있다. 싱글 연결 리스트 Next 포인터만 포함. 이중 연결 리스트 Next 포인터와 Prev 포인터를 포함. 원형 이중 연결 리스트 이중 연결 리스트와 같지만 마지막 노드와 첫 노드가 포인터로 연결된 형태. Random Read Se..

복잡도

👣 시간 복잡도 👣 Big - O 표기법 Big-O 표기법은 알고리즘의 시간 복잡도를 표현하는 방법 중 하나로, 알고리즘이 얼마나 빨리 실행되는지를 나타내는 지표. 다른 평가지표에 비해 Big-O 표기법은 매우 비관적으로 시간 복잡도를 평가한다. 때문에 최악의 경우의 알고리즘의 성능을 표기. 알고리즘의 시간 복잡도는 입력 크기에 따라 실행 시간이 어떻게 증가하는지를 나타내며, 이를 통해 알고리즘의 효율성을 평가할 수 있음. 👣 복잡도가 최고 차항의 단항식에만 집중하는 이유 - 개인적인 의견 1. Big-O 표기법이라는 것 자체가 최악의 시나리오에서의 알고리즘 성능을 측정하는 것. 최악의 상황은 입력 데이터 갯수가 커질 때 발생하기 마련이다. 2. 사실 입력 데이터의 갯수(n)가 적다면 알고리즘 사이의 차..

Join

👣 개요 하나 이상의 테이블을 특정 기준을 이용해서 합치는 연산이다. 👣 Join 원리 👣 중첩 루프 조인 - Nested Loops Join, O(n^2) 2중 for문 원리로 두 테이블을 합치는 방법. 너무 큰 Cost를 지불해야 하기 때문에 대용량 테이블에서 사용하지 않는다. 👣 정렬 병합 조인 - Sort-Merge Join, O(n log n) 정렬 후, 각 테이블에 포인터를 설정하고 포인터의 칼럼값이 같으면 조인하고 다르면 포인터를 움직이는 방식이다. 정렬 병합 조인은 다음과 같은 절차로 동작한다 두 데이터 집합 정렬 먼저 조인을 수행할 두 개의 데이터 집합을 조인 키를 기준으로 오름차순으로 정렬. 이때, 정렬은 병합 정렬(Merge Sort)을 사용. 정렬된 데이터 병합 정렬된 두 개의 데이..

데이터베이스 2023.07.24

인덱스

👣 개요 인덱스는 보통 B-트리로 구성되어 특정 값에 대한 조회가 O(log n) 복잡도로 수행된다. 만약 인덱스가 존재하지 않는 칼럼을 이용해서 조회를 하면 O(n) 복잡도로 , 즉 선형 탐색으로 검색을 수행할 것이다. 인덱스가 존재한다면 조회 성능은 비약적으로 좋아질 것이다. 하지만, 인덱스를 위한 추가적인 저장 공간을 필요로 할 뿐만 아니라 생성, 수정, 삭제를 위해 인덱스에 추가 연산을 수행해야 한다는 점으로 인해 생성, 수정, 삭제 성능은 악화된다. 👣 인덱스 생성 방법 👣 MySQL 1. 클러스터형 인덱스 클러스터형 인덱스는 인덱스와 실제 데이터 레코드를 동일한 페이지에 저장함. 쉽게 말해서 B+Tree 구조로 클러스터형 인덱스를 구성할 때, 리프 노드에 '레코드의 PK 값'이 아니라 '레코드..

데이터베이스 2023.07.24

데이터베이스 종류

👣 관계형 DB 행과 열을 가지는 표 형식 데이터를 저장하는 형태의 DB. SQL을 사용해서 데이터를 조작함. 👣 MySQL 대부분의 OS와 호환되며 가장 많이 사용하는 DB다. C, C++로 만들어졌으며 MyISAM 인덱스 압축 기술, B-트리 기반의 인덱스, 스레드 기반의 메모리 할당 시스템, 매우 빠른 조인, 최대 64개의 인덱스를 제공. MySQL 스토리지 엔진 아키텍쳐 👣 PostgreSQL 디스크 조각이 차지하는 영역을 회수할 수 있는 장치인 VACUUM이 특징인 DB. SQL 뿐 아니라 JSON을 이용해서 데이터에 접근 가능. 👣 NoSQL DB SQL을 사용하지 않는 DB. 대표적으로 MongoDB와 Redis가 존재. 👣 MongoDB JSON을 통해 데이터에 접근하고 Binary JSO..

데이터베이스 2023.07.24

트랜잭션 격리 수준

👣 개요 ACID 원칙 중 Isolation 원칙을 지키기 위해선 트랜잭션 연산 결과가 다른 트랜잭션에 영향을 끼치지 않아야 한다. 이를 완벽하게 지키기 위해선 모든 트랜잭션 연산을 직렬적으로 수행되면 된다. 하지만 이 경우, 성능이 너무 떨어지기 때문에 어느 정도 타협해 병렬적으로 수행하게 할 수 있다. '트랜잭션 수준'의 정확한 정의는 '특정 트랜잭션이 변경하거나 조회하고 있는 데이터에 대해서 다른 트랜잭션에 대한 조회 허용 수준' 라고 할 수 있다. 👣 Read_Uncommitted 격리 수준 가장 낮은 격리 수준으로 트랜잭션이 커밋되지 않아도 다른 트랜잭션에 노출되는 수준이다. 발생 문제 - Dirty Read, Non-Repeatable Read, Phantom Read 👣 Read_Commit..

데이터베이스 2023.07.24

트랜잭션

👣 정의 DB에서 논리적 기능을 수행하기 위한 작업의 단위 👣 ACID 특징 1. Atomicity - 원자성 트랜잭션은 해당 작업 내의 모든 연산이 전부 적용되거나 전부 적용되지 않거나 둘 중 하나여야 함. 애매하게 작업 중간까지만 적용되는 경우는 없어야 한다. 2. Consistency - 일관성 트랜잭션이 수행이 되어도 되지 않아도 데이터의 제약 조건은 언제나 지켜져야 함. 예를 들어, 회원 테이블의 '나이' 속성의 제약 조건은 '0 이상 100 이하'라는 제약조건이 있을 때, 나이를 수정하는 트랜잭션이 수행되기 전이나 후나 위 제약 조건을 충족해야 한다는 것이다. 3. Isolation - 격리성 트랜잭션이 병렬적으로 수행되어도 커밋 이전의 결과가 서로에게 영향을 주면 안 됨. 물론 무작정 연산 ..

데이터베이스 2023.07.23

정규화 과정

👣 개요 릴레이션 간의 잘못된 종속 관계로 인해 DB 이상 현상이 일어날 때, 이를 해결하는 과정. 저장 공간을 효율적으로 사용하기 위해 릴레이션을 여러 개로 분리하는 과정. 절대로 정규화가 성능 상의 이점을 준다는 것은 아니기 때문에 서비스의 상황에 맞춰서 정규화 결정을 내려야 함. [정규화를 진행함] 데이터 무결성을 지키기 용이해진다. 때문에 삽입, 수정, 삭제 성능이 좋아진다. But, 조회 시 Join 연산이 늘어난다. 때문에 조회 성능이 떨어진다. 👣 갱신 이상 1. 수정 이상 반복된 데이터 중에 일부만 수정하면 데이터 불일치 발생 2. 삽입 이상 불필요한 정보를 함께 저장하지 않고는 어떤 정보를 저장하는 것이 불가능. 3. 삭제 이상 유용한 정보를 함께 삭제하지 않고는 어떤 정보를 삭제하는 것..

데이터베이스 2023.07.23

데이터 베이스 용어 정리

👣 DB 일정한 규칙에 의해 구조화되어 있는 데이터 모음. 👣 DBMS 데이터 베이스를 제어, 관리하는 통합 시스템. MySQL, ORACLE, MSSQL 과 같은 것을 예로 들 수 있다. DBMS마다 정의된 SQL로 삽입, 수정, 삭제, 조회 등을 수행할 수 있습니다. 👣 엔터티 현실 세계에서 개체를 표현하는 데 사용되는 개념적인 모델로서 여러 개의 속성을 가지고 있습니다. 👣 릴레이션 DB에서 정보를 구분하는 기본 단위. 엔터티에 관한 데이터를 릴레이션 하나에 담아서 관리함. 릴레이션이 모여서 데이터베이스가 된다. 관계형 DB에서는 '테이블'이라고 불리우며 NoSQL DB에서는 '컬렉션'이라고 한다. 👣 속성 릴레이션에서 관리하는 구체적이고 고유한 이름을 갖는 정보. 👣 도메인 릴레이션에 포함된 각 ..

데이터베이스 2023.07.23

CPU 스케줄링 알고리즘

👣 개요 CPU 소유권을 어떤 프로그램에 대해 넘길지에 관한 알고리즘이다. 👣 비선점형 방식 프로세스가 스스로 CPU 소유권을 포기하는 방식. 강제로 프로세스를 중지하지 않기 때문에 Context Switching으로 인한 부하가 적다. 👣 FCFS - First Come, First Served 가장 먼저 들어온 프로세스를 먼저 처리하는 알고리즘. 단점으로 Convoy Effect이 있는데 이것은 오래 걸리는 프로세스를 처리하기 위해 간단한 프로세스를 오래 기다리게 해야 하는 현상이 발생한다. 👣 SJF - Shortest Job First 실행 시간이 가장 짧은 프로세스를 먼저 실행하는 알고리즘. 단점으로 Starvation 현상이 있는데 이것은 실행 시간이 긴 프로세스는 전혀 실행되지 않는 현상을 ..

운영체제 2023.07.23