EtoC

MongoDB 본문

BackEnd/Database

MongoDB

게리드 2023. 7. 31. 09:10

1. MongoDB란?

1. 개념

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

Document란?

  • 도큐먼트는 HTML과 같은 특정 형식의 태그 구조를 의미한다.
  • mongoDB가 데이터를 저장하는 최소 단위이다.
  • 필드와 값의 쌍으로 구성되며, 관계를 갖는 데이터를 중첩 도큐먼트와 배열을 사용하여 1개의 도큐먼트로 표현할 수 있다.
    { field : value }

2. 특징

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

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

2. 비 트랜잭션

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

🔜 트랜잭션?

3. 유연한 스키마

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

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

mongoDB는 관계형 데이터베이스의 관계(Relationship) 개념이 없는 비 관계형 데이터베이스입니다.
mongoDB는 조인(Join)을 지원하지 않으며, 대신 임베디드 방식의 도큐먼트 구조를 사용하거나 레퍼런스 방식의 도큐먼트 구조를 사용한 후 애플리케이션에서 조인해야한다.

  • 현대 어플리케이션 개발자를 위해 만들어진 분산 데이터베이스이다.
  • document는 관련된 데이터를 한번에 저장하여 MQL(MongoDB query Language)를 이용하여 DB에 접근한다.
  • 대표적인 NoSQL로 MySQL과 달리 스키마를 두지 않아 document에 스키마가 존재하지않으며, 자유롭게 json 형식의 데이터를 넣을 수 있다.
    객체 안의 객체 안의 객체...와 같은 복잡한 구조의 데이터가 제한 없이 들어간다.
    스키마에대한 검증이필요하다면 Collection에대하여 데이터의 조건을 옵션으로 추가할 수 있다.

3. 장점

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

떄문에 간단하게 동작이가능하고 초보자도 이해하기 쉬워 혼자서 작업하기좋다.

  1. 몽고디비는 초보자도 어플리케이션을 쉽고 빠르게 만들수 있으며 다양한 데이터타입을 핸들링할 수 있다. 쉽게 document를 검색할 수 있고, 만들수도 있으며, 수정, 삭제 할 수 있다. 때문에 많은기업들이 몽고디비를 사용한다고한다.
  2. MongoDB가 사용하는 document는 객체지향 프로그래밍에 언어와 비슷하기때문에 개발이 단순하다. mongoDB를 사용하는것 만으로도 객체를 관계형 테이블로 변환하는 복잡한 매핑 계층(ORM)이 사라진다.
  3. MongoDB의 데이터 구조는 유연하기에, 새로운 비즈니스 요구사항에 대해 잘 반영해줄 수 있습니다. 반면, MySQL은 관계형 구조를 변경시키는데 애플리케이션에 큰 오버헤드를 가져옵니다.
  4. MongoDB는 분산 데이터센터에 대하여 스케일링이 가능하며, 데이터 볼륨 및 처리량이 증가함에 따라 중지 없이 쉽게 확장이 가능합니다. 반면, MySQL은 스케일링에 반드시 엔지니어의 작업이 필요합니다.

4. 단점

  1. 사람이 이해하기 편한 장점에 반대로 컴퓨터가 이해할 수 있도록 데이터 검색 전 파싱이 필요하며 이로 인해 검색 속도가 느리다.
  2. 날짜 및 이진 데이터 타입을 지원하지 않음

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)을 순서대로 입력하면 완료.

mongoDB 설치했는데 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를 터미널에 입력하면 편집기를 연다.

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

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

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


zsh 오류 해결

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

드디어 쉘에 접속했다..

3. 실행

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