월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
Primary 서버가 다운됐을 때에도 durability가 보장되나요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. Replica Set 강의를 듣고 궁금한점이 생겨 질문드립니다. Primary server가 CUD 작업을 한 뒤에, 죽었다고 가정을 하겠습니다. Secondary server가 Primary로 승급이 될텐데 해당 Secondary server에서도 Primary server의 마지막 CUD 작업이 반영이 되어있나요? Primary server가 죽는 경우에도 비동기적으로 Secondary 서버에 CUD작업이 업데이트 되는건지 궁금합니다.
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
faker2를 통해 blog. comment 생성 시도시의 오류
Error: Blog validation failed: comments.blog: Path `comments.blog` is required., comments.user: Path `comments.user` is required., comments.content: Path `comments.content` is required. at ValidationError.inspect (/Users/yungsu2391naver.com/Desktop/mongodb_nodejs tutorial/inflearn_nodejs-mongodb/node_modules/mongoose/lib/error/validation.js:48:26) at formatValue (node:internal/util/inspect:782:19) at inspect (node:internal/util/inspect:347:10) at formatWithOptionsInternal (node:internal/util/inspect:2167:40) at formatWithOptions (node:internal/util/inspect:2029:10) at console.value (node:internal/console/constructor:324:14) at console.log (node:internal/console/constructor:360:61) at /Users/yungsu2391naver.com/Desktop/mongodb_nodejs tutorial/inflearn_nodejs-mongodb/src/routes/blogRoute.js:26:13 at process.processTicksAndRejections (node:internal/process/task_queues:95:5) { errors: { 'comments.blog': ValidatorError: Path `comments.blog` is required. at validate (/Users/yungsu2391naver.com/Desktop/mongodb_nodejs tutorial/inflearn_nodejs-mongodb/node_modules/mongoose/lib/schematype.js:1330:13) at SchemaType.doValidate (/Users/yungsu2391naver.com/Desktop/mongodb_nodejs tutorial/inflearn_nodejs-mongodb/node_modules/mongoose/lib/schematype.js:1314:7) at /Users/yungsu2391naver.com/Desktop/mongodb_nodejs tutorial/inflearn_nodejs-mongodb/node_modules/mongoose/lib/document.js:2762:18 at process.processTicksAndRejections (node:internal/process/task_queues:77:11) { properties: [Object], kind: 'required', path: 'comments.blog', value: undefined, reason: undefined, [Symbol(mongoose:validatorError)]: true }, 'comments.user': ValidatorError: Path `comments.user` is required. at validate (/Users/yungsu2391naver.com/Desktop/mongodb_nodejs tutorial/inflearn_nodejs-mongodb/node_modules/mongoose/lib/schematype.js:1330:13) at SchemaType.doValidate (/Users/yungsu2391naver.com/Desktop/mongodb_nodejs tutorial/inflearn_nodejs-mongodb/node_modules/mongoose/lib/schematype.js:1314:7) at /Users/yungsu2391naver.com/Desktop/mongodb_nodejs tutorial/inflearn_nodejs-mongodb/node_modules/mongoose/lib/document.js:2762:18 at process.processTicksAndRejections (node:internal/process/task_queues:77:11) { properties: [Object], kind: 'required', path: 'comments.user', value: undefined, reason: undefined, [Symbol(mongoose:validatorError)]: true }, 'comments.content': ValidatorError: Path `comments.content` is required. at validate (/Users/yungsu2391naver.com/Desktop/mongodb_nodejs tutorial/inflearn_nodejs-mongodb/node_modules/mongoose/lib/schematype.js:1330:13) at SchemaType.doValidate (/Users/yungsu2391naver.com/Desktop/mongodb_nodejs tutorial/inflearn_nodejs-mongodb/node_modules/mongoose/lib/schematype.js:1314:7) at /Users/yungsu2391naver.com/Desktop/mongodb_nodejs tutorial/inflearn_nodejs-mongodb/node_modules/mongoose/lib/document.js:2762:18 at process.processTicksAndRejections (node:internal/process/task_queues:77:11) { properties: [Object], kind: 'required', path: 'comments.content', value: undefined, reason: undefined, [Symbol(mongoose:validatorError)]: true } }, _message: 'Blog validation failed' }
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
blog와 user가 존재하지 않을 때...
안녕하세요. 이 강의에서는 blog와 user의 존재여부를 확인한 후 없을 경우 400 status code로 응답하고 있습니다. 제 개인적인 생각으로는 '리소스가 존재하지 않습니다'의 의미를 가진 404 코드가 더 괜찮을 것 같은데 어떻게 생각하시는지 궁금합니다.
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
mongodb compass에서 bad auth : Authentication failed. 문제가 해결되지 않습니다.
compass에 URI 등록해서 Connect하려고 하는데 bad auth가 사라지지 않고 진행되지 않습니다. 계정을 삭제 후 다시 시도해봤는데 시도해 볼 수 있는 다른 방법도 안내해주시면 감사하겠습니다
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
req.body 안 변수가 많을 때 에러처리는 어떻게 해야 좋은가요?
안녕하세요. 올려주신 강의 잘 듣고 있습니다! mongoDB 관련 질문은 아닙니다만, 앞서 강의를 듣다 궁금한게 생겨서요. req.params, req.query 와 같은 변수에 대한 에러처리 관련 질문인데요, 변수가 1-2개일 땐 하나씩 에러 처리를 해도 괜찮다 생각했는데, req.body와 같은 곳에 많은 변수가 들어오게 될 때도 하나 하나씩 에러처리를 해줘야 하는건가요? 아니면 또 다른 방법이 있는건지 궁금합니다.
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
app.post에서 오류가 발생합니다
안녕하세요. 좋은 강의 감사합니다. 오류가 발생하여 질문합니다. postman 코드는 다음과 같습니다. 어느 부분이 잘못되었는지 알고 싶습니다ㅠㅠ 감사합니다.
- 미해결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 단계에서 구현하고 있습니다. 이렇게밖에 할 수 없는지 궁금합니다.) 다시 한 번 좋은 강의 촬영해주신 것에 매우 감사드립니다. 오늘도 좋은 하루 되셨으면 좋겠습니다. 감사드립니다.
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
변수를 참조해서 쓰실때 {}를 왜 하는걸까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 중괄호는 꼭 써야 하는걸까요?
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
강의자료
안녕하세요 강의자료는 어디서 받나요?
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
sudo 붙여도 권한문제가 발생해서~~
안녕하세요~ sudo 붙여도 권한문제가 발생해서 검색하다가 아래 패키지 설치하니깐 되네요 ... 이 패키지가 권한에 관련된거 같은데 설치해서 진행해도 문제가 없을까요 ? sudo apt-get install libcap2-bin
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
한가지 궁금한 점이 있습니다~~
안녕하세요 강의 잘 보고 있습니다! 질문1) 5분 54초에 후기의 블로그엔 인덱스가 안걸려있다는 말씀이 지금 구조에 comments 아래 _id: ObjectId('~~') <- 인덱스처리되어있음 blog: ObjectId('~~') <- 인덱스 처리 안되어있음..그래서 메모리적음 이 말씀이실까요 ? 질문2) 관계라는게 코드상에서 어떤 관계인지 잘 이해가 안가네요 ㅠㅠ 가상필드 만들고 blog: type: Types.ObjectId, ref: 'blog' 연결하고 api 에서 populate로 한게 관계설정한거라고 보면 될까요 ?
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
안녕하세요 배열필터 궁금한점이 있습니다
강의 잘 보고 있어요 질문 너무 자주 남겨 죄송합니다 ..(_ _) 필터를 걸지않고 그냥 검색하려고 했는데 안되는 이유를 도저히 모르겠어서 질문 남깁니다 다른 조건 없이 아이디만 일치하는 조건으로 검색해보려고 시도 해보니 안되더라구요 .. await Blog.updateMany( { 'comments.user._id': userId }, { 'commnets.$.user': user }, { new: true } ); 배열필터로 하면 잘 됩니다 그 이유가 뭘까요 ㅠㅠ await Blog.updateMany( { 'comments.user._id': userId }, { 'comments.$[co].user': user }, { arrayFilters: [{ 'co.user._id': userId }] } );
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
관계설정에 대해서 질문있습니다
이번 강의에서 Blog모델에 Comment를 가상으로 추가하셨는데요~ 그렇게 하는 이유가 있을까요 ? 예로 드실 때 comment 추가하셨다가 이렇게 해도 되는데 가상으로 추가하신다고 하고 이유를 말씀안해주셔서 궁금합니다 관계 설정때문에 그렇게 하신걸까요 ? 그리고 모델 생성하실 때 1대 다 관계는 "다"인 관계쪽에만 연결해주셨는데 "1" 쪽에는 넣어주면 안될까요 ? 예를 들어 User가 다수의 Comment를 가지고 있으니 User(1) Comment(다) 이 구조에서 User 모델에는 Comment를 안가지고 있고 Comment 모델에만 User를 연결한게 궁금합니다 User 모델에도 comment: [ id~~ , ref: 'comment']를 연결해주면 어떻게 되는걸까요 ? 아래처럼요! user: { type: Types.ObjectId, required: true, ref: 'user', }, 그렇게 하면 User모델에 comment가 생겨서 본인이 쓴 코멘트들을 가상 설정안해도 바로 프론트에서 쓸 수 있을거같아서요~ 아니면 User 모델에 에 가상으로 만들어서 연결하고 보내주는게 더 성능이 좋은걸까요 ? 아니면 Comment 모델에서 userid로 검색해서 해당 Comment만 가져오는 api를 만드는게 나을까요 ?
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
최신 faker 설치하지말고 구버전 설치하세요 ...
개발자가 최신버전 다 날리고 잠수탔다네요 ㅠ
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
toObject() 질문있습니다
안녕하세요 6버전부터는 toObject 호출해야된다고 하셨는데 붙여서 해보니 res.json() 결과가 오브젝트아이디만 응답해주더라구요 ~! 오히려 기존 user로 넣은게 유저데이터가 잘 나오는데 버전도 6버전인데 왜 이럴까요 ? 말씀하신 내용이 findById(userId) 여기서 찾은 userId가 실제로 여러가지 담고 있는 객체인데 생성할때는 아이디만 찾아줘서 넣어주고 클라이언트로 응답해줄땐 유저데이터를 다 같이 보내준다고 저는 이해했는데 이게 6버전으로 오면서 정확하게 유저데이터만 찾아줘야된다고 toObject() 붙였던게 아닐까요 ? 왜 붙이니깐 클라이언트 응답에 오브젝트 아이디만 갈까요 ? toObject() 붙인거 const blog = await new Blog({ ...req.body, user: user.toObject() }) //결과 { "title": "to obj 444", "content": "hoho test content", "isLive": true, "user": "61c083ebe39f17bf68fb49e9", "_id": "621132283a6f2a42e78e4a61" } 기존 const blog = await new Blog({ ...req.body, user }) //결과 { "title": "to obj 333", "content": "hoho test content", "isLive": true, "user": { "name": { "first": "333", "last": "33333333333" }, "_id": "61c083ebe39f17bf68fb49e9", "username": "333", "age": 30, "email": "jjongrrr@naver.com333", "createdAt": "2021-12-20T13:23:55.297Z", "updatedAt": "2021-12-20T13:23:55.297Z", "__v": 0, "array": [] }, "_id": "62113070bec114bccbc7da6b" }
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
모델 설정 질문입니다
안녕하세요 수업 잘 보고 있습니다 질문1) 자꾸 아이디 중복된다고 떠서 한참을 헤매다가 왜 그런지 찾았는데 ... 제가 모델 설정할때 requied: true 주고 첫 게시물을 만들면 소스상에서 삭제하고 데이터를 다시 보내도 디비서버엔 바뀌지 않더라구요 ..게시물을 삭제해도 ... 결국엔 comments 자체를 날려버리니 잘 되는데 모델 설정을 다 하고 디비서버에 저장된 것들은 소스상에서 수정하고 디비서버에 적용이 불가능할까요 ? ----- 질문2) 코멘트같은 하위 모델은 어떻게 하는게 더 빠르게 조회할까요 ? 1. 모든 코멘트에서 조회해서 가져오기 const findOneComment = await Comment.findOne({_id: commentId}) 2. 조건을 두개로 나눠서 조회해서 가져오기 const findOneComment = await Comment.findOne({ $and: [ {blog: blogId}, {_id: commentId}] })
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
강의를 듣고 개인 프로젝트를 하다가 궁금한게 생겨서 질문드립니다.
혼자 프로젝트 진행중에 너무 해결이 안되서 혹시나 조언을 얻을 수 있을까 해서 질문을 남깁니다. 강의와 관계가 없는 점 사전에 말씀드립니다ㅠ 죄송합니다 ㅠㅠ shopify와 같은 e-commerce 사이트에서 상품을 등록하는 페이지를 보게되면 상품명, 상품 설명과 같은 string 타입의 인풋이 있고 variations(options)과 같이 object 타입의 여러개의 input을 입력할수 있는 칸들이 있습니다. 아래와 같이요. (예시) 제가 궁금한 것은 이 페이지에 submit버튼이 하나가 있고 이 action으로 모든 변경된 사항을 디비에 적용하고 싶은데요, 이 action하나에 update, create, delete,와 같은 여러가지 변경사항이 있을수 있을거 같습니다. 예를들어 상품명, 상품 설명은 변경이 되고, 어떤 variant들은 추가가 되고, 기존에 있던 variant들은 삭제가 될텐데, 이걸 어떻게 핸들링하는게 좋은 방법인가요? 서버에 여러번의 요청(multiple CRUD oprtaion)을 보내게 되는건가요? shopify사이트가 이와 같은 구조여서 network탭에 들어가서 보았는데 update api를 하나를 호출하였고, payload를 보니 최종적으로 변경된 states만 서버로 보내서 서버에서 추가할 것들은 추가하고 삭제할 것들은 삭제해서 처리를 하는거 같습니다. 그렇다면 서버에서 데이터베이스에 있는 값들을 불러와서 디비에 없으면 추가하고, payload의 states에 없으면 데이터베이스에서 삭제하는 이런 작업을 일일이 해주는 것인가 궁금합니다. 저는 FE에서 데이터를 가공해서 server로 딱 필요한 요청과 데이터만 보내는게 맞다고 생각을했는데 서버에서 이런것들을 쉽게 핸들링할수가 있고 이렇게 logic을 운영하는게 맞는지 궁금합니다. 긴글 읽어주셔서 감사합니다.
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
결제관련 질문드립니다.
강의 잘듣고 있습니다.결제관련 질문 드립니다.무료로 사용을 하다가 일정사용량이 넘으면 사용을 못하게 되면서 유료로 전환하라고 메세지가 날라오는건가요그렇다면 사용량은 어느정도에서 유료로 전환하라고 하는가요답변 부탁 드릴께요
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
강의 잘 보고 있습니다! 한가지 궁금한 점이 있는데요
오브젝트 아이디를 검증하실 때 isValidObjectId() 함수로 하시는데요 ~ 프론트에서 params로 넘어오는 값은 "61c07d24bb241609ebfe7fff" 이러한 문자열 값일텐데 저 함수가 어떤식으로 이게 ObjectId("61c07d24bb241609ebfe7fff")값인지 검증해주는 걸까요 ? 혹시 back에서 front로 넘겨줬던 아이디가 ObjectId("") 이기때문에 front에서 params로 넘겨주는 값도 ObjectId("") 형태인건가요 ? 리액트로 프론트 작업 도중 넘어오는 아이디값을 보면 "" 문자열 형태이고 넘기는 값도 그냥 문자열인데 오브젝트 아이디로 구별되는게 몽구스가 해주는건지 궁금하네요 ㅎㅎ
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
안녕하세요 강의 잘 보고 있습니다 질문 하나 드립니다
이번 강의 내용은 아니지만 여러가지 해보다가 궁금해서 질문 드립니다 혹시 모델안에 배열이 있을 경우 배열안에 특정 id를 검색해서 그것만 수정하는 방법이 있을까요 ? 배열안에 추가는 $push와 삭제는 $pull로 잘 되는데... 수정하려고 보니 id 검색 후 배열 안의 객체 id를 또 검색해야 하는데 아무리 검색해봐도 방법을 모르겠네요 ㅠ.. 지금 모델 구조는 이렇게 되어있구요 const UserSchema = new mongoose.Schema({ username: { type: String, required: true, unique: true, }, name: { first: { type: String, required: true,}, last: { type: String, required: true, } }, age: Number, email: String, array: [ { name: { type: String } } ] }, { timestamps: true, }) 백엔드 코드는 이렇게 요청하고 있습니다 // test app.post('/api/user/test/:userId', async(req, res) => { try { const { userId } = req.params; const user = await User.findByIdAndUpdate(userId, { $push: { array: { name: req.body.name } } }, {new: true}) res.json(user) } catch(err) { console.log(err) } }) app.put('/api/user/test/:userId', async(req, res) => { try { const { userId } = req.params; const user = await User.findOneAndUpdate(userId, { // $pull: { //삭제 // array: { _id: '61c1f85f11fb31321cc79973' } // } }, { new: true }) res.json(user) } catch(err) { console.log(err) } }) 위에 코드는 삭제 코드인데 ..삭제는 조건만 적으면 되니 해당 아이디를 찾아서 pull이 됩니다 아이디를 찾아서 array안에 name 을 수정하고 싶은데 혹시 어떻게 해야 될까요 ?