mongoose
mongoose는 Node.js 환경에서 사용하는 MongoDB 기반 ODM(Object Data Modeling) 라이브러리입니다. 이 라이브러리는 데이터베이스 문서들을 자바스크립트 객체처럼 사용할 수 있게 해줍니다. (리액트를 다루는 기술 _p.643)
1. mongoose, dotenv 설치하기
프로젝트 디렉토리, package.json 파일이 있는 디렉터리에서 다음 명령어를 입력하여 mongoose와 dotenv를 설치합니다.
$ npm install mongoose dotenv
2. 환경변수 설정하기
dotenv
- 환경변수들을 파일에 넣고 사용할 수 있게 해주는 개발 도구
- mongoose를 사용하면서 개발 환경에 따라 달라질 수 있는 데이터를 코드안에 하드코딩하지 않고 환경변수로 설정해 두기 위해 사용합니다.
- 프로젝트 최상위 디렉토리에 .env 파일을 만들어 해당 파일에 필요한 환경변수를 저장해 두고, 필요한 파일에서 임포트해서 씁니다.
- 다른 컴퓨터, 개발 환경에서 이 프로젝트를 실행 할 때에는 환경 변수가 달라지기 때문에 프로젝트를 깃헙이나 깃랩에 올릴 때에는 .env을 .gitignore 처리를 해주어야 합니다.
.env example
PORT=4000
MONGO_URI=mongodb://localhost:27017/blog
env 파일에서 선언한 변수들은 js 파일에서 dotenv를 불러와서 config함수를 호출한 뒤, node js에서는 process.env 값으로 조회할 수 있습니다.
src/index.js example
require('dotenv').config();
const { PORT, MONGO_URI } = process.env;
이렇게 process.env 로 조회한 값을 비구조화 할당을 해주면 env 파일에서 선언한대로 PORT = 4000, MONGO_URI = mongodb://localhost:27017/blog 로 값을 사용할 수 있습니다.
그러니까 사용 환경이 바뀔 때마다 이 코드를 직접 찾아서 고치지 않고, 가장 최상위에 있는 env 파일에 변수만 수정해주면 되니까 유지 보수 나 재사용성이 높아집니다.
3. 서버와 데이터베이스 연결하기
mongoose의 connect 함수를 사용하여 서버와 데이터베이스를 연결할 수 있습니다.
mongoose를 사용하기 위해 임포트하고, conncect 함수에 env 파일에 정의해서 가져왔던 MONGO_URI 환경변수와 옵션을 파라미터로 전달합니다.
const mongoose = require('mongoose');
...
mongoose
.connect(MONGO_URI, { useNewUrlParser: true, useFindAndModify: false })
.then(() => {
console.log('connected to mongoDB');
})
.catch(e => {
console.log(e);
});
...
- { useNewUrlParser : true } 를 해주지 않으면 파싱 문제가 발생하여 deprecation 에러가 뜹니다.
- { useFindAndModify : false } 역시 그대로 두면 deprecation 에러가 뜹니다.
4. 데이터베이스 스키마와 모델 생성
mongoose에서 스키마란 데이터베이스 문서 내부의 각 필드가 어떤 형식으로 되어 있는지 정의하는 객체입니다. ... 모델은 스키마를 사용하여 만든 인스턴스로 데이터베이스에서 실제 작업을 처리하는데 필요한 함수들을 가지고 있는 개체입니다. (리액트를 다루는 기술_p.651)
schema
스키마 객체를 선언한 파일들은 src/models라는 새로운 디렉토리를 만들어 한 곳에 저장해 두는 것이 관리하기 쉽습니다.
mongoose 모듈인 Schema로 스키마 객체를 만들어 선언합니다.
필드 이름과 해당 필드의 데이터 타입을 설정하면 됩니다.
// src/models/sample.js
const mongoose = require('mongoose');
const { Schema } = mongoose;
const SampleSchema = new Schema({
fieldName: DataType,
...
});
const Sample = mongoose.model('Sample', SampleSchema);
export default Sample;
하단의 코드는 생성한 스키마를 mongoose.model 함수로 모델 인스턴스를 만들기 위한 코드입니다. 다음과 같이 사용할 수 있는 함수입니다. 그리고 생성한 모델 인스턴스를 외부 파일에서 사용할 수 있도록 하기 위해 export 해줍니다.
mongoose.model('스키마 이름', 스키마 객체);
다음과 같은 데이터 타입들이 지원됩니다.
Type | Type Description |
String | 문자열 |
Number | 숫자 |
Date | 날짜 |
Buffer | 파일을 담을 수 있는 버퍼 |
Boolean | true / false |
Mixed(Schema.Types.Mixed) | 어떤 데이터도 넣을 수 있는 형식 |
ObjectId(Schema.Types.ObjectId) | 객체 아이디 |
Array | 배열 => 형태: [ ... ] |
model
모델은 src/models 라는 새로운 디렉토리를 만들어 모두 여기서 관리해주는 것이 좋습니다.
models 디렉토리에 모델을 정의하기 위한 js 파일을 다음과 같이 만듭니다.
5. 데이터 생성 및 조회
데이터베이스에 저장된 컬랙션은 POST를 통해 데이터를 생성하고, GET으로 조회할 수 있게 됩니다.
이는 router를 이용해서 연결된 데이터베이스로 post, get, delete, put, patch 등의 request를 보내 처리할 수 있게 됩니다.
References
'기술 > MongoDB' 카테고리의 다른 글
Mac에서 Homebrew를 이용해서 mongoDB 설치 (0) | 2021.02.25 |
---|