✍️ 개인 스터디 기록
-
[python] vscode pyenv로 python 로컬 개발 환경 구성하기✍️ 개인 스터디 기록 2023. 1. 12.
1. pyenv 란? 프로젝트에 따라 파이썬 버전이 다른 경우, pyenv로 가상 환경을 만들어 사용하면 프로젝트 별로 프로젝트에서 사용하는 버전과 패키지들을 분리해 관리할 수 있다. pyenv로 파이썬 설치하기 pyenv install 3.11.0 install 할 경우 macOS의 경우 아래 기본 경로에 파이썬이 설치된다. pyenv로 설치한 파이썬이 저장되는 경로: ~/.pyenv/versions $ cd ~/.pyenv/versions $ ls 3.10.4 3.11.0 3.9 3.9.15 fastapi recsys pyenv로 설치 한 파이썬 버전 및 가상환경 확인하기 pyenv versions 명령으로 설치된 버전과 가상환경을 확인 할 수 있습니다. $ pyenv versions * system..
-
[TS] tsconfig.json 변환 할 파일 지정 과 변환 결과 설정 옵션 (files, include, exclude, outDir)✍️ 개인 스터디 기록 2023. 1. 7.
타입스크립트는 기본적으로 tsconfig.json 파일의 경로를 기준으로 모든 디렉토리를 탐색하며 모든 .ts 파일을 .js파일로 변환한다. tsconfig.json 설정에서 변환 시킬 타깃 파일을 지정 할 수 있는데, 타깃 파일을 지정하면 그 파일과 그 파일 내에서 import 나 required 로 불러와 사용하는 다른 파일들이 있다면 그 파일들도 함께 딸려와서 변환 된다. tsconfig.json에서 변환 대상을 지정하는 옵션에는 다음과 같은 항목이 사용된다. files include exclude 1. files : 변환 포함시킬 파일 직접 지정 타입스크립트 CLI 로 아래와 같이 변환 할 파일을 선택 할 수 있는데 $ tsc target.ts 그 타깃이 되는 파일들을 files에 작성해 놓으면 ..
-
[Real MySQL] 인덱스 (3) - B-Tree 인덱스를 통한 스캔 방식들✍️ 개인 스터디 기록 2022. 12. 12.
인덱스 레인지 스캔 인덱스 풀 스캔 루즈 인덱스 스캔 인덱스 스킵 스캔(v8.0 이상) 1. 인덱스 레인지 스캔 아래 쿼리와 같이 검색해야 할 범위가 결정되었을 때 사용되어지는 방식 일단 리프노드에서 시작 지점을 찾기만 하면 그 이후로는 이미 정렬되어있는 리프노드를 따라 쭉 읽기만 하면 된다. SELECT * FROM employees WHERE first_name BETWEEN 'Ebbe' AND 'Gad' (1) 리프노드까지 들어가 시작지점을 찾는다. (2) 시작지점부터 리프노드만 순차적으로 읽는다.(이때 정렬된 결과가 반환 됨) (3) 리프노드에서 실제 데이터 파일 읽어올때는 랜덤 I/O가 개별적으로 발생함.😓 (1)번과 (2)번 과정은 얼마나 일어났는지 아래 쿼리로 확인하는것도 가능! 😮 SHOW..
-
[Real MySQL] 인덱스 (2) - B-Tree 인덱스✍️ 개인 스터디 기록 2022. 12. 12.
B-Tree 인덱스 제일 상단에 루트노드 부터 시작해서 제일 하단 리프노드 까지 인덱스 페이지별로 나뉘어져 있다. 인덱스로 정한 키값이 정렬된 상태로 되어있다는 점이 중요하다. 실제 데이터파일의 경우 정렬이 되어있지 않고 임의의 순서로 저장된다. 인덱스테이블에는 키값만 저장되어있기 때문에 나머지 컬럼 정보를 가져오기 위해서는 실제 데이터 파일에서 해당 레코드를 찾아와야한다. InnoDB 엔진에서는 세컨더리 인덱스에서 B-Tree 탐색이 2번 일어난다. InnoDB 엔진에서는 아래 그림처럼 리프노드에서 프라이머리 키가 실제 데이터의 주소값 역할을 하는데, 그렇기 때문에 리프노드에서 프라이머리 키를 찾았으면, 찾은 프라이머리 키로 실제 데이터를 찾기 위해 프라이머리 키 인덱스 B-Tree를 또 탐색하는 과정..
-
[Real MySQL] 인덱스 (1) - 인덱스란? 인덱스의 구분✍️ 개인 스터디 기록 2022. 12. 12.
1. 디스크 읽기방식을 고려하자 랜덤 I/O와 순차I/O 디스크 헤더를 많이 움직이는 랜덤 I/O는 비용이 순차I/O보다 비용이 크다. SSD를 사용하면 랜덤 I/O의 비용을 줄일 수 있지만, 그래도 순차 I/O에 비해서는 성능이 떨어진다. 데이터베이스의 대부분의 작업은 작은 데이터를 빈번히 읽고 쓰는 작업이 대부분이기 때문에 랜덤 I/O가 일어나는데 쿼리 튜닝이란 이러한 랜덤 I/O 자체를 줄여주는것에 목적이 있다고 볼수 있다.(꼭 필요한 데이터만 읽도록 하는것!) 2. 인덱스란? DBMS의 인덱스도 SortedList와 같이 항상 정렬된 상태를 유지한다. 즉 항상 정렬된 상태를 유지하기 위해 데이터가 저장될 때마다 항상 값을 정렬해야한다. 그렇기 때문에 인덱스란 데이터의 저장 성능을 희생하고 읽기 속..
-
모던 자바스크립트 Deep Dive 퀴즈 리스트✍️ 개인 스터디 기록 2022. 12. 2.
모던 자바스크립트 책을 읽고나서 개인적으로 각 챕터의 내용을 기억(🧠 )하기 위해 만들어본 퀴즈 리스트 입니다. 4장 변수 변수 호이스팅이란? var 키워드와 let 키워드의 차이점 let 키워드와 const 키워드의 차이 예약어란? 매니지드 언어와 언매니지드 언어의 차이 자바스크립트의 기본적인 네이밍 컨벤션에 대해 말해보세요 5장 표현식과 문 값과 리터럴이란? 표현식과 문의 차이점은? 표현식인지 문인지 확인하는 방법은? 6장 데이터 타입 자바스크립트 원시 타입 : 자바스크립트 객체 타입 : 자바스크립트 숫자타입은 형식으로 작동하고 그러므로 어떤걸 주의 해야 할까? “” VS ‘’ 어느게 더 일반적인 표기법일까? 탬플릿리터럴 문법에 대해 설명하세요 이스케이프 시퀀스란? null과 undefined의 차이..
-
[NodeJS] C10K Problem 과 NodeJS✍️ 개인 스터디 기록 2022. 11. 27.
C10K Problem 란? 하드웨어가 충분한데도 불구하고 10K만큼의 소켓을 열게 된다면 OS에서 제공하는 I/O 처리방식의 문제 때문에 프로세스가 제대로 처리하지 못한다 (10K가 한계란 뜻은 아니고 많다는 뜻) ⇒ 🧐 I/O 처리방식에 어떤 문제가 있길래 저만큼 소켓을 열지 못했던 걸까? 리눅스 select, poll 20세기말 리눅스 네트워크 I/O모델은 select()과 poll()이 전부였다. select은 클라이언트 1024개만 처리 가능했고, poll의 경우 제한은 없었다. 두 모델 모두 이벤트가 발생시 어떤 소켓에서 처리해야 할지 알 수 없어 소켓들을 모두 풀스캔해야하는 이슈가 있었고, 또한 가장 큰 fd 번호에 따라 처리 속도 이슈가 있었다. int select(int nfds, fd_..
-
[Node.js] 비동기와 Promise 이해하기✍️ 개인 스터디 기록 2022. 11. 27.
Node.js 에서 promise all을 사용하면 드라마틱한 성능 향상이 있을 수있다. const userList = [ { name: 'ethan', id: 1 }, { name: "david", id: 2 }, { name: 'john', id: 3 } ]; // 1초가 걸리는 쿼리 const getUserById = (id) => { return new Promise((resolve, reject) => { setTimeout(() => { const [user] = userList.filter(user => user.id === id) resolve(user) }, 1000) }) } // 2초가 걸리는 쿼리 const getAllUsers = () => { return new Promise((..