본문 바로가기

분류 전체보기86

동기 (Synchronous)와 비동기 (Asynchronous) 코드 실행 방식 동기 코드 실행 방식은 코드를 한줄 한줄 순서대로 실행하면서 한줄이 실행되기 전에는 다음 줄을 실행하지 않는 방식. 한 작업이 끝나야 다음 작업을 수행하는 방식이다. 이러한 방식은 코드의 의도대로 실행되는 것을 보장할 수 있어서 코드가 예측 가능하고 안정적이라는 장점이 있다. 하지만 코드가 블로킹되는 경우, 시간이 오래 걸리는 작업이 있는 경우 전체 프로그램이 느려지는 단점이 있다. 비동기 코드 실행 방식은, 코드를 한줄 한줄 순서대로 실행하는 것이 아니라 작업을 요청하고 결과를 기자리지 않는 채 다음 작업을 수행하는 방식. 한 작업이 완료되기를 기다리지 않고 다른 작업을 수행할 수 있다. 이러한 방식은 블로킹 되는 경우가 적어서 대규모 작업을 처리하는 경우에 유용하지만 코드가 예측하기 어렵고 디버깅이 .. 2023. 4. 14.
이벤트 루프 / 콜백 함수 자바 스크립트는 싱글 스레드로 작동하며 이벤트 루프를 통해 비동기적으로 작업을 처리한다. 이벤트 루프는 이벤트 발생 시 해당 이벤트를 처리하는 작업을 큐에 넣고, 이벤트 루프의 작업이 끝나면 큐에 있는 작업을 순차적으로 처리한다. 이벤트 루프는 크게 두가지의 큐를 갖고 있다. 콜 스택과 테스크 큐 콜스택은 현재 실행중인 함수의 정보를 담는 자료구조이고, 테스크 큐는 비동기적으로 처리되어야 할 작업을 담는 자료구조이다. 이벤트 루프의 동작 과정은 아래와 같다. 1. 현재 실행 중인 작업을 콜 스택에 담는다 2. 이벤트가 발생하면, 해당 이벤트를 처리하는 작업을 테스크 큐에 담는다 3. 콜 스택이 비어 있으면, 테스크 큐에서 작업을 가져와 콜 스택에 담고 실행 4. 다시 1번으로 돌아가 반복 자바스크립트는 .. 2023. 4. 13.
인덱스의 자료 구조 인덱스를 구현하기 위해서는 다양한 자료구조를 사용할 수 있으며 가장 대표적인 해시테이블과 B+Tree가 있다 해시 테이블 해시테이블은 (key, value)로 데이터를 저장하는 자료구조 중 하나로 빠른 데이터 검색이 필요할 때 유용하다. 해시 테이블은 key 값을 이용한 고유한 인덱스를 생성하여 그 인덱스에서 저장된 값을 꺼내오는 구조이다. 해시 테이블 기반의 DB 인덱스는 (데이터=컬럼의 값, 데이터의 위치)를 (Key, Value)로 사용하여 컬럼의 값으로 생성된 해시를 통해 인덱스를 구현하였다. 해시 테이블의 시간복잡도는 O(1)이며 매우 빠른 검색을 지원한다. 하지만 DB 인덱스에서 해시 테이블이 사용되는 경우는 제한적인데, 그러한 이유는 해시가 등호(=) 연산에만 특화되었기 때문이다. 해시 함수.. 2023. 4. 7.
인덱스란? 인덱스란 추가적인 쓰기 작업과 저장공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조이다. 만약 인덱스를 사용하지 않은 컬럼을 조회해야 하는 상황이라면 전체를 탐색하는 full scan을 수행해야 하며, 전체를 비교 탐색하기 때문에 처리 속도가 떨어진다. 인덱스의 장점 - 테이블을 조회하는 속도와 그에 따른 성능을 향상시킬 수 있다. - 전반적인 시스템의 부하를 줄일 수 있다. 인덱스의 단점 - 인덱스를 관리하기 위해 DB의 약 10%에 해당하는 저장공간이 필요하다. - 인덱스를 관리하기 위해 추가적인 작업이 필요하다. - 인덱스를 잘 못 사용할 경우 오히려 성능이 저하되는 역효과가 발생할 수 있다. 만약 create, update, delete가 빈번한 속성에 인덱스를 걸게되면 .. 2023. 4. 7.