라벨이 mongoDB인 게시물 표시

Docker MongoDB Container 생성하고 사용하기

이미지
 보통 MongoDB를 셋팅하는데 많이 귀찮습니다. 특히 MongoDB를 처음 셋팅할때는 자료들을 찾아봐야 합니다. 위 작업은 기본적으로 Docker가 설치되 있어야 합니다. 설치방법은 아래 링크를 참고해 주시기 바랍니다. 링크 : docker install by terminal : ubuntu 20.04 공식 MongoDB Image 사이트 : https://hub.docker.com/_/mongo 1) 도커 컨테이너로 MongoDB생성하기 - MongoDB 이미지를 이용하여 NoSQL 컨테이너를 만들기 $ docker run --name [컨테이너 이름] -p [지정할 포트]:27017 -e MONGO_INITDB_ROOT_USERNAME="[유저이름]" -e MONGO_INITDB_ROOT_PASSWORD="[비밀번호]" -d mongo:[테그] copy 만약 처음 셋팅한다면 위 사진과 같이 도커에서 이미지를 다운을 받을 것입니다.  이제 컨테이너가 구동이 되면 위 사진과 같이 돌아가는것을 확인할수 있습니다. 2) 도커 컨테이너로 접속하기(바로 mongosh로 접속) - MongoDB 컨테이너에 접속하기(mongosh) : admin mongosh mongodb://[username]:[password]@[ip address]:[port]/admin copy 위 방법으로 mongosh를 이용하여 mongoDB에 접속을 할수 있습니다. 하지만 mongosh가 local에 설치해야 한다는 문제가 있습니다. 이때는 docker container로 접속해서 직접 mongosh를 실행하는 방법이 있습니다. 3) 도커 컨테이너로 접속하기(컨테이너로 접속후 mongosh로 접속하기) - 해당 컨테이너에 접속 docker exec -it [컨테이너 이름 또는 id] bash copy - 접속한 컨테이너에서 mongosh를 실행하여 mongodb에 접속 mongosh mongodb...

NestJS MongoDB 사용하기4- DB Update Delete

 안녕하세요. 알렉스입니다. 저번 포스팅에 이어 이번에는 MongoDB에 CRUD기능중 Update, Delete을 넣도록 하겠습니다. 처음 들어오셨다면 이전글을 참고해 주시기 바랍니다. 이전글 : NestJS MongoDB 사용하기3 - DB Create Read // src/users/dto/update-user.dto.ts import { ApiProperty , PartialType } from '@nestjs/swagger' ; import { IsEmpty , IsString } from 'class-validator' ; import { CreateUserDto } from './create-user.dto' ; export class UpdateUserDto extends PartialType ( CreateUserDto ) { @ IsString () @ IsEmpty () @ ApiProperty ({ readOnly : true , }) id : string ; } 코드1) UpdateUserDto 작성 코드1에서 id를 다시 정의한 이유는 'extends PartialType'이 CreateUserDto이기 때문입니다. id는 필수값으로 넣어야 하는에 업데이트 할때는 파라메터로 넣기 때문에 필수가 아닙니다. 따라서 재 설정을 하여 id는 비어도 class-validator에서 걸리지 않도록 수정한 것입니다. // src/users/users.service.ts import { Injectable , NotFoundException } from '@nestjs/common' ; import { InjectModel } from '@nestjs/mongoose' ; import mongoose from 'mongoose' ; import { CreateUserDto ...

NestJS MongoDB 사용하기3- DB Create Read

이미지
 안녕하세요. 알렉스입니다. 저번 포스팅에 이어 이번에는 MongoDB에 CRUD기능을 넣도록 하겠습니다. 처음 들어오셨다면 이전글을 참고해 주시기 바랍니다. 이전글 : NestJS MongoDB 사용하기2 - DB 스키마 생성 // src/users/dto/create-user.dto.ts import { ApiProperty } from '@nestjs/swagger' ; import { IsInt , IsNotEmpty , IsObject , IsOptional , IsString , Max , Min , } from 'class-validator' ; export class CreateUserDto { @ IsString () @ IsNotEmpty () @ ApiProperty ({ description : '유저 고유ID' , type : String , example : 'abc123' , }) id : string ; @ IsString () @ IsNotEmpty () @ ApiProperty ({ description : '유저 이름' , type : String , example : 'alex' , }) name : string ; @ IsString () @ IsNotEmpty () @ ApiProperty ({ description : '유저 전화번호' , type : String , example : '01035451268' , }) mobile : string ; @ IsInt () @ Min ( 20 ) @ Max ( 99 ) @ IsNotEmpty () @ ApiProperty ({ description : ...

