-
MongoDB Version up에서 발생한 추가 문제사항mongoDB 2022. 6. 6. 12:40
2022.03.09 - [mongoDB] - Nodejs에서 mongoDB, mongoose Version Upgrade
Nodejs에서 mongoDB, mongoose Version Upgrade
이유 legacy system에서 mongoDB version 3.2.11을 replica set으로 사용중인데 현재 몽고는 version 5까지 나왔는데 더 늦게전에 version upgrade를 할 필요를 느꼈다. 방법 서치 mongoDB 공식 문서를 보니 v..
zzihyeon.tistory.com
Dev Server에서는 mongo-message-queue module만 문제가 있었는데 prod서버에서 미처 고려하지 못한 문제를 발견하게 되었다.
1. Node.js mongoose에서 mongo gfs 사용 방식 변경
사실 DB에 file을 올리는 행위는 지양해야 하지만 (쓸데없이 용량을 많이 먹기 때문에 S3와 같은 bucket을 사용하자) legacy코드 유지를 위해 download는 그대로 두고 upload는 작은 용량만 가능하도록 변경한 뒤 유지를 하고 있었다. 평소에 잘 사용하지 않는 기능이기 때문에 mongoDB 3.2 -> 5.0으로 올리는 대 공사를 하면서 미처 확인하지 못했다.
연락을 받고 변경점을 확인했는데 read/write stream을 사용하는건 동일했다. 단지 기존에 gridfs-stream 모듈을 사용해서 mongo gfs를 사용했는데 이를 mongoose에서 지원하는 gridFSBucket을 이용하도록 변경되었다. 이 때, 파일 저장 시 ObjectId를 생성하여 저장하고 이를 meta 정보에 담아야 한다.
const gridfsBucket = new mongoose.mongo.GridFSBucket(conn.db, { bucketName: 'file_bucket', }); const objId = new ObjectId(); const bucketStream = gridfsBucket.openUploadStreamWithId( objId, obj.project + obj.path + obj.filename, { metaData: { field: 'mimetype', value: streamInfo.mimetype, id: objId }, }, ); obj.metaData = { field: 'mimetype', value: streamInfo.mimetype, id: objId }; streamInfo.fileStream.pipe(bucketStream); bucketStream.on('close', function (/*no arguments*/) { return callback(null); });
사용을 잘 안한다고 해도 legacy에 대한 고려를 했어야 했는데 너무 부주의하게 진행한 것 같다. 앞으로는 체크리스트에 포함해서 같이 테스트를 해야 할 것 같다.
2. Validation 기능 강화로 인한 bug 발견
Mongoose에서 schema 선언 시 기존에 nested 된 document에서는 Schema Validation을 하지 않다가 버전이 올라감에 따라 validation 기준이 더 엄격해 진 것 같다. 초창기부터 잘못 작성되어 아무도 모르게 남겨져 있던 문제가 version up을 통해 발견되었다. 이는 매우 간단한 문제라 스키마 수정으로 처리하였다.
사실 모두 좀 더 신경썻으면 문제없이 동작할 수 있었을 텐데 이에 대한 반성을 해야겠다.
'mongoDB' 카테고리의 다른 글
Session 사용하여 여러 collection을 한번에 처리하기 (0) 2024.04.28 mongoDB에서 data history 관리하기 (0) 2022.07.31 MongoDB - index (2) (0) 2022.05.29 MongoDB - index (1) (0) 2022.04.17 MongoDB - Data modeling (2) (0) 2022.04.16