1. MongoDB란?

1. 개념

  • 다목적용 NoSQL로 JSON과 닮은 형태의 Document 기반으로 데이터를 저장하는 데이터베이스

Document란?

  • mongoDB가 데이터를 저장하는 최소 단위
  • 필드와 값의 쌍으로 구성되며, 관계를 갖는 데이터를 중첩 도큐먼트와 배열을 사용하여 1개의 도큐먼트로 표현

    { field : value }
    

2. 특징

1. 도큐먼트 데이터베이스

  • mongoDB는 JSON 형식으로 데이터를 관리하므로 NoSQL 데이터베이스 중 도큐먼트 데이터베이스로 분류된다
  • 데이터 입출력 시에는 JSON 형식의 도큐먼트를 사용
  • 데이터베이스 저장 시에는 이진 포맷으로 인코딩한 BSON(Binary JSON) 형식의 도큐먼트로 변환되어 저장

2. 비 트랜잭션

  • mongoDB는 트랜잭션을 지원하지 않고 각각의 도큐먼트 단위로 처리된다
  • 트랜잭션을 지원하지 않으므로 Commit 또는 Rollback 개념이 없으며 모두 Auto Commit으로 처리된다

▶️ 트랜잭션 정리글

3. 유연한 스키마

  • 스키마의 선언 없이 필드의 추가와 삭제가 자유로운 Schema-less 구조
  • 관계형 데이터베이스와 달리 mongoDB는 컬렉션 내 모든 도큐먼트들의 필드 집합이 동일하지 않고 같은 필드라도 데이터 타입이 다를 수 있는 비정형 스키마이다

4. 비 관계형 데이터베이스

  • mongoDB는 관계형 데이터베이스의 관계(Relationship) 개념이 없는 비 관계형 데이터베이스이다
  • mongoDB는 조인(Join)을 지원하지 않음
  • 대신 임베디드 방식의 도큐먼트 구조를 사용하거나 레퍼런스 방식의 도큐먼트 구조를 사용한 후 애플리케이션에서 조인해야한다.
항목 내용 비관계형 DB 특징과 비교
분산 데이터베이스 현대 어플리케이션 개발자용 분산 DB - 확장성(스케일 아웃)을 위해 분산 시스템 기반으로 만들어짐
document 기반 저장 관련된 데이터를 한 번에 저장 - 테이블 대신 Document 단위로 데이터를 다룸
- JSON/BSON 포맷
스키마 없음 (Schema-less) 스키마가 없고 자유롭게 json 삽입 - 스키마가 고정되어 있지 않고
- 유연하게 데이터 형태를 저장 가능
복잡한 구조 지원 객체 안의 객체 안의 객체… 무제한 가능 - 중첩 구조(Nested Object) 지원
- RDBMS보다 복잡한 데이터 모델링 가능
필요시 스키마 검증 가능 옵션으로 데이터 조건 추가 가능 - validation 기능으로 스키마 제약조건을 설정할 수 있음

3. 장점

행기반의 sql기반인데반해, mongoDB는 json과 유사한 Document기반의 데이터베이스로,
MySQL을 사용했을때는 table을 사용하여 데이터를 봤었는데 mongoDB는 json에서 보던 객체형식으로 데이터를 보여줌

장점 설명
쉬운 데이터 핸들링 - 초보자도 쉽고 빠르게 어플리케이션 개발 가능
- 다양한 데이터 타입을 쉽게 검색, 생성, 수정, 삭제할 수 있음
객체지향적 개발 용이성 - Document 구조가 객체지향 언어와 유사하여 개발이 쉬움
- 복잡한 매핑 계층(ORM) 없이 사용할 수 있음
유연한 데이터 구조 - 스키마가 유연하여, 새로운 비즈니스 요구사항 반영이 쉽고 빠름
- (MySQL은 구조 변경 시 오버헤드 발생)
뛰어난 확장성 - 분산 데이터센터를 지원하여, 데이터 볼륨과 처리량 증가 시 중단 없이 쉽게 확장 가능
- (MySQL은 엔지니어 개입 필요)

4. 단점

