본문 바로가기

전체 글65

[AWS] SAM Local, CodeStar를 사용해 Lambda 로컬테스트 및 자동배포환경 만들기 본인 및 협업할 멤버는 이미 AWS 가입이 되어 있고, AWS Management Console Access 권한이 있다고 가정한다. 준비물 AWS 계정 및 콘솔 액세스 권한 Docker Homebrew Sourcetree(선택) aws-sam-cli 우선 aws-sam-cli 설치가 필요한데, npm package는 deprecated 되었으므로 Homebrew로 설치한다. $ brew tap aws/tap $ brew install aws-sam-cli $ sam —v // 설치 확인 혹시.. 버전 확인을 했을때 최신 버전을 설치했는데도 아래와 같은 알림이 뜬다면 moro-test-lambda-API ateam$ sam --version A newer version of the AWS SAM CLI .. 2020. 4. 9.
package-lock.json의 역할과 커밋해야 하는 이유 npm install시 자동으로 생기는 package-lock.json이 대체 무슨 역할인지 알아보자. package.json은 이 프로젝트 패키지의 정보들을 담고 있다. 이름, 버전 등을 포함하고 있는데, 의존성 모듈 정보도 가지고 있다. { "name": "myApp", ... "dependencies": { "express": "^4.16.4", ... } } dependencies에는 이 패키지 실행에 필요한 다른 모듈들의 이름과 버전 정보가 명시되어 있다. 그래서 다른 사람이 내 코드를 다운받아 실행하더라도, npm install만 실행하면 내가 설치했던 의존 모듈들이 함께 설치된다. 하지만, 여기엔 문제가 몇가지 있다. 첫번째 문제는, 명시된 모듈이 다른 버전으로 설치될 수 있다는 것이다. d.. 2020. 4. 3.
[Javascript] 이벤트루프와 호출 스택(call stack), 비동기성 자바스크립트의 큰 특징으로 비동기성과 싱글스레드, Non-blocking IO가 있다. 비동기성은 알겠고, 논 블로킹 IO도 비동기성에서 오는 특징이라는건 알겠는데, 비동기성은 어떻게 동작하는 것일까? 그것도 싱글스레드라면, 한번에 한 동작밖에 못하는게 아닌지? 우선 동기성과 비동기성은 간단히 그림으로 살펴보자. 한 동작을 수행하다가 다른 동작이 필요한 경우, 동기 : 응답이 반환될때까지 하던 일을 멈추고 기다린다. 비동기 : 응답을 기다리느라 하던 일을 멈추지 않는다. 여기서 언뜻 들었던 의문이 있다. 하던 일을 멈추지 않는다 = 여러 일을 동시에 한다 => 싱글스레드인데? 이 부분은 자바스크립트의 동작 원리, 특히 이벤트루프와 호출스택을 이해해야 한다. 호출 스택(call stack) 자바스크립트는 .. 2020. 4. 3.
[Javascript] for, setTimeout 퀴즈 아래와 같은 코드의 출력이 어떻게 될까? for (var i = 0 ; i < 3 ; i++) { setTimeout(() => { console.log(i) }, 1000) } 난 보고.. 1초 있다가 1, 또 1초 있다가 2, 또 1초있다가 3 찍힐거라고 생각했다. 정답은 1초 후 거의 동시에 3이 3번 찍힌다. 정답을 보고서, 아.. for문이 너무 빨리 돌아서 그렇구나? 1초안에 3번 도는게 끝나서 3이 세번 찍히는구나 했다. 그리고 await가 걸린것도 아니니 당연히 각 setTimeout은 거의 동시에 실행되니까, 그래서 거의 동시에 찍히는거구나 했다. (이건 당연한건데 왜 생각을 못했을까?) 그러면 for문 반복횟수를 늘리고, setTimeout 시간을 줄이면 다른 숫자도 찍히겠구나? for.. 2020. 3. 31.
[Javascript] map vs filter vs reduce for문 대신 map을 사용할 수 있다. const people = [ { name: 'effy', age: 13}, { name: 'kim', age: 7}, { name: 'cathy', age: 21}, { name: 'moro', age: 28}, { name: 'jamonda', age: 32} ] // for let names1 = []; for (const person of people) { names1.push(person.name); } console.log(names1); // map const names2 = people.map((person) => person.name) console.log(names2); names1과 names2는 같다. 값 반환에 조건이 필요한 경우 filte.. 2020. 2. 11.
[Javascript] 제너레이터 제너레이터는 다음과 같이 선언하고 사용할 수 있다. function *generator() { yield 1; yield 2; yield 3; } let a = generator(); a.next(); >> {value: 1, done: false} a.next(); >> {value: 2, done: false} a.next(); >> {value: 3, done: false} a.next(); >> {value: undefined, done: true} for (const item of generator()) console.log(item); // 이렇게 순회도 가능하다. 만약 리턴값이 있는 경우, function *generator() { yield 1; yield 2; yield 3; return.. 2020. 2. 9.
[Javascript] List/Set/ Map 순회하기 기본적으로 리스트를 순회하는 방법은 이렇다. const list = [1, 2, 3]; for (var i = 0 ; i < list.length ; i++){ console.log(list[i]); } index를 쓰지 않고 of를 사용할 수도 있다. const list = [1,2,3] for(const item of list){ console.log(item); } for (const a of arr) console.log(a); // inline으로 쓸 수도 있다. [대괄호]로 선언해서 배열을 만들 수도 있지만, Set이나 Map으로 순회가능한 객체를 만들수도 있다. const set = new Set([1,2,3]); const map = new Map([['a', 1],['b', 2],['c'.. 2020. 2. 9.
[Javascript] 함수와 일급객체, 고차함수와 클로저 일급객체란? 1) 값으로 사용될 수 있고 2) 변수에 할당할 수 있고 3) 함수의 리턴값으로 사용할 수 있고 4) 함수의 인자로 전달할 수 있는 객체를 말한다. javascript에서 함수는 일급객체이다. 따라서 1) 함수를 값으로 사용할 수 있고 2) 함수를 변수에 할당할 수 있고 3) 함수의 리턴값으로 함수를 사용할 수 있고 4) 함수의 인자로도 함수를 전달할 수 있다. 고차함수 함수를 값으로 다룰 수 있다는 의미는 고차함수를 사용할 수 있다는 의미이기도 하다. 고차함수란 함수가 함수를 인자로 받는 것을 말한다. const test = f ⇒ f(1); /** * 익명함수(f => f(1))를 test 변수에 할당했다. * 함수의 인자로 함수를 전달했다(f) * 이 함수는 함수를 인자로 받아 1을 인.. 2020. 2. 6.
Error: listen EADDRINUSE: address already in use :::3001 Error: listen EADDRINUSE: address already in use :::3001 서버를 띄웠을때 이런 에러 메시지가 뜨면, 같은 포트에 종료안한 서버가 띄워져있어서 그런 것이다. 포트를 바꾸거나 터미널에서 찾아서 kill 하면 된다. $ lsof -wni tcp:3001 // 현재 3001 포트에 실행중인 내용을 보여준다. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME node 16426 effy 22u IPv6 - 0t0 TCP *:redwood-broker (LISTEN) $ kill 16426 // kill [PID] 명령어 설명 lsof(LiSt Open Files) : 현재 시스템에 열려있는 파일, 그 파일을 사용중인 프로세스 목.. 2020. 2. 5.