데이터베이스(MongoDB) 연결하기

345·2022년 11월 19일
0

서버와 템플릿을 구성하였으니, 데이터를 사용하기 위해 데이터베이스와 연결해봅시다.

일반적으로 windows 나 ios 운영체제에 서버를 만들었다면, mongodb 공식 사이트의 가이드를 따라 설치하면 됩니다.

그러나 나의 환경은 wsl2 에 있는 서버 프로젝트와 연결해야했기 때문에...
docker 를 이용하여 mongodb 컨테이너를 만들어서 서버와 연결하였습니다.

  1. wsl2 에 docker 설치하기
    (docker 명령어를 쳤을 때 결과가 나온다면 설치 완료)
  2. 셋업 참고
  3. 볼륨 생성

위 링크의 절차를 거쳐 도커를 설치하고 볼륨을 생성하였습니다.

docker mongodb container 에서 기록한 db 는 컨테이너를 삭제하면 데이터도 같이 사라지기 때문에 생성한 볼륨에 데이터를 연동해줄겁니다.

docker run -it -v 볼륨이름:/data/db -v 볼륨이름:/data/configdb -p 27017:27017 --name mongodb --restart unless-stopped -d mongo:latest

volume 생성 후 위 명령어를 입력해주면...
생성한 볼륨과 컨테이너의 데이터 폴더가 서로 연동됩니다.

포트는 27017 을 사용합니다. docker 호스트의 27017 포트와 localhost 의 27017 포트가 연결됩니다.

보통 localhost 라고 하면 window os 컴퓨터를 쓰는 사용자 입장에서

내 windows 컴퓨터 호스트 아닌가?

라고 생각할 수 있지만, localhost 는 그보단 "자기 자신" 을 의미합니다.

windows 서버 상에서는 windows 가 localhost 입니다.
하지만 wsl2 리눅스 서버는 또다른 linux os 기반 호스트가 별개로 돌아가죠?
wsl2 입장에서는 자기가 localhost 이고 windows 가 192.168... 이런 IP 로 구분되는 다른 호스트입니다.

✅ Mongoose 로 연동하기

mongoose 를 이용하면 JS 로 mongodb 를 이용할 수 있습니다.
나의 서버 프로젝트와 DB 를 mongoose 로 연동해봅시다.

npm i mongoose

mongoose 를 설치해줍니다.

// db.js 파일
import mongoose from "mongoose";

mongoose.connect("mongodb://localhost:27017/데이터베이스이름", {
  useNewUrlParser: true,
  useUnifiedTopology: true,
});

const db = mongoose.connection;

const handleError = (error) => console.log("DB Error", error);
const handleOpen = () => console.log("Connected to DB");

db.on("error", handleError);
db.once("open", handleOpen);

db.js 파일을 생성 후, 위 코드의 내용을 넣어줍니다.

mongoose.connect() 를 이용하면, 해당 주소의 mongodb 와 연결합니다.
wsl2 (localhost) 의 27017 포트와 연결하고 있는데, 현재 이 포트는 도커의 mongodb 컨테이너와 연결되어있습니다.

mongoose.connection 으로 연결된 데이터베이스를 반환해줍니다.

// init.js 파일
import "./db";
import "./models/MyModel"; // 생성한 모델도 포함해줌
import app from "./server";

const PORT = 4000;

const handleListening = () =>
  console.log(`Server listening on http://localhost:${PORT}`);

app.listen(PORT, handleListening);

서버 실행을 위한 init.js 파일을 생성해줍니다.
server.js 파일에는 express 로 만든 app 과 app 의 설정 정보가 들어갑니다.
db.js 파일을 import 하여 DB 의 존재를 알려줍니다.

nodemon 으로 실행시키는 파일에 init.js 를 지정하면, 서버가 실행됩니다.
잘 실행되면 handleOpen 함수에서 정의한대로 "Connected to DB" 라는 문구가 출력됩니다.

프로그램의 실행은 다음과 같이 진행됩니다.

  • import db.js 에서 mongoose 가 mongodb 와 연결됨
  • DB 와 연결된 mongoose 프로세스가 MyModel 이라는 모델의 존재 확인
  • import server.js 로 express 로 로컬호스트에 서버 구동
  • init.js 에서 PORT 를 통해 서버 프로세스가 돌아감

mongoose 는 init.js 로 서버 실행과 함께 돌아가는 데이터 관리 프로그램 정도로 생각합시다.

이제 데이터 처리, 라우팅 처리, 뷰 보여주기를 모두 할 수 있습니다.


✨ mongo shell 사용하기

docker 로 mongodb 컨테이너를 생성하여 사용했는데요,
mongo shell 을 이용하면 편리하게 데이터 조작을 할 수 있습니다.
(전체 데이터 조회나 삭제 등등...)

방법은 간단합니다.

  1. docker run ... 으로 컨테이너 실행
  2. docker exec -it mongo_컨테이너_이름 mongosh 로 mongo shell 실행

위 방법으로 mongo shell 에 접속할 수 있습니다.

🔻 DB 조작하기

mongo shell 에 접속했으니 쉘에서 데이터를 조작하는 간단한 방법을 알아봅시다.
다음과 같은 명령어를 사용합니다.

  • show dbs 로 db 목록 조회
  • use db_이름 으로 해당 db 에 접속
    • show collections 로 존재하는 컬렉션(테이블) 목록 조회
    • db.컬렉션_이름.find() 로 컬렉션의 전체 데이터 조회
    • db.컬렉션_이름.remove({}) 로 컬렉션의 전체 데이터 삭제
profile
기록용 블로그 + 오류가 있을 수 있습니다🔥

0개의 댓글