Closure(클로저)는두 개의 함수로 만들어진 환경으로 이루어진 특별한 객체의 한 종류이다. 여기서환경이라 함은 클로저가 생성될 때 그범위에 있던 여러 지역 변수들이 포함된context를 말한다. 이 클로저를 통해서 자바스크립트에는 없는 비공개(private) 속성/메소드, 공개 속성/메소드를 구현할 수 있는 방안을 마련할 수 있다. 클로저 생성하기 다음은 클로저가 생성되는 조건이다. 내부 함수가 익명 함수로 되어 외부 함수의 반환값으로 사용된다. 내부 함수는 외부 함수의 실행 환경(execution environment)에서 실행된다. 내부 함수에서 사용되는 변수 x 는 외부 함수의 변수 스코프에 있다. function outer() { var name = `closure`; function inne..
ssh로 서버로 접근 할 때 보통 ID/PW 방식을 많이 사용한다. 하지만 요즘은 ID/PW보다 좀더 보안에 좋은 key를 이용한다. AWS의 경우에는 기본적으로 서버에 접근하기 위해서 ssh key 를 사용하는데 서버를 private network에 두게 되면 VPN을 이용해서 AWS VPC 내부로 접속을 하거나 별도의 베스천 서버를 두어서 연결을 해야 한다. AWS VPC를 VPN으로 연결하였다면 굳이 ssh-agent를 이용하지 않아도 된다. 하지만 베스천 서버와 같이 중간 다리 역활을 하는 서버를 거쳐서 내부 서버에 접근 해야 한다면 내부 서버에 접근하기 위한 키를 어떻게 해야 할지 고민일 것이다. 베스천서버에 키를 둔다면 베스천서버에 접근 가능한 모든 사람들은 내부 private network ..
JavaScript 라는 언어의 특성을 가장 잘 보여주는 특성 중 하나이기에 정리. Hoisting 이란? hoist 라는 단어의 사전적 정의는 끌어올리기 라는 뜻이다. 자바스크립트에서 끌어올려지는 것은 변수이다. var keyword 로 선언된 모든 변수 선언은 호이스트 된다. 호이스트란 변수의 정의가 그 범위에 따라 선언과 할당으로 분리되는 것을 의미한다. 즉, 변수가 함수 내에서 정의되었을 경우, 선언이 함수의 최상위로, 함수 바깥에서 정의되었을 경우, 전역 컨텍스트의 최상위로 변경이 된다. 우선, 선언(Declaration)과 할당(Assignment)을 이해해야 한다. 끌어올려지는 것은 선언이다. function getX() { console.log(x); // undefined var x = ..
Promise.all async-await 사용의 편리함으로 인하여 병렬로 실행해도 되는 상황에서도 순차적으로 처리하는 경우가 많다. 순차가 필요하지 않은 상황에서 병렬로 처리해보자 아래는 처리가 1초가 필요한 promise 이다. 이 코드를 실행하면 3초가 걸린다. const sleep = (num = 1) => { return new Promise((resolve) => { setTimeout(() => { console.log(`${num} called`); resolve() }, 1000); }); }; const runPromise = async () => { for (let i = 0; i < 3; i++) { await sleep(i + 1); } }; console.time('run..
zsh 를 사용하다보면 터미널에 컴퓨터 이름과 사용자이름이 함께 나와 너무 길거나 엣지가 없습니다. 그래서 아예 숨기거나 수정하여 사용합니다. .zshrc 파일을 열어서 아래와 같이 추가하여 저장하고 iTerm을 새로 열면 적용된다. 사용자 이름을 숨기고 싶을 때 DEFAULT_USER="mac 사용자 이름" 사용자 이름을 변경하고 싶을 때 prompt_context() { prompt_segment black default "{하고싶은이름}" }
