[34일 차] 데이터베이스 심화 (MongoDB)

2025. 3. 14. 09:14·LG 유플러스 유레카/데이터베이스 심화

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
'LG 유플러스 유레카/데이터베이스 심화' 카테고리의 다른 글
  • [33일 차] 데이터베이스 심화 (JPA)
  • [32일 차] 데이터베이스 심화 (MyBatis)
  • [31일 차] 데이터베이스 심화 (공통 코드)
  • [30일 차] 데이터베이스 심화 (Ch08)
문태신
문태신
3대500 백엔드 개발자가 꿈입니다.
  • 문태신
    별 될 시간
    문태신

  • 전체
    오늘
    어제
    • 전체 글 (82)
      • LG 유플러스 유레카 (78)
        • 강의 정리 (5)
        • 소프트웨어 엔지니어링 (8)
        • 알고리즘 (13)
        • 데이터베이스 활용 (5)
        • 미니 프로젝트 1 (3)
        • 데이터베이스 심화 (5)
        • 프론트엔드 이해 (3)
        • 깃허브 특강 (2)
        • 취업 특강 (2)
        • 스프링 프레임워크 (16)
        • 후기 (1)
        • REST API (9)
        • 미니 프로젝트 2 (6)
      • 자격증 (1)
      • 디자인 (2)
      • 감상문 (1)
        • 책 (0)
        • 영화 (1)
  • 인기 글

  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
문태신
[34일 차] 데이터베이스 심화 (MongoDB)
상단으로

티스토리툴바