Mongoose는 MongoDB의 압도적으로 많이 쓰이는 ODM(Object Document Mapping)이다.
그럼 ODM이 뭘까?
Object는 JavaScript의 객체, Document는 MongoDB의 문서다. MongoDB의 document를 Javascript의 object와 1대1로 맵핑해서 바꿔주는 역할을 한다.
MongoDB 자체가 이미 JavaScript인데 왜 굳이 Mongoose를 쓰는 걸까?
Mongoose는 MongoDB에 없는 불편한 점들을 보완해주는 개념과 메소드들을 포함하고 있어 NoSQL DB를 프로그래밍하는데 최적화되어 있다.
Schema 스키마
MongoDB에는 collection을 사용해 자유롭게 데이터를 넣을 수 있다는 장점이 있지만 오히려 이러한 부분이 잘못된 typed의 데이터를 넣는다던지 다른 document 에는 없는 필드를 생성하는 에러를 발생시킬 수 있다. 그래서 데이터를 넣기 전 Node서버 단에서 형식을 필터링 하는 역할을 해준다.
Two-way referencing(양방향 참조)
1:N, N:N 관계 모두 사용할 수 있는 Two-way referencing(양방향 참조)가 있다.
각각의 document에서 서로 참조될 수 있다면 쿼리를 따로 던질 필요없이 바로 연결된 데이터를 가져올 수 있다.
Populate - 하나의 document가 다른 document의 ObjectId를 쓰는 경우 이를 실제 객체로 치환하는 작업이다.