본문 바로가기
카테고리 없음

spring 26강-1 MongoDB 설치

by avvin 2019. 7. 10.

spring 26강 MongoDB 설치, Spring Boot와 MongoDB 연동 실습 - 회원관리 예제(회원가입, 로그인, 로그아웃)



Spring과 MongoDB 연동


NoSQL (Not Only SQL) 


SQL만을 사용하지 않는 DBMS


기존의 RDBMS의 한계를 극복하기 위해 만들어진 새로운 현태의 데이터저장소


RDBMS처럼 고정된 스키마가 존재하지 않으며 join 불가

비정형 데이터를 저장하기 위해 최적화된 저장 방법을 제공함 


모든 데이터가 일정한 틀과 형태를 가지고 있지는 않음 (대화, 채팅, 음악 등)

테이블을 만드는 것은 공통적인 속성들을 선택하는 작업


종류 : MongoDB(이번 실습에서 사용), Cassandra, Redis 등



MongoDB


(c++로 작성된 오픈소스 문서지향(Document Oriented) Cross-platform DB)


NoSQL로 분류되는 Cross Flatform Document 지향 데이터베이스 시스템

전통적인 테이블 - 관계 기반의 RDBMS처럼 스키마가 고정된 구조가 아닌 JSON 형태의 동적 스키마형 문서를 사용


*MongoDB 사용 예 - 이베이, 뉴욕 타임즈 등


Collection안에 Document 데이터 저장

Document는 일정한 틀을 가지지 않음

Document 내부의 Field 자료형 형식이 달라도 입력가능하며 

각 Document들은 모두 일관된 Field를 가지지 않아도 됨


Table => Collection

Record => Document



지금까지 사용한 RDBMS는 테이블에 정형화된 필드를 만들고 그 형식에 맞게 데이터를 넣었다면


Document는 일정한 틀을 가지지 않으며 모두 일관된 필드를 가지지 않아도 된다.



설치 / 사용


1. http://mongodb.com

Products > MongoDB Server > Download the latest release > Server > MongDB Community Server > MSI(자동 설치) download


>[ Complete ] > Install MongoDB as a Service( PC켜면 자동으로 실행되는 프로그램 ) 체크 


> Install MongoDB Compass 체크 해제 > Install



mongod.exe : 서버 실행 파일


mongo.exe : 쉘 프로그램(쉘 스크립트?) //클라이언트



2. c:\data\db 디렉토리 생성 ( 몽고DB에서 기본적으로 참조하는 디렉토리 )


(변경하려면 mongod --dbpath "c:\mongodb\data\db")


3. cmd창에서 mongod (서버 실행파일) 실행 

1
2
3
4
5
6
Microsoft Windows [Version 10.0.17134.829]
(c) 2018 Microsoft Corporation. All rights reserved.
 
C:\Users\user>cd C:\Program Files\MongoDB\Server\4.0\bin
 
C:\Program Files\MongoDB\Server\4.0\bin>mongod


....


4. 다른 cmd창 열어서 mongo(쉘 프로그램) 실행

1
2
3
4
5
6
7
8
Microsoft Windows [Version 10.0.17134.829]
(c) 2018 Microsoft Corporation. All rights reserved.
 
C:\Users\user>cd C:\Program Files\MongoDB\Server\4.0\bin
 
C:\Program Files\MongoDB\Server\4.0\bin>mongo
MongoDB shell version v4.0.10
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb


....                    

connecting to: mongodb://127.0.0.1:27017

>local : 127.0.0.1 

>port number : 27017



Insert 

SQL 

 insert into users ("name", "city") values("terry", "seoul")

MongDB

 db.users.insert({id:"terry", city:"Seoul"})

Select 

SQL 

 select * from users where id ="terry"

MongDB 

 db.users.find({_id:"terry"})

Update 

SQL  

 update users set city ="busan" where _id ="terry"

MongDB 

 db.users.update( {_id:"terry"}, { $set :{city:"Busan"} } )

Delete 

SQL 

 update users set city="busan" where _id="terry"

MongDB 

 db.users.remove({_id:"terry"})


 db.users.insert({id:"terry", sity:"seoul"})

 >db.users 테이블에서 insert 함수를 호출, json 형식( variable : "value" )으로 데이터 입력


 db.users.find({_id:"terry"})

 >MongoDB에서는 PK를 언더바( _ )로 표시




MongoDB에서는 DB를 만들때 create 명령어로 생성되지 않고

데이터를 처음으로 저장할 때 생성됨


--DB 목록

show dbs


--DB 생성 // 데이터 입력(save) 전까지는 show dbs를 입력해도 목록에 뜨지 않는다.

use testdb


--현재 사용중인 DB 이름

db


-- 전체 데이터베이스 목록

show dbs

 

클라이언트 창에서


> db.memo.save({_id:1, writer:"김철수", memo:"첫번째 메모", post_date:new Date() }) //입력 (붙여넣기 안된다..ㅠ)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
> use testdb
switched to db testdb
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
> db
testdb
> db.memo.save({_id:1, writer:"김철수",memo:"첫번째 메모", post_date: new Date()})
WriteResult({ "nMatched" : 0"nUpserted" : 1"nModified" : 0"_id" : 1 })
>
cs


