나는 이렇게 학습한다 575

자료구조 _ Hash table

Hash table은 무엇인가요? 해시테이블은 효율적인 탐색(빠른 탐색)을 위한 자료구조로 키-값 쌍의 데이터를 입력받습니다. hash function h에 key값을 입력으로 넣어 h(k)를 위치로 지정하여 키-값 쌍을 저장합니다. 저장, 삭제, 검색의 시간복잡도는 모두 O(1)입니다. 좀 더 자세히 알아볼까요~ Direct-address Table을 먼저 알아봅시다. 직접 주소화 테이블이란? 키를 인덱스로 설정하여 저장하는 방식입니다. 직접 주소화 테이블의 단점은 키에 따라 빈공간이 생기고 공간을 낭비하게 됩니다. 또한 인덱스에 다양한 자료형의 키를 저장할 수 없습니다. 이러한 단점들을 보완하기 위해 해시 테이블을 사용합니다. 해시 테이블 해시 테이블은 hash function h를 이용, (키, 값..

자료구조 _ Queue 그리고 Stack

Queue는 무엇인가요? 큐는 줄 형태의 선입선출 자료구조입니다. 활용예시는 프린트 출력, 은행창구 번호표 대기, 너비우선탐색(BFS) 등이 있습니다. enqueue : 데이터 추가 dequeue : 데이터 추출 시간복잡도는 둘 다 O(1)입니다. array-based queue vs list-based queue array-based queue : 배열 기반 큐는 선입선출 과정에서 남는 메모리가 생깁니다. 이는 circular queue로 해결할 수 있습니다. *circular queue는 배열이 끝까지 차면 첫부분에 비어있는 공간으로 다시 채우기 시작하는 것을 뜻합니다. 만약 공간이 없어서 채울 수 없게 되면 dynamic array와 같은 방법으로 array의 크기를 늘려야 합니다. list-bas..

내가 쓴 Python 테스트 코드 coverage 알아보기

커버리지란? 테스트 케이스가 얼마나 충족되었는지를 나타내는 지표 중 하나입니다. 테스트를 진행하였을 때 ‘코드 자체가 얼마나 실행되었느냐’는 것이고, 수치를 통해 확인할 수 있습니다. 커버리지를 확인하려면? 테스트 코드를 작성하다보면 내 코드의 커버리지가 얼마나 되는지 궁금해지는데요. 제가 10초만에 커버리지를 확인할 수 있는 방법을 알려드리겠습니다. (테스트 코드가 이미 작성되어있고 테스트를 실행할 수 있는 상황을 가정합니다.) 1. 먼저 coverage 라이브러리를 설치합니다. pip install coverage 2-1. 만약 pytest 를 사용한다면 다음 명령어를 입력해주세요. coverage run -m pytest 2-2. 만약 unittest 를 사용한다면 다음 명령어를 입력해주세요. co..

데이터베이스에서 인덱스는 왜 사용하는 걸까?

인덱스란? 인덱스는 데이터베이스에서 테이블의 검색 성능을 높여주는 방법입니다. 관계형 데이터베이스에서는 B+Tree구조로 된 index를 사용하여 검색 속도를 향상시킵니다. 특히 select ~ where 쿼리처럼 특정 데이터를 찾을 때 빠른 속도로 검색할 수 있게 해 줍니다. 인덱스의 구조 인덱스는 Btree, B+tree(대부분), Hash, Bitmap로 구현할 수 있습니다. 인덱스를 생성하면 특정 컬럼(속성)의 값을 기준으로 정렬하여 데이터의 물리적 위치 주소와 함께 별도 파일에 저장합니다. 이때 특정 컬럼을 'search-key'라고 하고 실제 데이터의 물리적 위치 값을 'pointer'라고 합니다. 보통 인덱스는 테이블 크기의 10% 정도의 저장 공간을 차지합니다. 인덱스를 사용하는 이유 테이..

트랜젝션이란?

트랜젝션은 무엇인가요? 트랜젝션은 데이터베이스에서 수행하는 작업의 최소 단위로 데이터베이스의 ‘무결성’을 유지합니다. 트랜젝션은 하나 의상의 쿼리를 포함하고 ACID라는 원자성, 일관성, 고립성, 지속성의 4가지 규칙을 만족해야합니다. *무결성이란? 데이터의 일관성과 정확성을 지키는 것 원자성 Atomicity : 트랜젝션은 all or nothing, 전부 수행되거나 아니면 전부 수행되지 않거나 둘 중 하나여야 합니다. 즉, 원자성은 더 이상 쪼개질 수 없는 최소의 작업 단위를 의미합니다. 일관성 Consistency : 트랜젝션이 성공하면 언제나 일관성 있는 데이터베이스 상태를 유지해야함을 의미합니다. ex. 두 잔액의 합이 변하는 경우, 숫자필드가 문자필드로 변하는 경우 일관성이 없다고 할 수 있다..

RDB와 NoSQL를 차이

RDB란? 관계형 데이터베이스는 엄격하게 정의된 스키마를 요구하는 테이블 기반 데이터 구조입니다. 엄격한 스키마로 데이터 중복이 없고, 데이터를 유지보수하는데 효율적입니다. 다만, 시스템이 커지면 join문이 복잡해지고 성능 향상을 하려면 스케일 업만 가능하여 비용이 크게 발생합니다. *스키마(schema)는 데이터베이스에서 자료의 구조, 자료의 표현 방법, 자료 간의 관계를 형식 언어로 정의한 구조입니다. -위키- 그렇다면 NoSQL은 무엇일까요? NoSQL은 테이블 구조가 아닌 비정형 데이터를 저장할 수 있습니다. 유연하고 자유로운 데이터 구조이나 데이터 수정시 모든 컬렉션에서 수정이 필요하기 때문에 update가 적고 조회가 많은 경우에 유리합니다. 이 둘은 언제 사용하는게 좋을까요? RDB 데이터..

관계형 데이터베이스의 key 종류

Table (=Relation) 하나의 셀에는 단일 값을 갖습니다. 각 row는 동일하지 않습니다. *column (=어트리뷰트) *row (=튜플, 레코드) col 1 col 2 row 1 row 2 기본키 (Primary key) 후보키 중에 선택한 유일성, 최소성을 만족하는 키입니다. Null값과 중복 값을 가질 수 없습니다. 슈퍼키 (Super key) 슈퍼키는 각 row를 식별할 수 있는 하나 혹은 그 이상 컬럼들의 집합입니다. (=유일성) 예시 :: (이름, 학번), (학번), (주민번호, 이름, 학번) 후보키 (Candidate key) 각 row를 유일하게 식별하여 Primary key로 사용할 수 있는 컬럼들을 말합니다. (=최소성) 예시 :: (학번), (주민번호) 대체키 (Altern..

자료구조 _ Linked List란?

Linked List는 무엇인가요? Linked List는 노드라는 구조체 안에 데이터와 다음 노드의 address를 가지고 있는 자료구조를 말합니다. Linked List는 물리적인 메모리상에는 비연속적이나 다음 노드를 가리키는 address가 있기때문에 논리적인 연속성을 가지고 있다고 할 수 있습니다. 장점 - Array와 달리 데이터가 추가되는 시점에 메모리가 할당되기 때문에 메모리를 효율적으로 사용할 수 있습니다. - 시간복잡도는 데이터 삽입/삭제의 경우 다음 address만 수정하면 되기 때문에 O(1)입니다. 단점 - 다음 노드의 address를 가지고 있어야하기 때문에 데이터 하나당 차지하는 메모리가 커집니다. - 데이터 조회의 경우 Linked List는 순차적인 접근만 가능하기 때문에 O..