안녕하세요 이번 시간에는 Create 또는 Insert기능에 대해서 알아보겠습니다. 일단 무언가를 데이터베이스에 넣어야 조회도 하고, 수정도 하고, 삭제도 하겠죠? 그래서 Create를 먼저 알아봅니다.
CRUD
대부분의 데이터베이스에는 CRUD라고 불리는 기능이 있습니다. Create, Read, Update, Delete의 약자로 데이터베이스의 자료를 생성, 조회, 수정, 삭제하는 기능입니다. 오늘은 그 중에서 Create에 대한 것을 하는 겁니다.
Create
전 시간에 cmd에 mongod --dbpath C:\mongodb\data를 했던 거 기억하시나요? 이게 되어 있는 상태여야 이후 과정을 할 수 있습니다. cmd를 하나 더 켜봅시다. 그리고 C:\mongodb\bin에 가서 mongo를 칩니다. 다음과 같이 뜨면 connecting to: test 밑에 쿼리를 입력할 수 있습니다. test는 DB의 이름입니다. 다른 DB를 사용하고 싶으면 use [DB이름]하세요.
데이터를 입력하기에 앞서 컬렉션부터 만들어봅시다. 컬렉션이란 SQL에서는 테이블과 비슷한 개념입니다. 데이터를 구분짓는 기준이라고 보셔도 됩니다. 예를 들면, 제 홈페이지에는 사용자 컬렉션, 포스트 컬렉션, 댓글 컬렉션, 카테고리 컬렉션이 있습니다. 사용자 데이터 따로, 포스트 데이터, 댓글 데이터 따로 모아둔 겁니다.
몬스터 컬렉션을 한 번 만들어볼까요? 만약 쿼리 입력이 안 된다면, DB를 재시작하세요. mongodb --dpath 했던 cmd를 껐다가 다시 켜고 연결하면 됩니다. 컬렉션을 만드는 법은 간단합니다. 그냥 컬렉션 안에 데이터를 넣으면 컬렉션은 자동으로 생깁니다. 컬렉션의 이름은 항상 복수형으로 합니다.
슬라임(Slime)이라는 몬스터를 만들 건데요. 필드는 이름, hp(체력), xp(경험치), att(공격력)입니다. 필드는 SQL에서 column과 같습니다. 속성명을 뜻합니다. SQL에서는 column이 고정되어 있어 column에서 정하지 않은 데이터를 넣으면 오류가 발생하지만 몽고DB는 그런 게 없습니다. 애초에 필드를 정의하는 부분도 없죠. 그냥 넣고 싶은대로 자유롭게 넣으면 됩니다.
db.monsters.save({ name: 'Slime', hp: 25, xp: 10, att: 10 }); // WriteResult({ nInserted: 1 })
이렇게 입력하면 WriteResult 객체가 반환됩니다. nInserted: 1이라고 나와있는데요. 1개의 다큐먼트가 입력되었다는 뜻입니다. 다큐먼트(document)가 바로 데이터의 단위입니다. SQL에서는 row라고 불리죠. 하나의 문서를 넣은 겁니다. 진짜 제대로 들어갔는지는 아직 Read 기능을 배우지 않아서 모르겠지만 믿어봅시다.
컬렉션은 다큐먼트를 만들면 자동으로 만들어진다고 했는데, 한 번 확인해보죠. show collections 하면 컬렉션 목록이 나옵니다. 아래를 보면 monsters와 system.indexes가 있네요. monsters는 우리가 만든 거고, systems.indexes는 원래 있던 겁니다. 나중에 index 기능을 배울 때 사용되는 컬렉션입니다. 어쨌든 잘 만들어졌군요.
save가 바로 몽고DB에서 데이터를 만드는 메소드입니다. save 말고도 insert, insertOne, insertMany가 있습니다. insertOne과 insertMany는 몽고DB 3.2 버전에서 insert를 대체하기 위해서 만들어졌습니다. 각각 하나의 새로운 다큐먼트를 만들거나, 여러 개의 다큐먼트를 만듭니다. 그러나 여전히 save와 insert가 자주 쓰입니다. save와 insert는 살짝 다릅니다. 그 내용은 Update 기능 시간에 알려드리겠습니다.
데이터가 하나만 있으면 심심하니까 두 개 정도 더 만들어봅시다. insert 메소드를 이용해 한 번에 여러 개를 추가할 수 있습니다.
db.monsters.insert([{ name: 'Skeleton', hp: 50, xp: 20, att: 20 }, { name: 'Demon', hp: 500, xp: 200, att: 200 }]);
Demon은 보스급 몬스터입니다. 좀 많이 세죠?
다음 시간에는 조회 기능인 Read(Find)에 대해 알아보겠습니다! 아까 넣은 다큐먼트가 잘 있는지 봅시다.
2018-06-05T00:16:26.567+0900 E QUERY [thread1] Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed :
connect@src/mongo/shell/mongo.js:251:13
@(connect):1:6
exception: connect failed 이런식으로 뜨는데 해결 방법이 있나요 ? 구글링 해서 스택오버플로우에 답변글 따라 해도 안되고.. 재설치해도 안되네요 ㅠㅠ..