Promise all
Promise.all() 은 여러 개의 프로미스(Promise) 를 비동기적으로 실행한다. 따라서 여러 개의 Promise 처리를 비동기적으로 실행하고자 할 때, 사용할 수 있다.
await aFuncetion();
await bFuncetion();
await cFuncetion();
다음과 같이 실행순서에 상관없는 경우 비동기로 실행할 때 Promise.all을 사용하면 성능이 더 올라간다.
위에같은 코드에서 Promise.all을 사용하지 않는다면 실행시간은 (a+b+c) 순서대로 실행되어 실행시간이 정해지지만.
Promisea.all을 사용한다면 (a,b,c)중에서 가장 오래걸리는 함수의 시간이 실행시간으로 됩니다
객체할당
자바와 다르게 자바스크립트에서는 타입스크립트를 사용한다고해도 다음과 같은 코드를 많이 사용한다.
안그러면 코드가 매우 길어진다. 그래서 꼭 속성이나 변수에 함수를 넣어서도 많이 사용한다 특히 export모듈에서 그런거 같다.
const someObject = {
data: 'some data',
hello: 'hello world'
};
const { data, hello } = someObject;
console.log(data); // 'some data'
console.log(hello); // 'hello world'
노드엔진
스프링에서 공부할때는 노드나 스프링 프레임워크에 대해 깊게 공부했는데 노드에서는 그런 느낌이 아닌거같은게 강했다.
깊게공부하려면 Node.js디자인 패턴 바이블을 읽어야하는데 Node가 추구하는것은 그런게 아닌거 같다.
노드에서 알아야하는것은 V8엔진과 libuv가 핵심이다. 둘다 C++로 만들어졌다는게 핵심인거 같다.
더 중요한 키워드는 이벤트 루프
몽고디비 - TMI
인덱스는 쿼리를 더 효과적으로 수행할 수 있게 도와주는 기능입니다
그런데 RDB의 mysql의 인덱스들도 다양한게 있지만, MongoDB에서만 있었던게 TTL인덱스입니다.
TTL인덱스는 데이터를 캐시해서 저장할 수 있습니다. 만약 스케줄러를 통해서 데이터를 지워주는 작업을 하는경우에 저는 MongoDB를 이용해서 어플리케이션이 아닌 데이터베이스 자체적특성을 이용해서 서비스의 영향이 가지않도록 설계한적이 있습니다.
또한 Redis나 Memcahce와 같이 인메모리는 아닌 MongoDB를 사용해야하는 경우에 유용할 것 같습니다.
Mongoose 알게된 점
몽구스를 처음 사용해봤습니다. 그런데 제가 의문이 들었던 점은
// 스키마 객체
const personSchema = new Schema({
name: String,
age: Number,
email: {type: String, required: true},
});
// 스키마 객체를 가지고 모델 객체 생성
module.exports = mongoose.model('Person', personSchema);
다음과 같이 객체를 Person으로 생성했는데
컬렉션이 people로 생기는것이었습니다. 그래서 알아보니 컬렉션 이름이 people인 이뉴는 Mongoose에서 모델 이름의 복수형을 자동으로 만들기 때문이었습니다. Person의 복수형인 people이 되어 people컬렉션이 생성된 것입니다.
만약 명시적으로 컬렉션 이름을 지정하고 싶다면 세 번째 매개변수로 컬렉션 이름을 지정할 수 있습니다
mongoose.model('Person', personSchema, 'myPeopleCollection');
require, import 차이
nest에서는 import인데 node에서는 require를 사용해서 왜 이런가 궁금했습니다. 찾아본 결과
require와 import는 모듈 키워드로 외부 파일이나 라이브러리를 불러올 때 사용합니다. require는 NodeJS에서 사용되고 있는 CommonJS의 키워드이고, import는 ES2015에서 새롭게 도입된 키워드입니다.
import는 java와 python과 비슷하다. 오히려 이게 더 익숙했다 그리고 더 편리하다
그 외 글들은 주제가 커서 따로 정리할려고합니다
- 3tier 아키텍처와 레이어드 아키텍처와 mvc패턴
- 패키지랑
- 이벤트 루프