>>> WriteResult({ "nMatched" : 0"nUpserted" : 1"nModified" : 0"_id" : 1 })

Collection을 먼저 생성하지 않아도 데이터를 저장하는 순간 생성된다.


 "nUpserted" : 1  : update or insert 된 자료

 "_id" : 1  : PK



1
2
3
4
5
6
7
8
9
10
11
> db.memo.save({_id:1, writer:"김철수",memo:"첫번째 메모", post_date: new Date()})
WriteResult({ "nMatched" : 0"nUpserted" : 1"nModified" : 0"_id" : 1 })
> db.memo.save({_id:2, writer:"김수진",memo:"두번째 메모", post_date: new Date()})})
WriteResult({ "nMatched" : 0"nUpserted" : 1"nModified" : 0"_id" : 2 })
> db.memo.save({id:2, writer:"박예진",memo:"세번째 메모", post_date: new Date()})})
WriteResult({ "nInserted" : 1 })
> db.memo.find()
"_id" : 1"writer" : "김철수""memo" : "첫번째 메모""post_date" : ISODate("2019-07-10T09:05:01.171Z") }
"_id" : 2"writer" : "김수진""memo" : "두번째 메모""post_date" : ISODate("2019-07-10T09:10:48.626Z") }
"_id" : ObjectId("5d25abba614e513215470b1d"), "id" : 2"writer" : "박예진""memo" : "세번째 메모""post_date" : ISODate("2019-07-10T09:11:22.344Z") }
>
cs


_id로 save하지 않으면 자동으로 임의의 코드를 입력해준다.


1
2
> db.memo.find({writer:"김철수"})
"_id" : 1"writer" : "김철수""memo" : "첫번째 메모""post_date" : ISODate("2019-07-10T09:05:01.171Z") }
cs




//컬렉션 생성

db.createCollection("customers")


//데이터를 입력하면서 동시에 collection 생성

db.customers.insert( { name:"김철수", age: 22 } )


컬렉션 목록

show collections



[ MongoDB 인증 설정 ]


관리자 계정 만들기 

1
2
3
4
5
6
7
8
9
10
11
12
13
> use admin
switched to db admin
> db .createUser({user:"admin", pwd:"1234", roles:[{ role:"userAdminAnyDatabase", db:"admin"}]})
Successfully added user: {
        "user" : "admin",
        "roles" : [
                {
                        "role" : "userAdminAnyDatabase",
                        "db" : "admin"
                }
        ]
}
>



admin 데이터베이스가 생성되고 admin 관리자 계정이 생성된다.



[ Ctrl + C ] : MongoDB  Server / Client 모두 종료

1
2
3
4
> ^C
bye
 
C:\Program Files\MongoDB\Server\4.0\bin>




>mongod --auth : 아이디, 패스워드를 입력해야 접속할 수 있는 MongoDB 서버 인증모드로 재시작

1
C:\Program Files\MongoDB\Server\4.0\bin>mongod --auth




Client 접속 방법 


1) 서버 인증모드로 시작하고  

    Client >mongo -port 27017 -u "admin" -p "1234" --authenticationDatabase "admin"


2) mongo 로 접속한 후 

>use admin

>db.auth("admin", "1234")


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
C:\Program Files\MongoDB\Server\4.0\bin>mongo -port 27017 -"admin" -"1234" --authenticationDatabase "admin"
MongoDB shell version v4.0.10
connecting to: mongodb://127.0.0.1:27017/?authSource=admin&gssapiServiceName=mongodb
...
...
> ^C
bye
 
C:\Program Files\MongoDB\Server\4.0\bin>mongo
MongoDB shell version v4.0.10
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
 
> use admin
switched to db admin
> db.auth("admin""1234")
1
>



사용권한 참조 

https://docs.mongodb.com/manual/core/authorization/



일반 사용자 계정 만들기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
---
 
> use admin
switched to db admin
> db.auth("admin""1234")
1
> use web
switched to db web
> db.createUser(
... { user:"web", pwd:"1234",
... roles: [ { role:"readWrite", db:"web" },
... { role:"read", db:"reporting"}]
... })
Successfully added user: {
        "user" : "web",
        "roles" : [
                {
                        "role" : "readWrite",
                        "db" : "web"
                },
                {
                        "role" : "read",
                        "db" : "reporting"
                }
        ]
}
>



관리자 로그인 상태에서 일반 사용자 계정을 생성한다.



일반사용자 계정 로그인


1) mongo --port 27017 -u "web" -p "1234" --authenticationDatabase "web"


2) mong 로 접속한 후

>use web

>db.auth("web", "1234")

=>1이 출력되면 인증 성공


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
> ^C
bye
 
//방법 1
 
C:\Program Files\MongoDB\Server\4.0\bin>mongo --port 27017 -"web" -"1234" --authenticationDatabase "web"
MongoDB shell version v4.0.10
connecting to: mongodb://127.0.0.1:27017/?authSource=web&gssapiServiceName=mongodb
...
...
 
//방법 2
---
> use web
switched to db web
> db.auth("web""1234")
1
>
cs