16. Spring과 MongoDB 연동
16.1 NoSQL
Not Only SQL : SQL만을 사용하지 않는 데이터베이스 관리 시스템
기존의 RDBMS의 한계를 극복하기 위해 만들어진 새로운 형태의 데이터저장소
RDBMS처럼 고정된 스키마가 존재하지 않으며 join을 사용할 수 없음
비정형 데이터를 저장하기 위해 최적화된 저장 방법을 제공함
현실 세계의 모든 데이터가 일정한 틀과 형태를 가지고 있지는 않다.
대화, 채팅, 음악 등
테이블을 만드는 것은 공통적인 속성들을 선택하는 작업
종류 - MongoDB, Cassandra, Redis 등
16.2 MongoDB
16.2.1 개요
NoSQL로 분류되는 Cross Flatform Document 지향 데이터베이스 시스템
전통적인 테이블-관계 기반의 RDBMS처럼 스키마가 고정된 구조가 아닌 JSON 형태의 동적 스키마형 문서를 사용함
* 몽고DB 사용 예 - 이베이, 뉴욕 타임즈 등
Collection 안에 Document 데이터 저장
Document는 일정한 틀을 가지지 않음
Document 내부의 Field 자료형 형식이 달라도 입력 가능하며 각 Document들은 모두 일관된 Field를 가지지 않아도 됨
Table → Collection
Record → Document
16.2.2 설치
http://mongodb.com
Community Server 다운로드
C++로 작성된 오픈소스 문서지향(Document Oriented) Cross-platform 데이터베이스
https://www.mongodb.com/download-center?jmp=homepage#community
Windows Server 2008용 버전 설치
서버가 아닌 일반적인 Windows 7, 10에도 설치 가능함
Complete 으로 설치
mongodb compass는 설치하지 않음(체크 해제)
16.2.3 실행
mongod.exe 서버 실행 파일
mongo.exe 쉘 프로그램
c:\data\db 디렉토리 생성(몽고 db에서 기본적으로 참조하는 디렉토리)
(변경하려면 mongod --dbpath "c:\mongodb\data\db")
cd C:\Program Files\MongoDB\Server\3.6\bin
서버 실행
mongod.exe
새로운 cmd 창을 열어서 몽고디비 쉘 실행
mongo.exe
4) 기본 사용 방법
* sql과의 비교
Insert
SQL : insert into users ("name", "city") values("terry", "seoul")
Mongo DB : db.users.insert({_id: "terry", city: "seoul"})
Select
SQL : select * from users where id="terry"
Mongo DB : db.users.find({_id: "terry"})
Update
SQL : update users set city="busan" where _id ="terry"
Mongo DB : db.users.update( {_id: "terry"}, {$set :{ city: "Busan" } } )
Delete
SQL : delete from users where _id="terry"
Mongo DB : db.users.remove({_id: "terry"})
-- DB 목록
show dbs
-- DB 생성
use testdb
다. MongoDB 인증 설정
1) 관리자 계정 만들기
use admin
db.createUser(
{
user: "admin",
pwd: "1234",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
})
admin 데이터베이스가 생성되고 admin 관리자 계정이 생성된다.
사용권한 참조
https://docs.mongodb.com/manual/core/authorization/
Ctrl+C을 눌러서 mongod.exe와 mongo.exe 프로그램을 종료시킴
mongoDB 서버 인증모드로 재시작
mongod --auth
관리자 계정으로 접속
mongo --port 27017 -u "admin" -p "1234" --authenticationDatabase "admin"
또는
mongo 로 접속한 후
use web
db.auth("web", "1234")
→ 1이 출력되면 인증 성공
라. 실습예제(기본 설정)
1) pom.xml 04;50