서버와 템플릿을 구성하였으니, 데이터를 사용하기 위해 데이터베이스와 연결해봅시다.
일반적으로 windows 나 ios 운영체제에 서버를 만들었다면, mongodb 공식 사이트의 가이드를 따라 설치하면 됩니다.
그러나 나의 환경은 wsl2 에 있는 서버 프로젝트와 연결해야했기 때문에...
docker 를 이용하여 mongodb 컨테이너를 만들어서 서버와 연결하였습니다.
- wsl2 에 docker 설치하기
(docker 명령어를 쳤을 때 결과가 나온다면 설치 완료)- 셋업 참고
- 볼륨 생성
위 링크의 절차를 거쳐 도커를 설치하고 볼륨을 생성하였습니다.
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 를 이용하면 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 로 서버 실행과 함께 돌아가는 데이터 관리 프로그램 정도로 생각합시다.
이제 데이터 처리, 라우팅 처리, 뷰 보여주기를 모두 할 수 있습니다.
docker 로 mongodb 컨테이너를 생성하여 사용했는데요,
mongo shell 을 이용하면 편리하게 데이터 조작을 할 수 있습니다.
(전체 데이터 조회나 삭제 등등...)
방법은 간단합니다.
docker run ... 으로 컨테이너 실행docker exec -it mongo_컨테이너_이름 mongosh 로 mongo shell 실행위 방법으로 mongo shell 에 접속할 수 있습니다.
mongo shell 에 접속했으니 쉘에서 데이터를 조작하는 간단한 방법을 알아봅시다.
다음과 같은 명령어를 사용합니다.
show dbs 로 db 목록 조회use db_이름 으로 해당 db 에 접속show collections 로 존재하는 컬렉션(테이블) 목록 조회db.컬렉션_이름.find() 로 컬렉션의 전체 데이터 조회db.컬렉션_이름.remove({}) 로 컬렉션의 전체 데이터 삭제