본문 바로가기

초심자 MongoDB 시작하기

codeConnection 2025. 3. 4.

MongoDB 가입하기

MongoDB를 사용하는 두 가지 방법이 있다고 한다.

  • 로컬에 설치하는 방법
  • 클라우드 (MongoDB Atlas)를 이용하는 방법

둘 다 해볼 것이지만 이번 포스팅에서는 두번째 방법으로 해보겠다.

 

로컬에 설치하는 방법을 간단히만 말하자면,

이번엔 두번째 방법, 클라우드(MongoDB Atlas)를 이용하는 방법이다.

  • https://www.mongodb.com/atlas 이곳에서 MongoDB 무료 계정을 만든다.
  • 이메일 인증을 완료하고, 꼭 소셜로그인이 아니어도 이메일로 날아오는 Verify 버튼만 누를 수 있으면 된다.

  • 이메일 인증을 완료했기 때문에 기존 계정으로 로그인 하려고 등록을 누르면 아래와 같은 화면이 나온다.

  • 위와 같은 창이 떠서 이메일을 입력하려고 하면 순식간에 다음 창으로 화면이 리다이렉트 된다.

  • MongoDB 전반에서 계정 보호 MFA를 사용하여 MongoDB Atlas, University, Community 및 지원에서 MongoDB 계정을 보호하세요. MFA를 설정하면 계정에 대한 외부 위협으로부터 위험을 줄이는 데 도움이 됩니다.
  • 위와 같은 내용인데 보안을 위해서 2차 인증을 하르는 것으로 해석된다. 시간이 되시면 Set up now를 눌러 진행하시고, 본인은 Remind me later를 눌러 skip 하겠다.

  • 그러면 위와 같은 화면으로 진입한다.

새로운 클러스터 만들기

 

자 그런데, 우리는 MongoDB의 초심자다. 그래서 몇 가지 용어를 짚고 넘어가겠다.

  • MongoDB Atlas라는 클라우드 서비스에 가입하면 Project 0이라는 프로젝트가 자동 생성된다.
    • Project 0이라는 이름은 중요하지 않고 변경 가능.
    • 프로젝트의 개념은 하나의 웹앱(즉 서비스) 개념으로 보면 된다.
    • 예를 들어서 내가 쇼핑몰을 구축하고 싶다면 이 쇼핑몰 자체가 하나의 프로젝트가 되는 것.
  • MongoDB는 프로젝트 단위로 데이터베이스를 만들어서 관리한다.
  • 하나의 프로젝트 안에는 여러 개의 Cluster를 만들 수 있다.
    • Cluster는 데이터베이스의 실행 환경을 의미
      • 하나의 데이터베이스(폴더)라고 이해하면 되겠다.
      • 그런데 보통 하나의 앱에는 하나의 클러스터만 있어도 된다.  하나의 클러스터에 장바구니, 상품정보 등 다양한 데이터베이스를 만들어서 사용하면 된다.
      • 하지만 특수한 경우에는 아래처럼 클러스터를 여러 개로 나눠서 사용할 수 있다.
        • 실제 서비스 중인 앱과 개발 전용 테스트 앱의 데이터가 충돌하지 않도록 클러스터로 분리해서 관리
        • 국가마다 다른 서비스를 제공하기 위해 클러스터를 분리
    • 클러스터는 한 개 이상의 노드(서버)로 구성되고, 데이터를 저장하고 관리하는 역할을 함.
    • 무료 계정에서 제공되는 클러스터는 요금제에서도 확인 가능하지만 Shared Cluster (M0) 제공되기 때문에 단일 노드에서 실행됨.
      • 단일 노드에서 실행된다는 것은 서버 1대에 데이터베이스를 저장한다는 뜻임.
      • 유료 요금제는 M10의 경우 3대의 노드(서버)에 데이터베이스를 분산 저장하기 때문에 데이터가 안전하게 저장됨.
      • 그리고 유료 요금제가 무료 요금제보다 데이터 읽고 쓰는 속도도 빠름.
    • 클러스터 빌드 버튼을 누르면 비로소 MongoDB를 사용할 수 있는 서버가 만들어지는 것임.
  • 클러스터 빌드 버튼을 누르면 무료(M0)와 유료(M10) 요금제를 선택할 수 있음. 본인은 무료 요금제로 선택할 것.

  • Build a Cluster 버튼을 누르니 위와 같이 요금제를 선택하는 화면으로 리다이렉트 되었다.
  • Free를 선택한다.
  • 그 아래로 스크롤을 내리면 결제 정보를 입력하는 것인데, 나는 지금은 과금하지 않을 것이라 더 내려서 Create Deployment 버튼을 눌러 진행한다.

  • Your cluster is being created... 라는 문구가 뜨며 클러스터가 생성되고 있다. 시간이 다소 소요된다.

