
트랜잭션 격리 수준 트랜잭션의 격리 수준(isolation level) 이란 여러 트랜잭션이 동시에 처리될 때 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할지 말지를 결정하는 것이다. 트랜잭션 격리 수준은 서로 다른 트랜잭션이 같은 데이터에 접근할때 데이터를 처리하는 방법과 관련이 있다. 격리 수준은 READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE 4가지로 나눌 수 있다. 격리 수준에 따라 발생할 수 있는 문제가 달라지는데, 이 문제는 Dirty Read, Non Repetable Read, Phantom Read 3가지가 있다. Dirty Read Non Repetable Read Phantom Rea..

1. Dependency Injection (의존성 주입)NestJS 에서 의존성 주입은 IoC Container 에 의해서 수행될 수 있다. 개발자는 직접 의존성을 주입하거나, 인스턴스를 생성하거나, 혹은 초기화할 필요가 없다.NestJS 의 Provider 또한 IoC Container 의 의존성 주입으로 사용할 수 있다. 의존성 주입을 하는 Provider 의 타입을 이 Provider 가 상속 받은 추상 클래스로 선언하고 싶었다.의존성 주입을 통해 의존할 대상을 내부에서 직접 생성하는게 아니라 외부로부터 전달 받을 수 있다. 내부에서 직접 의존할 대상을 생성하지 않게 되면서 런타임에 다양한 인스턴스를 외부에서 주입 받을 수 있다.예를 들어 아래와 같은 추상 클래스 Car 를 상속받은 Mercede..
query parameter 란 URL 의 경로 뒤에 키, 값(key, value) 의 목록이다. parameter 라고 부르기도 하며 경로 뒤에 ? 로 시작한다. 각 키와 값은 & 로 구분한다. 이 값에 배열을 담는 방법에 대해 정리하려고 한다. 문제 상황 Flutter 의 Dio 플러그인을 이용해서 query parameter 의 값에 배열을 담으려 했다. 배열의 요소가 2개 이상일 경우는 문제가 없었으나 1개일 때는 배열이 사라지고 그 안의 요소만 전송되는 현상이 발생했다. 예를 들어 localhost 의 8080 포트에 foo 경로로 { bar: [123] } 을 보내고 싶을때 Flutter 의 Dio 플러그인을 이용해서 아래와 같이 보낼 수 있다. try { List barIdx = [123];..

클러스터형 인덱스 & 비클러스터형 인덱스 클러스터 인덱스와 비클러스터 인덱스에 대해서 정리를 해보려고 한다. MySQL, SQL Server 관련 자료를 중심으로 작성했다. Page 클러스터형, 비클러스터형 인덱스는 B-tree 자료구조를 바탕으로 저장된다. B-tree 자료구조의 각 노드들은 페이지 단위로 관리된다. 페이지는 MySQL 의 경우 16KB 가 디폴트 크기다. MySQL 5.6 버전 이상부터는 페이지 크기를 innodb_page_size 변수 설정으로 변경할 수 있다. page 는 SQL Server 에서 데이터 저장의 가장 기본 단위다. MySQL 에서는 InnoDB 엔진이 디스크와 메모리 간의 데이터를 전달할 수 있는 최소 단위다. 디스크 저장공간은 file 에 할당되는데 file 은 ..

JavaScript engine 의 optimizing compiler 에 관해 정리를 해보려고 한다. 주요 내용은 구글 V8 팀 멤버의 발표를 기반으로 한다. JavaScript engine 이란 JavaScript engine 은 대표적으로 V8, SpiderMonkey, Chakra 등이 있다. 기본적으로 JavaScript engine 은 JavaScript 코드를 machine code 로 변환하는 역할을 한다. JIT dynamically typed 한 언어임에도 어떻게 그렇게 빠를 수 있을까? JIT(Just In Time) compilation 에 의해 가능하다. JIT compilation 을 통해 machine code 를 runtime 에 생성한다. AOT(Ahead Of Time) ..
type cast 는 한글로 '형 변환'으로 해석할 수 있다. 위키백과에 따르면 형변환을 암시적 형변환과 명시적 형변환으로 나눌 수 있는데, 이번 글에서는 명시적 형변환을 다룬다. 그리고 명시적 형변환 중에서도 List 에 대한 형변환을 다루고자 한다. 서버로부터 응답 받기 getFoo 함수는 서버에서 데이터를 받아오는 역할을 하고 dio 플러그인을 사용해서 요청을 보낸다. Flutter 에서 dio 플러그인을 이용해 결과를 받으면 Response 타입으로 받게되고 Response 클래스 안에는 다양한 속성들이 있다. 서버에서 보낸 내용을 확인하려면 이 중 data 키로 접근할 수 있다. Future getFoo() { Dio dio = Dio(); try { Response result = await ..
getMany vs getRawManyThere are two types of results you can get using select query builder: entities and raw results. Most of the time, you need to select real entities from your database, for example, users. For this purpose, you use getOne and getMany. However, sometimes you need to select specific data, like the sum of all user photos. Such data is not an entity, it's called raw data. To get ..
변수 생성 3단계 1. 선언 단계 실행 컨텍스트에 변수를 등록한다. 변수 선언문을 의미하는게 아니다. 2. 초기화 단계 실행 컨텍스트에 등록된 변수를 메모리에 할당한다. var, let 의 경우 이 단계에서 변수에 undefined 가 할당된다. var 의 경우 변수 선언 단계에서 초기화가 이루어진다. 선언 단계와 초기화 단계가 동시에 발생한다. let 의 경우 변수 선언문에서 초기화가 이루어진다. 선언 단계와 초기화 단계가 따로 발생한다. 3. 할당 단계 변수 선언문에 작성한 값을 변수에 할당한다. 변수 선언문과 변수 할당문 // 변수 선언문 var a; let b; // 변수 할당문 a = 1; b = 1; // 변수 선언문과 할당문이 함께 존재 const c = 1; TDZ 스코프의 시작 지점부터 ..