JavaScript
[Javascript] 자바스크립트 이벤트루프
이벤트 루프는 호출 스택이 비워질 때마다 큐에서 콜백 함수를 꺼내와서 실행하는 역할을 해 준다. ECMA에는 이벤트 루프가 없다 자바스크립트의 표준을 관장하는 ECMA에는 이벤트루프에대한 언급이 없다고 합니다. 그이유는 자바스크립트의 특징인 다양한 런타임때문이라고 합니다. 자바스크릅티는 태생이 웹브라우저환경에서 작동하는언어이기에 웹브라우저 별로 런타임이 상이합니다. 이벤트루프는 이런타임환경과 관련이 있기에 단순히 언어로만 바라보는것이 아니라서 그런것 같습니다. 자바스크립트는 싱글스레드 언어가 아니다 실제 자바스크립트가 구동되는 환경(브라우저, Node.js등)에서는 주로 여러 개의 스레드가 사용되며, 이러한 구동 환경이 단일 호출 스택을 사용하는 자바 스크립트 엔진과 상호 연동하기 위해 사용하는 장치가 ..
[Javascript] async & await 비동기처리
Async & Await ES7에 추가된 비동기처리를 위한 문법입니다. await은 영어그대로 비동기함수가 처리될때까지 기다리게 됩니다. 하지만 실제론 기다리는며 CPU를 낭비하는것이 아닌 다른일을 처리하게됩니다. Async async는 함수 앞에 위치하게 됩니다. 익명함수를 사용하는 경우 () 앞에 위치하게 됩니다. async fucntion a(){ } const a = async()=>{ } async를 붙이면 해당 함수는 항상 프라미스를 반환합니다. 프라미스가 아닌 값을 반환하더라도 이행 상태의 프라미스(resolved promise)로 값을 감싸 이행된 프라미스가 반환되도록 합니다 클래스의 메서드에도 당연히 사용이 가능합니다. ** async가 붙은 함수는 반드시 프라미스를 반환하고, 프라미스가..
[JavaScript] Promise & async / await 자바스크립트 비동기처리
프로미스란? 자바스크립트는 ES6 이전에 비동기 처리를 위한 하나의 패턴으로 콜백 함수를 사용한다. ES6에 전통적인 콜백 패턴이 가진 단점을 보완하며 비동기 처리 시점을 명확하게 표현할 수 있는 새로운 패턴이 프로미스이다. 콜백패턴의 단점 콜백헬(코드가독성 저하) 기본적으로 비동기함수의 리턴값을 사용하여 다음함수를 실행시키기위해선 아래와 같은 콜백함수를 사용하여 후처리를 한다. 지속적으로 비동기함수의 리턴값을 사용하게 되면 아래와 같은 콜백헬이 발생하게 된다. 예외처리의 한계 위와 같은 코드에서는 예외가 잡히지 않는다고 한다. 그이유로는 자바스크립트의 이벤트루프와 이어지는데 1.비동기함수가 스택에 쌓이고 나오면서 외부 API에서 함수처리 2.외부 API에서 함수를 태스크큐에 넣은 후 스택이 비워진후 스..
[JavaScript] 실행 컨텍스트
어려운 내용이라 두서없이 서술되어있습니다. 실행할 코드에 제공할 환경 정보들을 모아놓은 객체 최초 시동시 콜스택에 전역컨텍스트가 쌓이며 그이후 함수를 호출할때마다 해당 컨텍스트가 콜스택에 쌓이는 형태 종류 VariableEnvironment: 현재 컨텍스트 내의 식별자들에 대한 정보 + 외부 환경 정보. 선언 시점의 LexicalEnvironment의 스냅샷snapshot으로, 변경 사항은 반영되지 않음. LexicalEnvironment: 처음에는 VariableEnvironment와 같지만 변경 사항이 실시간으로 반영됨. ThisBinding: this 식별자가 바라봐야 할 대상 객체. 정리 먼저하기 실행 컨텍 스트는 전역 공간에서 자동으로 생성되는 전역 컨텍스트와 eval 및 함수 실행에 의한 컨 ..
[fake-trip]TypeORM 1:1관계 조회 쿼리 한번으로 줄이기(findOne)
프로젝트 진행중 TypeORM의 orm 을 사용하여 유저데이터를 조회할때 불필요하게 쿼리가 두번날라가는 현상을 발견하였습니다. users 테이블 users 와 social_platform은 1:1 관계를 형성합니다. 원본 코드 return await this.findOne({ where: { userSocialPlatform: { pk:'카카오서버의 pk값', type:'kakao_talk' } }, relations: ['userSocialPlatform'], }); 카카오 소셜로그인시 받아온 카카오측DB의 id(pk)값과 type을 기반으로 유저데이터를 조회합니다. 이때 발견한 문제는 쿼리가 불필요하게 두번나간다. 입니다. 조회시 사용된 쿼리문 console.log query: SELECT DISTI..
[패러다임]함수형 프로그래밍(Functional Programming)
함수혐 프로그래밍이란? 선언형 프로그래밍의 일종 자료처리를 수학적 함수의 계산으로 표현하려 한다(순수함수로 풀어낸다) 함수는 1급객체여야 한다. 변경 가능한 상태를 불변상태(Immutab)로 만들어 SideEffect를 없애자라는 특징이있다. 함수형 프로그래밍 특징, 단어사전 순수함수 동일한 입력에는 항상 같은 값을 반환해야 하는 함수 side-effects를 가지지 않는다. - 함수의 실행이 외부에 영향을 끼치지 않는 함수 순수하지 않은함수 외부 변수를 참조하는경우 const b = 10 function add(a){ return a + b } console.log(add(10)) 외부 변수를 참조하며 외부변수 값을 변경까지 하는경우 let b = 10 function add(a){ return b +..