클러스터 연결하기

  • 왼쪽 사이드 패널에서 Clusters를 클릭하고 Connect를 클릭한다.

  • 데이터베이스에 접근 가능한 UsernamePassword를 설정한다. 그리고 Create Database User를 클릭한다.
    • 이것은 MongoDB 계정을 적는 것이 아니라, 프로젝트를 생성한 관리자가 임의로 설정하는 것이고 개발자에게 전달하는 내용이다.
    • 개발자는 해당 내용으로 URI를 생성해서 코드를 통해 Cluster에 접근할 수 있다.
    • 자 그런데 여기서 Password를 설정할 때 @ 같은 기호가 중간에 들어가면 골뱅이를 기준으로 .env 파일에서 골뱅이 뒤만 인식하는 오류가 있는 것 같다. 따라서 특수문자를 빼고 작성하도록 하자. 랜덤하게 제너레이팅 하는 기능도 있다.
    • 만약 여기서 Database Access Admin 설정을 잘못했거나 수정하려거나, 추가하려면 왼쪽 사이드 패널에서 Database Access에서 처리 가능하다. (아래 사진)

  • 그러면 위와 같은 페이지가 나온다.
  • 클러스터에 연결하기 위한 몇 가지 설정을 더 해야 한다고 알리는 내용이다.
  • 클러스터를 사용하기 위해서는 3가지의 프로세스를 더 진행해야 한다.
    • (1) 연결 보안 설정을 해야 한다. (2) 연결 방법을 선택해야 한다. (3) 연결하면 된다.
  • 클러스터에 연결하기 위해서는 클러스터를 보호하고 시작하라고 한다.
    • 현재 아이피 주소를 알려주며, 이 아이피 주소는 로컬에서도 클러스터에 접속이 가능하도록 설정되었다고 알려 준다.
    • 그리고 이후에 아이피를 추가하여 클러스터에 접속 가능한 사용자를 더 늘릴 수 있다고 알려 준다. 이건 처음에 내가 작성했기 때문에 완료됐다고 하는 것.
    • Atlas 클라우드를 이용해서 코드를 작성하려면 개발자는 이 두 개가 모두 허용되어야 한다. IP주소도 승인되어 있어야 하고, 사용자 아이디와 패스워드도 갖고 있어야 연결이 가능하다.

  • 버튼을 눌러 다음 페이지로 넘어가면 2단계(연결 방법 선택)화면으로 진입한다.
  • 밑의 Access your data through tools는 별도의 소프트웨어나 라이브러리를 통해 몽고디비에 접근하는 방식이고, 우리는 코드로 직접 연결할 것이니 Connect to your application을 클릭하자.

  • 마지막 연결 단계이다.
  • 1번에서 Node.js를 선택하고 버전은 later(가장 최신) 버전으로 선택. 만약 본인이 계속 프로그래밍을 하는 사람이 아니라면 Node.js가 최신이 아닐 수 있으므로 확인하자.
  • 2번에서 npm 명령어를 복사해서 프로젝트 터미널에 입력.
    • 몇개 더 필요한 라이브러리를 넣었다.
      • express : 웹 서버. Node.js에서 HTTP 요청을 처리하는 웹 서버 프레임워크.
      • mongoose : MongoDB와 연결하고 데이터를 쉽게 관리하는 ODM(Object Data Modeling) 라이브러리.
      • cors : 다른 도메인에서 API를 호출할 수 있도록 CORS 정책을 설정.
      • dotenv : MongoDB 연결 정보 (URI, 비밀번호 등)을 .env 파일에서 안전하게 관리.
