시퀄라이즈를 이용해 도메인 모델을 조회할때 매핑된 유저모델을 함께 가지고오려고 했는데 해당 오류가 발생했다.API서버에 유저가 도메인을 등록하면 API서버는 토큰을 발급해주는 기능으로 유저는 여러개의 도메인을 보유할 수 있고 하나의 도메인은 하나의 유저만 소유할 수 있게 해 일대다 관계로 매핑이 되어있었다.`models/user.js`// models/user.jsconst Sequelize = require("sequelize");class User extends Sequelize.Model { static initiate(sequelize) { User.init( { email: { type: Sequelize.STRING(40), allo..
var 키워드로 선언한 변수의 문제점① 변수 중복 선언 허용`var` 키워드로 선언한 변수는 중복 선언이 가능하다.var x = 1;var y = 1;var x = 100;var y;console.log(x) // 100console.log(y) // 1`var` 키워드로 선언한 변수를 중복 선언하면 초기화문 유무에 따라 다르게 동작한다.초기화문이 있는 변수 선언문은 자바스크립트 엔진에 의해 `var` 키워드가 없는 것처럼 동작한다.초기화문이 없는 변수 선언문은 무시된다 -> 에러는 발생하지 않는다.② 함수 레벨 스코프`var` 키워드로 선언한 변수는 오로지 함수의 코드 블록만을 지역 스코프로 인정한다.함수 외부에서 `var` 키워드로 선언한 변수는 코드 블록 내에서 선언해도 모두 전역 변수가 된다.③ ..
PassportPassport 모듈은 이름 그대로 우리의 서비스를 사용할 수 있게 해주는 여권 같은 역할을 하는 모듈다.회원 가입과 로그인을 직접 구현할 수도 있지만, 세션과 쿠키 처리 등 복작한 작업을 Passport 모듈이 대신 해준다. Passposrt를 사용해 구글, 페이스북, 카카오톡 같은 기존으 SNS 계정으로 로그인할 수도 있다. Passport는 다양한 인증방식을 전략(Strategy)이라는 플러인을 제공한다. Passport 개념전략 (Strategy)인증로직을 담당하며, 다양한 인증 방식을 구현하기 위해 사용한다.`passport-local`: 이메일/비밀번호 기반 인증`passport-kakao`: 카카오 인증`passport-jwt`: JWT 토큰 기반 인증serializeUser ..
자바스크립트로 엑셀 파일을 생성하거나 수정하는데 자주 사용되는 npm 패키지들이 있습니다. 세 패키지에 대해 알아보고 어느 상황에서 어떤 라이브러리를 쓰면 좋을지 정리해 보겠습니다.sheetJSExcelJSxlsx-populate SheetJS가장 대표적으로 많이 사용되는 라이브러리입니다. 주로 쓰거나 읽기 작업에 사용되는 라이브러리입니다. 가볍고 빠르기 때문에 간단한 작업을 하거나 브라우저를 사용할때 이용하면 좋습니다. ExcelJSSheetJS에 비해 스타일 지정, 차트, 머지 등 엑셀의 레이아웃 요소를 조작할 수 있는 고급 기능들을 더 제공합니다. 데이터 시각화와 포맷 중심의 엑셀 작업에서 주로 활용됩니다. xlsx-populate 엑셀 문서 조작에 초점을 맞춘 라이브러리입니다. 기존 엑셀 파일을 ..
변수의 생명 주기변수는 생성되고 소멸되는 생명주기가 있다.변수는 자신이 선언된 위치에서 생성되고 소멸한다.전역 변수의 생명주기는 애플리케이션의 생명주기와 같다.함수 내부에서 선언된 지역 변수는 함수가 호출되면 생성되고 함수가 종료하면 소멸한다.-> 변수 선언은 런타임에 실행되는 것이 아니라 런타임 이전 단계에서 자바스크립트 엔진에 의해 먼저 실행된다는 말은 전역 변수에 한정된 것이다.-> 지역 변수의 생명 기는 함수의 생명주기와 일치한다.함수 몸체 내부에서 선언된 지역 변수의 생명주기는 함수의 생명주기와 대부분 일치하지만 지역 변수가 함수보다 오래 생존하는 경우도 있다.변수의 생명 주기는 메모리 공간이 확보된 시점부터 메모리 공간이 확보된 시점부터 메모리 공간이 해제되어 가용 메모리 풀에 반환되는 시점까..
스코프란?모든 식별자(변수 이름, 함수 이름, 클래스 이름 등)는 자신이 선언된 위치에 의해 다른 코드가 식별자 자신을 참조할 수 있는 유효범위가 결정된다. 이 유효범위를 스코프라고 한다.스코프는 식별자가 유요한 범위를 말한다.var x = 'global';function foo() { var x = 'local'; console.log(x);}foo(); // localconsole.log(x); // global-> 자바스크립트 엔진은 이름이 같은 두 개의 변수 중에서 어떤 변수를 참조해야할 것인지를 결정해야한다. 이를 식별자 결정이라 한다.-> 자바스크립트 엔진은 스코프를 통해 어떤 변수를 참조해야 할 것인지 결정한다.-> 스코프란 자바스크립트 엔진이 식별자를 검색할 때 사용하는 규칙이라고도 할 수..
랜덤 I/O와 순차 I/O랜덤 I/O: 데이터가 디스크의 물리적인 위치에서 분산되어 있거나 데이터 접근이 예측 할 수 없는 순서로 이루어지는 입출력 작업을 말합니다.순차 I/O: 데이터가 디스크의 연속된 물리적인 위치에 저장되어 있거나, 순서대로 접근되는 입출력 작업을 말합니다.HDD와 SSD의 랜덤I/O와 순차 I/O순차 I/O: 데이터가 연속적으로 저장되어 있기 때문에 HDD와 SSD에서 모두 순차 I/O의 성능 차이가 크지 않습니다.랜덤 I/O: HDD의 경우, 분산된 데이터 하나씩 읽을 때마다 디스크 헤드를 물리적으로 움직여야 하므로 성능이 떨어집니다. SSD는 기계적인 움직임이 없기 때문에 랜덤 I/O에서 상대적으로 높은 성능을 유지할 수 있습니다.인덱스HDD나 SSD 저장장치는 순차 I/O가 ..
함수함수는 일련의 과정을 문으로 구현하고 코드 블록으로 감싸서 하나의 실행 단위로 정의한 것이다함수는 입력을 받아서 출력을 내보낸다함수 내부로 입력을 전달받은 변수를 매개변수(파라미타:parameter)입력을 인수(아규먼트:argument)출력을 반환값이라고 한다함수는 값이다 함수는 함수정의를 통해 생성한다함수는 정의만으로 실행되는 것이 아니다인수를 매개변수를 통해 함수에 전달하면서 함수의 실행을 명시적으로 지시해아한다 → 함수호출함수 호출을하면 코드블록에 담긴 문들이 일괄적으로 실행되고 실행결과(반환값)을 반환한다//함수 호출var result = add(2, 5);//함수 add에 인수 2, 5를 전달하면서 호출하면 반환값 7을 반환한다console.log(result); 함수를 사용하는 이유① 코드..