미해결
mongoDB 기초부터 실무까지(feat. Node.js)
mongoDB의 참조무결성 제약
안녕하세요, 좋은 강의를 촬영해주셔서 감사히 잘 듣고 있습니다.
다름이 아니라, 강의를 듣고 난 이후 실제 어플리케이션 API 서버를 작성하다가 궁금한 점이 생겨서 질문 드리게 되었습니다.
일반적인 SQL DB를 이용했을 경우에는 스키마에 참조무결성을 지정하고 cascade 등 관련 제약을 지정하면 dbms 단에서 이들이 구현되는 것에 비해서, MongoDB를 이용해서 ODM인 mongoose로 스키마를 형성하는 경우 참조 무결성 제약을 만드는 게 매우 어렵다는 것을 느끼게 되었습니다.
데이터베이스 모델링 자체를 NoSQL 스럽게 진행하여 최대한 nested document 혹은 subdocument를 이용해서 one-document ACID를 구현하고자 하는 철학은 잘 이해되고 그렇게 최대한 진행하였는데요..
개체 자체의 본질적인 속성으로 인하여 collection 간의 ref로만으로 처리할 수밖에 없을 경우에는 이를 활용하였는데, 참조무결성을 구현하기 위해서는 여러 번의 쿼리가 필요한 것을 알게 되었습니다. 여기에서 질문이 좀 있게 되었습니다.#1. 참조무결성 구현을 위하여 multi-document 간의 ACID를 지키기 위해서 transaction을 사용할 수밖에 없었는데, isolation 수준은 document level에서 진행되는 것일까요? 아니면 collection 자체에 쓰기금지까지 지정이 되는 것일까요?
#2. 몽고db 자체가 schemaless이기에 참조 무결성을 위한 지원이 없다는 것은 이해가 되는데, 그럼 실무에서 참조 무결성 제약이 필요한 경우에는 모두 ODM과 같은 tool을 이용하여 server단에서 구현하는 것이 최선일지요? 혹시 다른 더 좋은 방법이 있을지요?#3. 저는 mongoose와 관련된 라이브러리 중 만족스러운 오픈소스 ref > id validator가 없어서 직접 구현해서 사용하고 있는데 혹시 좋은 tool이 있을지 궁금합니다.(심지어 custom validator나 middleware을 이용해 구현할 때에는 순환참조의 문제가 발생할 수밖에 없는 듯하여 RESTful API 혹은 graphQL resolver 단계에서 구현하고 있습니다. 이렇게밖에 할 수 없는지 궁금합니다.)
다시 한 번 좋은 강의 촬영해주신 것에 매우 감사드립니다. 오늘도 좋은 하루 되셨으면 좋겠습니다. 감사드립니다.