NestJS MongoDB 사용하기2 - DB 스키마 생성

이미지
 안녕하세요. 알렉스입니다. 이번에는 NestJS을 이용하여 MongoDB의 스키마를 작성해서 collection을 만드는 글을 작성할려고 합니다.  mongodb셋팅은 이전글을 참고해 주시기 바랍니다. 이전글 : NestJS MongoDB 사용하기1 - DB 접속 이제 NestJS안에 users resource를 생성하도록 하겠습니다. NestJS resource 패키지 생성 NestJS CLI를 이용하여 controller, service, dto, entity를 자동으로 생성 $ nest g res copy 사진1) 생성할 resource 명칭 입력(users입력) 사진2) layer선택(REST API) 사진3) CRUD자동 생성 유무(Y) 사진1 ~ 3까지 진행하면 src폴더 안에 users이 생성된 것을 확인할수 있습니다. 먼저 /src/users/entities 폴더를 삭제하고 대신 schemas폴더를 생성합니다. 그리고 그안에 user.schema.ts 파일을 생성하고 아래와 같이 코드를 작성합니다. // src/users/schemas/user.schema.ts import { Prop , Schema , SchemaFactory } from '@nestjs/mongoose' ; @ Schema ({ timestamps : true , // document 작성시 시간 기록 }) export class Users { @ Prop () // 유저 id id : string ; @ Prop () // 유저 이름 name : string ; @ Prop () // 유저 전화번호 mobile : string ; @ Prop () // 유저 나이 age : number ; @ Prop ({ type : 'Array' }) // 유저 취미 hobby : string []; @ Prop ({ type : 'Object' })...

NestJS MongoDB 사용하기1 - DB 접속

이미지
 안녕하세요. 알렉스입니다. 이번에는 NestJS을 이용하여 MongoDB에 연결할려고 합니다. 향후 포스팅하는 글은 MongoDB의 CRUD가 가능하도록 API를 만들 예정입니다.  사용할 mongoDB에 대한 셋팅은 아래 링크를 참고해 주시기 바랍니다. 위 포스트는 mongoDB Atlas를 사용할 것입니다. 링크1 : 몽고DB사용하기 by Web(Atlas) 링크2 : NestJS 공식 사이트(mongodb 사용법) 사진1) NestJS Project생성 npm 설치 mongoose npm을 설치합니다. $ npm i @nestjs/mongoose mongoose copy 이후 app.module.ts에서 아래코드와 같이 수정을 합니다. // src/app.module.ts import { Module } from '@nestjs/common' ; import * as Joi from '@hapi/joi' ; import { ConfigModule } from '@nestjs/config' ; import { AppController } from './app.controller' ; import { AppService } from './app.service' ; import { MongooseModule } from '@nestjs/mongoose' ; @ Module ({ imports : [ ConfigModule . forRoot ({ isGlobal : true , envFilePath : `. ${ process . env . NODE_ENV } .env` , // env파일 스키마 점검 validationSchema : Joi . object ({ MONGODB_CONNECTION : Joi . required (), // e...

Error (MongoDB Atlas) : Connections % of configured limit has gone above 80

이미지
 안녕하세요. 이번에는 MongoDB를 사용하다가 발생한 에러에 대해서 말씀드릴려고 합니다.  사진1) 에러 사진 위 에러에서 발생한 이유는 서버쪽에서 MongoDB쪽의 connection을 끊지 않고 유지하기 때문에 발생하는 현상입니다. 특히 Atlas의 무료버전을 사용하고 있다면 connections을 500개까지 허용하고 있습니다. 사진2) limit까지 올라간 connections  즉 어디선가 접속을 하고 close를 하지 않은 것입니다. 그럼 해당 문제가 되는 코드를 확인해 보겠습니다. const { MongoClient } = require ( 'mongodb' ); const url = 'mongodb+srv://alex:vlfvhdwntsdfghetk@xrstudio.q7lsz.mongodb.net/myFirstDatabase?retryWrites=true&w=majority' ; const client = new MongoClient ( url ); // 접속할려는 MongoDB 서버의 url을 지정한다. // Database Name const dbName = 'test' ; // 모든 데이터를 얻기 위한 함수 export async function getAllData () { await client . connect (); // 몽고DB에 접속을 한다. console . log ( 'Connected successfully to server : getAllData' ); const db = await client . db ( dbName ); // 해당 MongoDB의 DataBase을 지정한다(위 코드는 'test' DB를 선택) const collection = await db . collection ( 'games' ); // collection을 선택한다.(위 코드는 'game...