npm install express mongoose cors dotenv
  • 3번에서 Connection string을 복사.
    • 단 <db_password> 부분은 아까 데이터베이스 접근 가능 유저로 설정했을 때 지정한 것으로 바꾸라고 나와있다.
mongodb+srv://<username>:<db_password>@cluster0.cg0zk.mongodb.net/?retryWrites=true&w=majority&appName=Cluster0
  • 근데 위 코드를 그래도 쓰지 말고, 민감한 내용이 포함 돼 있으니 환경변수(.env)에 저장하고 꺼내오는 것이 좋을 것 같다.
  • .env 파일을 만들고 아래 내용처럼 환경변수로 만든다.
MONGO_URI=mongodb+srv://your_username:password@cluster.mongodb.net/myDatabase?retryWrites=true&w=majority
PORT=5000
  • 이후 프로젝트 루트 폴더에 아래 코드를 입력해서 MongoDB와 연결한다. (server.js)
// server.js

require("dotenv").config();
const express = require("express");
const mongoose = require("mongoose");
const cors = require("cors");

const app = express();
app.use(express.json());
app.use(cors());

// ✅ MongoDB 연결
mongoose.connect(process.env.MONGO_URI, {
  useNewUrlParser: true,
  useUnifiedTopology: true,
})
  .then(() => console.log("✅ MongoDB 연결 성공"))
  .catch(err => console.error("❌ MongoDB 연결 실패:", err));

// 서버 실행
const PORT = process.env.PORT || 5000;
app.listen(PORT, () => console.log(`🚀 서버 실행 중: http://localhost:${PORT}`));
  • 위 코드는 MongoDB를 실행하고 Express 서버를 실행하는 코드이다.
  • 그런데 MacOS의 경우 5000번대 포트를 Mac 시스템 파일이 점유하고 있어, 포트를 아무리 킬해도 좀비처럼 살아나는 것 같다. 그래서 .env 파일에서 포트를 5000번이 아닌 6000번으로 바꿔주었다.

기존 데이터 이전하기

MongoImport 설치

위까지 완료되었다면 몽고DB의 데이터를 준비해야 한다.

본인은 이미 사용 중인 JSON 데이터가 있었고, 이것을 MongoDB에 이전하여 기본 데이터를 만들고자 한다.

 

그러려면 먼저 mongoimport가 필요하다.

 

https://fastdl.mongodb.org/tools/db/mongodb-database-tools-macos-arm64-100.11.0.zip

위에서 본인의 OS 버전에 맞게 설치한다.

 

그리고 압축을 풀면 위와 같은 파일이 생성된다.

bin 폴더를 우클릭 한 후 터미널에서 열어준다. 

이 폴더에 있는 실행 파일을 시스템에서 사용할 수 있도록 옮겨줄 것이다.

 

Intel Mac 환경

sudo mv * /usr/local/bin/

 

M1/M2/M3 환경

sudo mv * /opt/homebrew/bin/

 

그리고 다시 터미널로 돌아와 아래 명령어로 잘 설치가 되었는지 확인한다.

mongoimport --version

MongoDB 설치하기

brew tap mongodb/brew

 

터미널에 위 명령어를 입력해서 Homebrew를 이용해 MongoDB 공식 저장소를 추가.

 

brew install mongodb-community@6.0

이후 위 명령어를 입력하여 mongodb community를 설치.

 

brew services start mongodb-community@6.0

설치가 완료되면 mongodb community를 실행.

 

만약 mongodb가 정상적으로 실행되었는지 확인하려면 아래 명령어를 입력.

mongosh

 

기존 JSON 데이터 몽고디비에 삽입하기

mongoimport --uri "mongodb://localhost:27017/<데이터베이스이름>" --collection <컬렉션이름> --file ./<JSON파일경로> --jsonArray

 

 

댓글