분류 설명
트랜잭션 지원이 약함 - 과거에 트랜잭션(ACID)이 불가능
- 4.0 버전 이후 다중 도큐먼트 트랜잭션을 지원하지만, 관계형 DB처럼 강력하지 않음
JOIN이 불편하거나 느림 - 복잡한 조인이 기본적으로 비효율적
- Aggregation Pipeline 같은 기능은 있지만, SQL JOIN처럼 강력하고 직관적이지 않음
데이터 중복과 일관성 문제 - Document 지향 특성상 같은 데이터가 여러 곳에 중복 저장될 수 있음
-중복되면 수정/삭제할 때 일관성 관리가 까다로움
메모리(RAM) 많이 사용 - 자주 조회되는 인덱스와 데이터를 RAM에 올려야 성능이 나옴
- 메모리 부족시 성능 급락 위험
스키마 자유도가 오히려 독이 될 수 있음 - 데이터가 많아지면 데이터 구조가 혼란스러워져 유지보수가 힘들어짐
→ Schema Validation 추가 권장
대형 데이터 연산 성능 저하 - 수백 GB ~ 수 TB 단위의 복잡한 쿼리, 연산은 MySQL, PostgreSQL 같은 RDBMS보다 느릴 수 있음
복잡한 관계 표현이 어려움 - RDB처럼 다대다 관계나 깊은 관계를 표현하는 것이 매우 복잡하고, 비효율적

2. 설치방법

  1. MongoDB 홈페이지 로 이동해서resoucesDOC안의 Server를 누를다.

  1. installation의 Community Editio(무료판)을 누른후 각자의 운영체제에 맞게 설치한다.

MacOS

내경우 맥북이라서 우선 macOS용으로 설치하였다.

1)xcode-select --install를 입력하자.

그런데 나는 canvas 오류때 설치해서 이미 설치되어있다고 떴다.

다시 설치하고 싶다면
sudo rm -rf /Library/Developer/CommandLineTools를 입력하여 지우고,
다시 xcode-select --install 를 입력해서 재설치하면 된다.

2)brew tap mongodb/brew

3)brew install mongodb-community@6.0

1),2),3)의 명령어를 순서대로 입력하면 완료.

위 이미지는 brew로 mongoDB를 설치했더니 brew로 관리하는 mysql도 재시작되었다

4)잘 설치됬는지 확인: mongod 입력

위에처럼 mongod이뜨면 잘 설치된것이다.
mongod command not found 나 mongod is not a command가 뜨면 다시 설치해야한다.

5)실행: brew services start mongodb-community@6.0

6)mongo입력하여 monge shell에 접속하기

따흐흑..zsh는 맨날뜨는거같다…

zsh 오류해결 시도 -> 실패

  1. brew list를 입력하여 mongodb의 버전을 확인한다. 나는 방금받아서 이미 아니까 그냥 진행
    2)brew list mongodb-community@6.0을 입력하면 디렉토리가 나온다. 아래의 경로를 복사한뒤 .zshrc를 터미널에 입력하면 편집기를 연다.

    안열릴경우 vim /.zshrc로 해보자.

  2. insert모드로 바꾸고 export PATH="/opt/homebrew/Cellar/mongodb-community@버전/bin:${PATH}"을 입력 후 :wq로 저장

  3. 터미널에mongo를 입력해서 데이터가 나오면 성공인데 나는 안됨 ㅜㅜ


zsh 오류 해결

  1. 아까 zsh에 써놓았던 경로를 지웠다.
  2. brew install mongodb-community-shell을 입력하여 쉘 설치.
  3. 설치후 터미널에 mongo입력

드디어 쉘에 접속했다..

3. 실행

  1. mongod 또는 mongod --dbpath "bin경로\data\db" 을 입력하여 서버를 실행한다.
    참고로 MongoDB의 기본포트번호는 27017이다.
  2. 터미널을 하나 더 열고 mongo 을 입력하여 클라이언트를 실행한다. 이제 쿼리문을 입력하여 확인할 수 있다.

태그:

카테고리:

업데이트:

댓글남기기