3회차
Node.js로 구현하는 쇼핑몰 프로젝트 3회차 수업 요약 내용입니다.
즉시 실행 익명 함수 (immediately-invoked function expression)
함수 선언 + 함수 실행
외부에서 내부 변수에 접근하지 못하게 하기 위해
함수 실행 후 return 문으로 내가 원하는 변수만 제공가능
function test(){
console.log("my test");
}
test();(function(){
console.log("my test");
})();// 외부 변수에 영향 받지 않는 예
var test = 20;
(function(){
var test = 10;
console.log(test); // ??
})();
console.log(test); // ??콜백패턴
실행되는 것을 목적으로 다른 오브젝트의 메소드에 전달되는 오브젝트를 말한다.
특정 로직을 담은 메소드를 실행 시키기 위해 사용하는데, 자바에선 메소드 자체를 파라미터로 전달할 방법은 없기 때문에 메소드가 담긴 오브젝트를 전달해야 한다.
그래서 펑셔널 오브젝트(functional object)라고도 한다.
메서드 체이닝
메서드가 객체를 반환하게 되면, 메서드의 반환 값인 객체를 통해 또 다른 함수를 호출할 수 있다. 이러한 프로그래밍 패턴을 메서드 체이닝 (Method Chaining) 이라 정의한다.
응용 예제
https://nodejs.junyoung.me/method-chaining/
Prototype
JavaScript는 클래스라는 개념이 없다. 그래서 기존의 객체를 복사하여(cloning) 새로운 객체를 생성하는 프로토타입 기반의 언어이다. 프로토타입 기반 언어는 객체 원형인 프로토타입을 이용하여 새로운 객체를 만들어낸다. 이렇게 생성된 객체 역시 또 다른 객체의 원형이 될 수 있다. 프로토타입은 객체를 확장하고 객체 지향적인 프로그래밍을 할 수 있게 된다. 프로토타입은 크게 두 가지로 해석할 수 있다. 프로토타입 객체를 참조하는 prototype 속성과 객체 멤버인 proto 속성이 참조하는 숨은 링크가 있다. 이 둘의 차이점을 이해하기 위해서는 JavaScript 함수와 객체의 내부적인 구조를 이해 해야한다.
Object.create()
객체 생성
new 키워드가 Java와 비슷하고, 자바스크립트 프로토타입 기반 프로그래밍 (https://ko.wikipedia.org/wiki/프로토타입_기반_프로그래밍) 과 맞지 않다고, Object.create() 선호
필드는 필드 따로, 공유하는 부분은 prototype으로 처리
MongoDB 란?
json-style의 document형태로 저장하는 오픈소스 NoSQL 데이터 베이스 (C++로 작성)
문서지향 데이터베이스
행 개념 대신에 보다 유연한 모델인 문서를 이용하는데, 내장 문서와 배열따위의 표현이 가능해서 복잡한 객체의 계층 관계를 하나의 레코드(열)로 표현할 수 있다. 이것은 자바나 파이썬 같은 최신 객체지향 언어들을 사용하는 개발자에 매우 편리함을 가져다 준다.
스키마
몽고 디비의 특징 중 가장 유명한 것은 스키마가 없다는 것이다. 이것은 필요할 때 마다 필드를 추가하거나 제거하는 것이 매우 쉬워졌음을 의미한다. 사실은 필드라는게 없는거나 마찬가지니까. 따라서 개발 과정이 매우 단순해지고 빠르게 개발이 가능하게 된다.
RDB와 비교
RDBMS
MongoDB
Database
Database
Table
Collection
Tuple / Row
Document
Column
Key/Field
Table Join
Embedded Documents
Primary Key
ObjectID
빅데이터 처리 특화
Memory Mapped(데이터 쓰기 시에 OS의 가상 메모리에 데이터를 넣은 후 비동기로 디스크에 기록하는 방식)를 사용하기 때문에 방대한 데이터를 빠르게 처리할 수 있다. 하지만 OS의 메모리를 활용하는 만큼, 메모리가 가득 찰 시 하드디스크로부터 데이터를 처리하게 되어 속도가 급격히 느려지게 된다.
쿼리 지원
기존의 NO-SQL들이 key,value의 형태만 제공하는 것과 달리 RDB와 같이 쿼리를 사용할 수 있습니다. 이를 통해 효과적으로 데이터를 추출해낼 수 있고, 기존의 관계형 데이터베이스로부터의 이전이 쉽습니다.
대규모 분산 시스템 구성 지원
관계형데이터베이스에 비해 대규모 분산 시스템 구성을 쉽게 할 수 있도록 연결되지 않은 데이터들이 동시 병렬 처리가 가능한 MapReduce 자동으로 데이터를 여러서버에 분할시켜주는 Auto-Sharding 데이터 유실을 대비한 Replica 기능을 제공합니다.
단점
key 중복 입력의 비효율성
birthday key에 해당하는 데이터를 10000개를 넣을 경우, DB에는 10000번의 "birthday"가 함께 저장된다.
{birthday:19920101} {birthday:19000202} {birthday: 18880303} 중복된 key값이 계속 들어가기 때문에, 비효율적인 저장이 될 수 밖에 없다.
Memory Mapped의 메모리 제약 (빅데이터 처리 특화 참조)
불안전함
데이터의 양이 많을 경우 몇몇 데이터가 날아간다던가, 샤딩이 정상적으로 동작을 하지 않는다던가.. 레플리카 프로세스가 좀비가 된다던가.. 등등의 다양한 에러가 존재한다.
Robomongo 설치
연습
Last updated
Was this helpful?