Mongoose (몽구스)

송현섭 ·2024년 1월 7일
1

백엔드

목록 보기
5/15
post-thumbnail



Mongoose란


  • Mongoose 모듈은 MongoDB 라는 NoSQL 데이터베이스를 Node.js로 사용할 수 있도록 하는 확장 모듈

  • mongoDB 와 node.js 를 연결시켜주는 드라이버이자 mongoDB 용 ODM(Object Data Mapping) 라이브러리

    ODM (Object Data Mapping)
    -객체와 문서를 1대1로 매칭한다는 의미

    -Object는 자바스크립트의 객체, Document는 몽고DB의 문서

    -문서를 DB에서 조회할 때 자바스크립트 객체로 바꿔줌

    -DB 의 데이터를 복잡한 명령어 없이 javascript 객체 형식으로 쉽게 사용 가능하도록 지원


  • mongoDB 는 NOSQL로, 정해진 규정이 없어 어떤 형식으로 데이터를 넣어도 에러가 발생하지 않음 (오류의 위험성)

  • mongoose 를 통해 스키마를 정의하여 정해진 타입에 맞는 데이터만 들어가도록 데이터 검증이 가능

  • mongoDB는 기본적으로 콜백 기반이지만 mongoose를 통해 Promise 사용 가능

  • mongoDB 는 쿼리문 작성 시 JSON 형식으로 작성, mongoose가 제공하는 쿼리빌더로 손 쉽게 쿼리 작성 가능

    mongoose 공식 사이트






+a) Schema 와 Model


Schema

  • 해당 컬렉션의 문서에 어떤 종류의 값이 들어가는지를 정의

  • Schema 를 사용함으로써 데이터가 DB에 담기기 전 유효한 data 인지 검증 가능



Model

  • Schema 를 이용해 만드는 인스턴스

  • 만들어진 Model을 이용해서 데이터를 조회, 추가 하는 등의 DB 내 실제 작업이 가능
    *Model 객체로 데이터를 관리 (수정, 삭제 등)할 때 Schema를 활용해 데이터 유효성을 검사






Mongoose 설치

  • 앞서 MongoDB 설치방식 처럼 새 프로젝트 폴더 내에 yarn init -y 로 새로운 package.json 파일 생성 후 yarn add mongoose 로 mongoose 라이브러리를 패키지에 설치







Mongoose 사용해보기


  • 우선 mongoose 를 불러온 다음 mongoDB 와 연결해 줌






  • 다음으로 Schema 를 불러와서 새로운 Schema 객체 안에 위와 같이 각 입력 데이터 값의 유형을 지정






  • 만들어진 Schema를 토대로 모델 생성

  • 생성된 모델(User)에 데이터 값을 집어넣음






  • 이후 이 값을 save 함으로 써 DB에 저장 됨
  • .then() 으로 저장 후 결과를 콘솔 로그 출력으로 확인






  • 위와 같이 정상적으로 저장된 결과 로그 확인 가능






+a) mongoose를 이용한 유효성 검증



유효성 검증 예제 1

  • Schema 구조 작성 시 required key 값에 true 를 지정해 주면 필수값으로 지정 됨 (해당 값이 입력되지 않을 시 검증처리에서 유효성 실패처리 됨)






유효성 검증 예제 2

  • mongoose Schema 관련 공식 Docs를 찾아보면 Custom validator 라는 기능을 제공

  • 해당 기능을 통해 입력된 값(value)에 대해 직접 정의한 로직대로 진행되도록 구현 가능






  • 위 validate 의 유효성 검증에 따라 유효하지 않은 값일 시 앞서 함수 내에 정의해둔 것처럼 Error를 던짐





유효성 검증 예제 2 (validator 라이브러리 사용)

  • 비슷한 형식으로 npm 에서 제공되는 validator 라이브러리를 패키지에 설치하여 좀 더 편하게 유효성 검증을 할 수도 있음







Mongoose 에서의 Query 작성


  • 앞서 만들어 둔 USer 라는 Model 객체를 활용해서 find 메서드로 User 컬렉션 내의 모든 data를 조회 가능
    *기본적으로 메서드 방식은 mongoDB 와 거의 유사함






  • 결과 로그를 통해 모든 데이터가 조회되는 것 확인 가능






  • select 라는 메서드로 반환 받는 결과값들 중 원하는 값만 골라서 받아오는 것도 가능 (Graphql 의 방식과 유사)







+a) Mongoose의 Collection 네이밍 방식

  • Mongoose 에서는 시스템상의 명명 충돌을 방지하고, 중독 가능성을 배제하며 가독성을 높이기 위해 컬렉션 이름을 복수형으로 지정

  • 즉, Model 생성 시 대문자 형으로 이름을 지정하더라도 내부적으로 복수형 소문자로 바꿔 버림




  • 만약 임의로 지정한 이름을 사용하고 싶다면 위와 같이 model 생성 시 세 번째 인수자리에 지정하고 싶은 이름을 넣어주면 됨
profile
막 발걸음을 뗀 신입

0개의 댓글

관련 채용 정보