1. 풀어쓰기 Read Uncommitted 한 읽기 트랜잭션이 시작했을때 다른 트랜잭션은 자유롭게 UPDATE 가능하다. 한 읽기 트랜잭션은 다른 트랜잭션에서 Update 중(un-commit)인 데이터를 조회할 수 있다. => 다른 트랜잭션이 중간에 롤백을 해도 읽기 트랜잭션은 롤백 전 데이터를 조회할 수 있는다. => 다른 트랜잭션의 Update(커밋)과 무관하게 일관된 데이터를 얻을 수 없는 확률이 높다. => Dirty Read Read Committed 한 읽기 트랜잭션이 시작했을때 다른 트랜잭션은 자유롭게 UPDATE 가능하다. 한 읽기 트랜잭션은 다른 트랜잭션에서 Update 완료(commit)된 데이터만 조회할 수 있다. => Dirty Read는 발생할 수 없다. 위 고립수준보다는 일관..
프로그래밍에 가장 기본이 되는 동기(synchronous)와 비동기(Asynchronous)를 쉽게 설명해보려고 한다. 왜 동기라는 용어는 혼란스러운가? 'synchronous' is existing or occurring at the same time. - Google Dictionary 동기(synchronous)는 영단어 직역을 하면 '동시에 발생하는 방식'이라고 한다. 이게 혹시 함수가 동시에 실행된다는 건가? 그럼 비동기 개념 아닌가? 하며 혼란에 빠질 수 있다. 하지만 조금씩 비슷한 의미를 따라가다 보면 충분히 이해할 수도 있어 보인다. 여기서 '동시에 발생하는 방식'으로 딱 한번 실행하는 상황을 가정하는 것보단, '동시에 발생하는 방식'이 연속적으로 실행하는 상황을 가정하면 전개가 좀 용이하..
이 다큐영화가 나온다는 소식을 접하고 꼭 봐야겠다 생각했다. 개봉(2021-10-14)하였다는 소식에 상영관을 찾았지만 시간과 장소의 제약이 컸다. 시간이 많이 지나서 우연히 넷플릭스 추천영화를 검색하던 도중 '타다 : 대한민국 스타트업의 초상'이 넷플릭스에 있다는 것을 확인하고 1초의 망설임도 없이 영화를 시청했다. 법인카드를 활용하여 타다를 탈 기회에 몇 번 있었다. 프리미엄 택시인가보다 하고 탔는데 넓고 쾌적해 사용감은 좋았다. 왜 타다는 모두 카니발인가? 그리고 왜 어느 순간 타다는 사라졌는가? 에 대한 물음도 없이 그냥 그렇게 나의 경험 속에서 사라졌었다. 시간이 지나고 문득 기사 속에서 '타다금지법'이라는 키워드를 만나긴 했지만 많은 모빌리티 스타트업들과 택시 간의 다툼이 잦았기때문에 그런 것..
내가 직접 만든 테이블은 아니지만 postgreSQL에 내장되어있는 테이블이 존재한다. 실제로 잘 활용하는 쿼리를 사례와 함께 적어보려고 한다. 테이블 인덱스 확인 실행계획을 볼 때 인덱스를 아예 타고 있지 않거나 잘못된 인덱스를 타고 있음을 확인할 수 있다. 이 떄 보통 테이블에 어떤 인덱스가 있는지를 보고 의도하는 인덱스를 탈 수 있게 쿼리를 튜닝해준다. SELECT * FROM pg_indexes WHERE tablename = '소문자 테이블 명'; 현재 테이블별 전체 카운트 확인 테이블 별로 전체 카운트를 수시로 확인하면 얼마나 데이터 성장세가 가파른지, 어떻게 인프라를 대비해야하는지, 어떻게 데이터를 관리하는게 더 효율적인지 고민해볼 수 있다. 테이블별로 count 쿼리를 직접 때려도 되지만 ..
※ 대부분에 언어에 해당될 수 있는 내용이지만, javascipt 언어에 가장 적합한 글입니다. 꼭 , 을 써야만 조건문인 것은 아니다. JSON 객체를 활용해서도 조건문을 만들 수 있다. function getFruitByName(name) { if (name === 'apple') { return '🍎' } else if (name === 'banana') { return '🍌'; } else if (name === 'kiwi') { return '🥝'; } else if (name === 'lemon') { return '🍋'; } else { return ''; } } 위의 조건문을 으로 바꿔보자. function getFruitByName(name) { switch (name) { case 'a..
Javascript는 ES 모듈 시스템을 공식 모듈 시스템으로 사용하고 있고, Node.js는 CommonJs 모듈 시스템을 표준 시스템으로 사용하고 있다. //CommonJs const gulp = require('gulp'); const babel = require('gulp-babel'); //ESModule import gulp from 'gulp'; import babel from 'gulp-babel'; Node.js 에서 ES모듈 시스템을 활용하려면 Babel이라는 별도의 도구가 필요했는데, Node.js 13.2 버전(2019-11-21) 부터 손쉽게 ES모듈을 활용할 수 있게 되었다. package.json 파일에 type 항목을 module로 설정하면 바로 활용 가능하다. { //.....
/** * Q. 자연수 n을 이진법으로 변환했을 때 나오는 1의 개수를 k라고 했을 때, * n보다 작은 자연수 중에서 이진법으로 변환하여 * 1의 개수가 k인 수가 몇 개 있는지를 return 하도록 solution 함수를 완성해 주세요. */ 이 코딩 문제를 효율적으로 풀기 위해 직감적으로 Combination(조합)이 필요하다고 느꼈다. (확률과 통계에서 배운 개념들이 스르륵 스쳐갔다.) 정확히는 이항계수를 구해야하는데 이항계수란 다음과 같다. 위의 이항계수를 코드로 구현해보자. 크게 어려울 것은 없다. //10 C 2 => getCombinationsCount(10, 2) function getCombinationsCount(총원소수, 선택원소수) { const 곱셈 = (a, b) => a * ..
※ 대부분에 언어에 해당될 수 있는 내용이지만, javascipt 언어에 가장 적합한 글입니다. 복잡한 조건문을 작성하다보면, 무언가 잘못 분기하고 있다고 느낄 때가 있다. 이 부분은 애매하지만 매우 중요한 부분이라 생각되어 어떻게든 글로 풀어써보려고 한다. 정답이 있는 문제라기보단 앞서, 왜 좋은 조건문(IF) 을 작성해야할까? 라는 질문에 나는 '서로의 조건 로직을 잘 이해해 서비스를 잘 디벨롭하기 위해서'라고 답하고 싶다. 라고 포스팅했기에, 아래의 시나리오를 팀원들과 같이 읽어보며 좋은 조건문에 대해서 고민해보면 좋을 것 같다. 상황1 . 과일의 이름에 따라 적용가능한 색깔들(배열)을 가져오는 함수를 만드려는데 조건문을 어떻게 만들지 고민이다. function availableColorsByFru..