어제 EC2에 MongoDB 설치까지 완료했고
오늘은 Nestjs에서 붙어볼거다.
bindIp를 0.0.0.0 으로 수정하면 어떤 ip에서도 접근 가능
$ sudo vi /etc/mongod.conf
net:
port: 27017
bindIp: 127.0.0.1 // 여기를 0.0.0.0 으로 수정한다.
$ sudo systemctl restart mongod // 적용을 위해 mongoDB 재시작
$ sudo systemctl status mongod // 상태 떠 있는지 확인
EC2 > 보안 그룹 > 인바운드 규칙 추가
port: 27017에 대해 열고 싶은 원하는 IP 대를 넣어둔다.

(캡쳐에는 0.0.0.0을 써뒀는데, 정확하게 써주는게 보안에 좋음)
$ mongosh
$ use admin
$ db.createUser({
user: "유저 이름",
pwd: "비번",
roles: [{role: 'root', db:'admin'}]
})
$ db.getUsers() // 방금 입력한 유저 정보를 볼 수 있다
// 다른 DB 전용 사용자
$ use myAppDB
$ db.createUser({
user: "유저 이름",
pwd: "비번",
roles: [
{ role: "readWrite", db: "myAppDB" }
]
})
이젠 로컬 소스로 돌아오자.
nestjs 버젼을 먼저 확인한다. package.json에서 알 수 있음
"dependencies": {
"@nestjs/common": "^9.0.0",
"@nestjs/core": "^9.0.0",
...
}
난 nestjs 9 버젼이라서 mongoose도 버젼에 맞게 설치했다
(아래 둘중에서 버젼에 맞게 하슈)
$ npm install --save @nestjs/mongoose@9 mongoose // nestjs 9 버젼
$ npm install --save @nestjs/mongoose mongoose // nestjs 10 버젼 이상 설치 가능
패키지 설치 완료!
//app.module.ts
@Module({
imports: [
MongooseModule.forRoot(process.env.MONGODB_URI), // 추가
],
controllers: [...],
providers: [...],
})
export class AppModule {}
MONGODB_URI 는 .env 파일에 선언해준다
MONGODB_URI = 'mongodb://유저:비번@호스트:27017/데이터베이스이름?authSource=admin'
Mongoose는 ODM이라 스키마가 필요하다.
// cat.schema.ts
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';
export type CatDocument = CatChat & Document;
@Schema({ timestamps: true })
export class Cat {
@Prop({ required: true })
name: string;
@Prop()
age: number;
@Prop()
message: string;
}
export const CatSchema = SchemaFactory.createForClass(CatChat);
// cat.module.ts
@Module({
imports: [
// 추가
MongooseModule.forFeature([
{ name: Cat.name, schema: CatSchema },
]),
],
controllers: [..],
providers: [..],
})
export class CatModule {}
// cat.service.ts
@Injectable()
export class CatService {
constructor(
@InjectModel(Cat.name)
private catModel: Model<CatDocument>,
) {}
async create(catData: Partial<Cat>) {
const cat = new this.catModel(catData);
return cat.save();
}
}
고양이 정보를 저장했다.
$ mongosh
$ use 데이터베이스
$ show collections // 컬렉션 조회
$ db.cat.find() // 데이터 select 쿼리
고양이 정보 저장 조회 성공!
내일은 간단한 조회 로직도 짜봐야겠다.
