헬창 개발자
Node.js 환경에서 NoSQL : MongoDB 사용하기 본문
MongoDB
무작위로 크롤링을 한 데이터라던가 세션, 로그 데이터 등의 비정형 데이터는 데이터가 어떤 형태로 들어올지 모르므로 어느 정도 융통성 있게 테이블을 짜 놓는게 좋다.
특히 빅데이터 같은 경우에는 양이나 형태가 가늠되지 않으니, 이 상태에서 데이터를 분산처리하고, 또 그에 맞게 스키마를 작성하는 것은 매우 비효울적이다.
이럴때 사용할 수 있는 데이터베이스가 MongoDB이며 NoSQL 중 가장 인기 있는 데이터베이스이다.
MongoDB의 특징은 다음과 같다.
- Schema-Free(Schema-less)이다.
- Schema가 없다. 같은 Collection 안에 있을지라도 다른 Schema를 가지고 있을 수 있다
- 솔루션 자체의 분산 처리, 샤딩, 데이터 리밸런싱, 복제, 복구를 지원한다.
- 대용량, 비정형 데이터 처리에 적합하다.
- 데이터베이스의 수평 확장성이 뛰어나다.
- 내부적으로 B-Tree 자료구조를 이용한다.
- JSON의 확장 버전인 BSON(Binary JSON) 형태로 데이터를 지정한다.
- BSON의 데이터 타입
- ObjectId: 12 bytes로 구성된 하나의 document에 유일한 ObjectId가 자동으로 부여됩니다.
- String: 문자열로 어떠한 UTF-8 문자열도 표현 가능합니다.
- Date: UNIX 시간 형식으로 저장됩니다. 새로운 Date 객체를 생성할 때는 항상 Date가 아닌 new Date 호출, Date 호출 시 날짜 객체가 아닌 날짜의 문자열 표현 반환합니다.
- 예) {“x” : new Date()}
- 기본값) ISODate("1970-01-011T09:00:00.000**+09:00**") : 9시간을 더하면 한국/서울 시간으로 변경.
- Array: 배열을 표현합니다.
- Boolen: true, flase 값에 사용합니다.
- integer: 정수를 저장할 때 사용합니다.
- double: 부동 소수점을 저장할 때 사용합니다.
- BSON의 데이터 타입
관계형 데이터베이스 VS MongoDB
테이블 | 컬렉션 |
행, 레코드 | 도큐먼트 |
열, 속성 | 필드 |
인덱스 | 인덱스 |
CRUD의 결과를 레코드로 반환 | CRUD의 결과를 커서로 반환 |
MongoDB 설치하기
MongoDB: The Developer Data Platform | MongoDB
Mongodb 홈페이지에서 커뮤니티 서버를 다운받자(4.X.X 버전)
Service Configuration 단계에서 중요한 점은 ‘Install MongoD as a Service’를 선택하게 되면 클라우드가 내 데이터베이스 서버가 된다.
여기서는 해지하고 실습을 진행한다.
cmd창에서 작업하기 편하게 환경변수 설정을 해줍니다.
C:\Program Files\MongoDB\Server\6.0\bin
몽고디비를 실행하기 전에 C:\data\db 폴더를 만들어야 한다.
위 폴더를 만들지 않으면 몽고디비는 실행되지 않는다.
이제 명령창에 mongod —install를 입력하여 필요한 패키지를 다운 받는다.
설치가 완료되면 db폴더에 파일들이 생성된다.
명령어 창에 mongod를 입력하여 서버를 가동시킨다.
새로운 명령어창을 열어 mongo를 입력하여 db에 접근을 한다.
MongoDB 명령어
use 데이터베이스명
데이터베이스를 생성해주는 명령어
show 컬렉션명
현재 컬렉션을 조회한다.
db.createCollection(”컬렉션명”)
Collection을 생성
db.컬렉션명.insert({”key” : “value”})
Collection에 데이터를 생성
db.컬렉션명.insert({”key” : “value”})
Collection에 데이터를 생성
db.컬렉션명.find()
Collection에 데이터를 조회
결과로는 Cursor를 반환, 커서는 쿼리 요청의 결과 값을 가르키는 포인터이다.
db.Collection.find(query, projection)
원하는 데이터만 조회
기준이 없다면 {}를 입력
projection은 보여 주고 싶은 Field를 설정 이때 Field:0 이면 해당 필드만 보지 않기 1이면 해당 필드만 보기이다.
db.Collection.remove({”key” : “value”})
컬렉션을 삭제하는 명령어
db.dropDatabase()
데이터베이스를 삭제하는 명령어
ODM : Mongoose
MySQL을 자바스크립트로 사용하기 위해 sequelize를 사용했던 것처럼 MongoDB에도 Mongoose라는 모듈을 사용하 수 있다.
sequelize가 ORM이었다면 Mongoose는 ODM인데 Object-Document-Mapper의 약자이다.
mongose를 사용하기 위해 노드 프로젝트에 mongose를 설치하자
npm install mongoose
- mongose와 MongoDB 연결하기
/* mongoose불러오기 */
const mongoose = require("mongoose");
/* Connecting */
/* MongoDB의 포트는 27017이며 브라우저에서 접속을하면 Connected to MongoDB라는 메시지를 볼 수 있다.
127.0.0.1:27017/ 뒤에는 자신이 생성한 데이터베이스명을 적으면 된다.
*/
mongoose
.connect("mongodb://127.0.0.1:27017/roadbook", {
useNewUrlParser: true,
useCreateIndex: true,
})
.then(() => {
console.log("Connected to MongoDB");
})
.catch((err) => {
console.log(err);
});
/* Defining Schema */
/* customerSchema를 정의한다.
변수에 키와 타입을 정의하고 컬렉션 이름을 지정한다.*/
const customerSchema = mongoose.Schema({
name: 'string',
age: 'number',
sex: 'string'
},
{
collection: 'newCustomer'
}
);
/* Schema -> Model */
/* 이렇게 생성한 스키마를 mongoose.model을 통해 모델로 변환한다.*/
const Customer = mongoose.model('Schema', customerSchema);
/* Generate Instance */
/* 생성한 모델에 인스턴스를 생성, 이 인스턴스가 Document가 된다.*/
const customer1 = new Customer({ name: '홍길동', age: 30, sex: '남' });
/* Save Data into MongoDB */
/* Save() 함수를 이용해 생성한 인스턴스를 데이터베이스에 저장한다.*/
customer1.save()
.then(() => {
console.log(customer1);
})
.catch((err) => {
console.log('Error : ' + err);
});
데이터가 잘 들어갔는지 명령어를 통해 확인해보자!
'공부방' 카테고리의 다른 글
passport 구현 (0) | 2022.10.25 |
---|---|
실시간 소켓 통신 구현을 해보자 (2) | 2022.10.05 |
Node.js와 데이터베이스 (0) | 2022.09.04 |
Node.js를 이용한 웹파싱 (0) | 2022.09.01 |
API???????? (3) | 2022.08.21 |