본문 바로가기

전체 글86

프로세스 (Process)와 스레드 (Thread)의 차이점 프로세스는 운영체제에서 실행중인 프로그램으로 독립적인 메모리 공간 , 실행 흐름, 자원 등을 가지고 있다. 하나의 프로그램이 실행될 때 운영체제는 해당 프로그램을 위한 프로세스를 실행하고, 이 프로세스 안에서 해당 프로그램의 모든 코드, 데이터, 자원 등을 관리한다. 각각의 프로세스는 서로 독립적으로 실행되며, 다른 프로세스에 영향을 끼치지 않는다. 스레드는 하나의 프로세스 내에서 실행되는 작업의 단위이다. 하나의 프로세스 내에서 여러개의 스레드가 실행될 수 있다 각각의 스레드는 프로세스의 자원을 공유하며, 프로세스 내에서 독립적인 실행 흐름을 가지고 있다 이 때문에 스레드는 프로세스보다 가볍고 빠르게 실행될 수 있지만 스레드는 프로세스의 메모리 공간을 공유하기 때문에 다른 스레드가 공유하는 자원에 대한.. 2023. 4. 14.
동기 (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.
nest.js 구동 시 mysql 연동 에러 발생 nestjs 구동 시 mysql 연동 에러가 발생했다. ERROR [ExceptionHandler] ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client 해당 에러가 발생했고 검색 결과 node.js, mysql플러그인이 caching_sha2_password을 사용하지 못해서 생기는 오류 mysql에서 mysql_native_password 로 변경해줌 해결 방법 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '1234'; ALTER USER 'ro.. 2023. 3. 5.
DTO DTO(Data Transfer Object) 간단하게 정의하자면 데이터를 전송하기 위해 작성된 객체 Nest.js에서는 모든 데이터는 DTO를 통해서 운반됨 2023. 2. 21.
Nest.js ioc = inversion of Control 제어 역전 di = 의존성 주입 DTO = Data Transfer Object 데이터를 전송하기 위해 작성된 객체 2023. 2. 20.
body-paser 와 cookie-parser body-paser란 body-parser는 미들웨어 즉, 요청(request)과 응답(response) 사이에서 공통적인 기능을 수행하는 소프트웨어이다. cookie-parser body-paser와 동일한 로직으로 cookie 데이터를 가져온다. 2023. 2. 16.