![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cBAaEB/btqCrOp4t6p/05IitpJQmmorL8AvuHOCk1/img.jpg)
Stack, Queue, linked List 같은 자료구조들은 순차(Sequential) 자료구조다. 집합(Set)은 정렬되지 않은(unordered)컬렉션으로 원소는 반복되지 않는다.(중복허용 x) ES6에서 Set이 추가되었다. Set을 한번 직접 만들어보고 필요한 기능도 추가해보자. this.items는 원소가 들어갈 객체, this.index는 원소가 들어갈 다음위치(마지막index + 1). class Set{ constructor() { this.items = {}; this.index = 0; } } has메서드는 해당 value값을 가지고 있는지 여부 판단 has(value) { let keys = Object.keys(this.items); for (let i in keys) { if ..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bjqZRK/btqCuZRyq8R/DuW1Cte6rXFeO0yx02nrx1/img.png)
보통 node.js프로세스는 cpu코어 하나를 사용한다. 멀티코어 cpu를 사용하고 있을 경우 node.js는 여러 개의 cpu코어를 사용할 수 있게 해주는데 그럴 때 사용하는 것이 cluster이다. cluster모듈은 코어 하나당 노드 프로세스를 돌아가게 할 수 있다. cluster 자신의 PC의 cpu 코어개수 확인. const numCPUs = require('os').cpus().length; console.log(numCPUs); // 4 cluster에는 master 프로세스와 worker 프로세스가 있다. master프로세스는 cpu개수만큼 워커 프로세스를 만들고, 8005번 포트에서 대기하면서 요청이 들어왔을 때 worker 프로세스에 요청을 분배한다. const numCPUs = req..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cZWea7/btqCoRsDZ3n/YU1DWAB9gYQ9wWtaqTXa70/img.jpg)
다형성이란 부모 클래스의 프로퍼티를 자식 클래스에서 다형적으로 가질 수 있음을 의미한다. 다형성 class Vehicle { constructor() { this.engines = 1; } iginition() { console.log("engine is up!"); } drive() { this.iginition(); console.log("Vehicle drive!"); } } class Car extends Vehicle { constructor() { super(); this.wheels=4; } drive(){ console.log(this.wheels, 'Car drive!'); } } class SpeedBoat extends Vehicle{ constructor(){ super(); thi..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/2YoYm/btqCjeQaYcC/ZgOJekF9T5eyJ38CLFNSbk/img.jpg)
프로퍼티 나열을 객체에서 할 때 기억해야 할 것이 있다. 객체 프로퍼티 나열에는 순서가 없다는 것. 프로토타입 체인 관계에서 내가 모르는 프로퍼티가 존재할 수 있다는 것. for...in과 Object.keys 다른 사람이 만든 객체 o2가 있다고 하자. const o1 = { c: 3 }; const o2 = { a: 1, b: 2, d: 4 }; Object.setPrototypeOf(o2, o1); o2의 프로퍼티를 나열해보면 for (let prop in o2) { console.log(`${prop}: ${o2[prop]}`); } // a: 1 // b: 2 // d: 4 // c: 3 c는 o2에 없었지만 상위 프로토타입에 있기 때문에 출력되는 것을 알 수 있다. 프로토타입 체인 어딘가에 내..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/AS4nN/btqClze4FXm/w8LpavXo9HpmwITbs3mX90/img.jpg)
ES6에서 생겨난 개념. iterator와 generator. generator는 iterator에 의존하는 개념이기 때문에 iterator부터 시작하자. iterator의 'iterate'는 '순회하다.'라는 뜻이다. 뜻에서 짐작할 수 있듯이 배열이나 객체의 값을 순회하는 역할이다. 어떻게 순회하는지 확인해보자. iterable의 대표적인 예인 배열부터 보면 const book = [ "hi", "i'm", "a developer" ]; iterator는 values() 메서드를 써서 이터레이터를 만들 수 있다. const it = book.values(); next() 메서드를 써서 순회를 진행할 수 있다. console.log(it.next()); // { value: 'hi', done: fals..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/dO51p7/btqCjRNVMbf/Ny3katc1SQwrY7he4EOSK0/img.jpg)
ES6에서 새롭게 추가된 데이터 구조 2개가 있다. 맵과 셋. 맵은 객체와 유사하고, 셋은 배열과 유사하다. 그 차이점이 뭘까? Map 객체의 역할은 KEY와 VALUE를 연결하는 역할이다. 그런데 객체에는 몇 가지 한계들이 있다. 1. 프로토타입 체인 때문에 의도하지 않은 연결이 생길 수 있다. 2. 객체 안에 연결된 키와 값이 몇 개나 되는지 쉽게 알아낼 수 있는 방법이 없다. 3. 키는 반드시 문자열이나 심볼이어야 하므로 객체를 키로 써서 값과 연결할 수 없다.. 4. 객체는 프로퍼티 순서를 보장하지 않는다. 맵은 위에서 나열한 4가지 문제점을 모두 극복해냈다. 코드를 보면서 확인해보자. Map 인스턴스는 new연산자를 이용해서 만든다. const u1 = {name: 'Cynthia'}; cons..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/MAP5Y/btqClyUcXu5/rSGo638TZnRYSGaJIxQHUk/img.jpg)
서로 다른 인덱스가 둘 다 사용 가능할 경우 mongoDB는 어떤 Plan을 선택할까? 상황을 가정해보자. 먼저 다음과 같은 2개의 documents가 있고 name이라는 single field Index가 있고 name과 age의 combination field Index가 있다. 이름이 "Manu"고 나이가 30인 사람을 찾는다고 하면 db.customers.find({name: "Manu", age:30}); name에 대한 인덱스도 사용가능하고 name_age에 대한 인덱스도 사용 가능하다. 이와 같은 상황에서 mongoDB는 어떤 인덱스를 선택할까? db.customers.explain("allPlansExecution"). find({name:"Manu", age:29})를 실행하면 "winn..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/DxIqP/btqCpPHo1vE/uTwWVtycJwEEFCzQsi0elK/img.jpg)
covered query란? 일단 설명하기 위해 준비를 하자. 다음과 같이 2개의 documents를 넣어주고 name key에대해 single field index를 하나 준비한다. 이제 여기서 max라는 이름의 document를 찾는 과정을 관찰해보자. 쿼리를 진단하는 방법은 explain()메서다. db.customers.explain("executionStats").find({name: "Max"}) 자세히보면 inpuStage의 stage를 보면 단계를 알 수 있다. "IXSCAN" => "FETCH" executionStats key에는 전체 Examined된 documents개수와 returned된 개수를 알 수 있다. 만약 내가 "Max"라는 이름의 사람이 존재하는지만 알면된다면 그 사람에..
- Total
- Today
- Yesterday
- set
- static method
- javascript
- saveUnitialized
- 맵
- Node.js
- pm2 #cluster #Javascript
- virtuals
- resave
- 집합
- mongoose
- 다중상속
- 자료구조 #딕셔너리 #해시
- Generator
- mixin
- 자료구조
- Iterator
- 이중 연결리스트
- index
- 선형리스트
- map
- express-session
- 다형성
- query helper
- MongoDB
- instance method
- alias
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |