25/03/14 (금)
유난히 길었던 한 주였습니다.
드디어 금요일입니다!
내일이면 드디어 여자친구를 보러갑니다..!
힘내서 수업을 들어보겠습니다.
1. 강의
1.1) NoSQL 및 MongoDB 개요
- NoSQL (Not Only SQL)
NoSQL
- RDBMS와는 다른 방식으로 데이터를 저장하고 관리하는 데이터베이스 시스템
- 스키마가 유연하며, 데이터 구조를 미리 정의하지 않아도 됨
- 분산 시스템 기반으로 고가용성과 장애 허용(Fault Tolerance) 제공
BigData
- BigData != 대규모 데이터
- 엄청나게 많은 비정형 데이터로부터 의미있는 데이터로 정제 및 추출
- 그 데이터로부터 새로운 유의미성을 찾는 작업
- Scale Up vs Scale Out
Scale Up | Scale Out | |
정의 | 단일 서버 성능 향상 | 여러 서버를 추가하여 시스템 확장 |
방식 | 더 빠른 CPU, 더 많은 메모리, 더 큰 스토리지 추가 | 여러 서버를 네트워크로 연결하여 분산 시스템 구성 |
비용 | 초기 비용 높음 | 비용 효율적 |
확장성 | 물리적 한계에 도달할 수 있음 | 이론적으로 무한한 확장 가능 |
구현 복잡도 | 비교적 간단 | 복잡 (분산 시스템 구성해야 하므로) |
장애 허용 | 단일 장애 지점이 될 수 있음 | 고가용성과 장애 허용 기능 |
데이터 일관성 | 단일 시스템에서 관리하므로 일관성 유지 쉬움 | 여러 서버 간 데이터 동기화와 일관성 유지 어려움 |
사용 사례 | 소규모 또는 트랜잭션이 중요한 시스템 | 대규모 데이터 처리 및 고가용성 필요 |
예시 | 기존 서버에 CPU 업그레이드, 메모리 추가 | 클라우드 환경에서 서버 추가, 분산 데이터베이스 |
- MongoDB
- Document-Oriented NoSQL 데이터베이스
- JSON-LIKE 형식의 BSON(Binary JSON) 문서를 사용하여 데이터 저장
- 복제와 샤딩을 통해 고가용성과 확장성을 제공
- 대규모 데이터 저장 및 처리, 실시간 분석 등 분야에 사용
- RDBMS vs NoSQL
RDBMS | NoSQL | |
데이터 모델 | 테이블 기반 (행과 열) | Key-Value, Document, Column-Family, Graph |
스키마 | 고정된 스키마 (데이터 구조 정의) | 유연한 스키마 (동적 데이터 구조) |
트랜잭션 | ACID 트랜잭션 지원 | BASE 모델 (일부 ACID 지원) |
확장성 | 수직 확장 | 수평 확장 (대규모 데이터) |
사용 사례 | 복잡한 쿼리와 트랜잭션 필요한 시스템 (은행, 항공 예약 서비스 등) |
대규모 데이터 저장 및 실시간 처리 (소셜 미디어, IoT, 빅데이터 분석 등) |
1.2) MongoDB, MongoShell 설치
- MongoDB 설치
https://www.mongodb.com/try/download/community-kubernetes-operator
Try MongoDB Community Edition
Try MongoDB Community Edition on premise non-relational database including the Community Server and Community Kubernetes Operator for your next big project!
www.mongodb.com
- MongoShell 설치
https://www.mongodb.com/try/download/shell
Try MongoDB Tools - Download Free Here
Free download for MongoDB tools to do more with your database. MongoDB Shell, Compass, CLI for Cloud, BI Connector and other database tools available.
www.mongodb.com
1.3) DB, Collection, Document 다루기
mongosh --version // 버전 확인
mongosh // 터미널 진입
cls // 화면 정리
use '이름' // db 만들기 (col 있을때만 표시됨)
show dbs // db 표시
db.dropDatabase() // db 삭제
db.createCollection("book") // col 추가
show collections // col 표시
db.book.drop() // col 삭제
db.book.insertOne({bookid : 1, bookname : '이름', publisher : '회사', price : 7000}) // 데이터 추가
db.book.find() // 데이터 표시
db.book.find({}, {title: 1, date: 1}) // {title : 조건, date : 조건} 빼고 출력
db.book.find({condition}, {projection}) // {출력}{제한1, 제한2}
db.book.updateOne({조건}, {변경 내용})
1.4) 기본 CRUD in MongoDB
// Operators
$eq, $ne, $gt, $gte, $lt, $lte, $in
// Sort
db.book.find().sort({bookid:-1})
db.book.find().sort({bookid:-1}).skip(3).limit(2)
db.book.updateOne({bookid:11},{$set:{price:6000, saleprice:5000}}, {upsert:true})
1.5) Aggregation & Pipeline
1.6) Java와 MongoDB 연동
2. 실습
- 강사님 코드
오후 수업
더보기
madang> db.book.find( { price: { $in: [7000, 8000, 10000] } } )
[
{
_id: ObjectId('67d3b1d530f2e98618c4e49c'),
bookid: 1,
bookname: '축구의 역사',
publisher: '굿스포츠',
price: 7000
},
{
_id: ObjectId('67d3b1d530f2e98618c4e4a0'),
bookid: 5,
bookname: '피겨 교본',
publisher: '굿스포츠',
price: 8000
}
]
madang> db.book.find( { price: {$gt: 20000}, bookid: {$lt: 6} } )
[
{
_id: ObjectId('67d3b1d530f2e98618c4e49e'),
bookid: 3,
bookname: '축구의 이해',
publisher: '대한미디어',
price: 22000
},
{
_id: ObjectId('67d3b1d530f2e98618c4e49f'),
bookid: 4,
bookname: '골프 바이블',
publisher: '대한미디어',
price: 35000
}
]
madang> db.book.find(
... {
... $and: [
... {price: {$gt: 20000}},
... {bookid: {$lt: 6}}
... ]
... }
... )
[
{
_id: ObjectId('67d3b1d530f2e98618c4e49e'),
bookid: 3,
bookname: '축구의 이해',
publisher: '대한미디어',
price: 22000
},
{
_id: ObjectId('67d3b1d530f2e98618c4e49f'),
bookid: 4,
bookname: '골프 바이블',
publisher: '대한미디어',
price: 35000
}
]
3. 마무리
- WorkShop
- NoSQL 개요
- MongoDB 개요
- RDBMS vs NoSQL DB
- Scale Out vs Scale UP
- 더 공부할 것
- 공식문서 확인 잘하기
'LG 유플러스 유레카 > 데이터베이스 심화' 카테고리의 다른 글
[33일 차] 데이터베이스 심화 (JPA) (0) | 2025.03.13 |
---|---|
[32일 차] 데이터베이스 심화 (MyBatis) (1) | 2025.03.12 |
[31일 차] 데이터베이스 심화 (공통 코드) (0) | 2025.03.11 |