MongoDB CLI

위 cli는 MongoDB의 Shell을 이용하여 Cloud MongoDB에 접속할때 사용하는 cli입니다. Mongo Shell 설치 및 사용법 링크  현재 존재하는 DataBase 확인하기 해당 MongoDB에 있는 DataBase를 출력합니다. $ show dbs copy DataBase생성 DataBase을 생성과 동시에 사용합니다. $ use [DataBase Name] copy DataBase안에서 Collection을 생성 DB가 선택되어 있는 상태에서 Collection을 생성합니다.(Table과 개념이 비슷함) Collection의 구조도 설정할수 있습니다. 링크참조 $ db.createCollection("CollectionName") copy Collection안에 document생성 Collection안에 document를 생성한다. 원소는 JSON타입이다. (Record과 개념이 비슷함) $ db.testCollection.insert({[Document생성]}); copy MongoDB에서 다른 DB로 Collections Copy하기 복사할 DB를 사용하고 있어야 합니다(use) 위치: 복사원본 DB 사용하고 있는 DB의 collection을 다른 DB로 복사합니다. (존재하는 모든 documents) $ db.[복사원본 Collection].find().forEach(function(d){db.getSiblingDB([카피할DB - string])[카피할DB의 Collection - string].insert(d);}); copy MongoDB에서 Document갯수 세기 현재 DB의 Collection안에 관련 Documents가 몇개 있는지 반환합니다. (count제거시 배열로 변환) $ db.[collection_name].find({key입력}).count() copy MongoDB에서 해당 collection의 Documents를...

몽고DB사용하기 by Web(Atlas)

이미지
 안녕하세요. 알렉스 입니다. 이번에는 NoSQL의 MongoDB를 사용할수 있게 셋팅을 하겠습니다. 일단 기본적으로 'https://account.mongodb.com/account/login'링크에 들어가서 가입을 하셔야 합니다. 가입이 완료된 이후 셋팅법을 알려드리도록 하겠습니다. 로그인을 하면 처음 프로젝트 카테고리가 나타납니다. 갓 생성한 계정이니 프로젝트가 존재하지 않습니다. 일단 'New Project'버튼을 눌러 새로 생성합니다. 저는 임시적으로 'test'라는 프로젝트명을 사용하겠습니다. 위의 사진은 해당 프로젝트에 유저를 추가할것인지의 여부입니다. 일단 여기서는 혼자 하는 것이기 때문에 'Create Project'를 하도록 하겠습니다. 이제 프로젝트가 완성됬습니다. 이제 데이터베이스를 만들 차례입니다. 데이터베이스는 SQL이나 NoSQL이나 비슷한 개념입니다. 결국 데이터베이스 안에 데이터를 넣기 때분입니다. 연습용이기 때문에 'free'를 선택해 줍니다. 원하는 서비스 및 리전을 선택합니다. 몽고디비에서 해당 데이터베이스의 명칭을 지정할수 있습니다. 여기서는 'Cluster0'으로 자동생성 됬습니다. 물론 바꾸셔도 되지만 저는 그대로 가도록 하겠습니다. 이제 'Create Cluster'을 누르면 위와같이 데이터 베이스를 생성하게 됩니다. 시간상 약 3~10분정도 걸립니다.  Terminal에서 몽고DB에 접속하기 위한 아이디와 비밀번호를 지정합니다. 데이터 베이스 유저가 작성이 되면 이제 'Choose a connection method'를 클릭합니다.  위 글에서는 Terminal로 접속할 것이 때문에 첫번째(Connect with the MongoDB Shell)항목을 선택합니다. 만약 해당 컴퓨터에 MongoDB Shell이 설치되 있지 않는다면 설치하시고 진행해 주시기 바랍니다. 이미 설치가 되 있으면 'I h...