티스토리 뷰
데이터베이스 비교
| 관계형 데이터베이스 (RDBMS) | NoSQL 데이터베이스 |
| 저장할 자료의 구조를 행과 열로 된 표 형태로 관리 | 문서 형태로 자료 저장 |
| SQL을 사용해서 SQL 데이터베이스라고도 함 | SQL을 사용하지 않아서 NoSQL 데이터베이스라 함 |
| 표와 표를 연결하여 사용하기도 함(Foreign Key) | |
| 새로운 필드를 추가, 수정이 쉬움 | |
| 자료를 여러 컴퓨터에 나누어 저장할 수도 있음 |
- NoSQL 데이터베이스는 SQL을 사용하지 않는다. (예 : MongoDB)
- JSON 형식으로 자료를 추가, 수정, 삭제 등의 관리 가능 (SQL 없이 자바스크립트로 DB 관리할 수 있음)
MongoDB
NoSQL 데이터베이스 중 하나, JSON 형식으로 데이터 관리
서버에 데이터베이스를 만들 수도 있고, 클라우드에서 데이터베이스를 사용할 수도 있음. (몽고DB 아틀라스)
MongoDB: 개발자 데이터 플랫폼
업계를 선도하는 모던 데이터베이스를 토대로 구축된 애플리케이션 데이터 플랫폼을 사용해 아이디어를 더욱 빠르게 실현하세요. MongoDB는 데이터를 손쉽게 처리할 수 있도록 지원합니다.
www.mongodb.com
공식 홈페이지에서 우측 상단에 점세개 클릭해서 "무료 체험판 다운로드" 클릭,
계정 가입 후 사용할 수 있다.
계정 최초 등록 시, 프로젝트 생성과 클러스터 생성을 한다.
(클러스터 생성 시, 몽고디비 버전은 무료버전, provider는 aws, 지역 대한민국, cluster명 작성 후 create)
위 처럼 시작해도 되고, 프로젝트를 신규로 추가하여 작업하는 방법을 서술해보겠다.

test 라고 적혀있는 부분이 "프로젝트 명"인데, 프로젝트 명 옆에 화살표 눌러서 신규 프로젝트 생성할 수 있다.
신규 프로젝트를 test라고 생성하였고, 그 밑에 클러스터를 생성해야 한다.
클러스터가 없을 경우, Build a Cluster 로 생성하기

Create Deployment 로 클러스터 생성 완료하기

좀 기다리다 보면 클러스터 생성이 완료된다.
우측 Create 버튼으로 또 다른 클러스터를 생성할 수도 있다. (프로젝트 하위에 여러개의 클러스터가 존재)
클러스터 := 데이터베이스 라고 생각하면 된다.
일단 새로운 클러스터 만들지 말고 아래 과정을 진행했다.

Quickstart 메뉴로 들어가서 데이터베이스에 접근할 때 사용할 아이디와 비밀번호를 등록한다.
계정명은 trvl 로 하여 계정을 생성했다.

밑으로 내려보면 접근가능한 IP 리스트를 관리 할 수 있다.
여기서 등록된 IP만 데이터베이스에 접근 가능하다.
Finish and Close 하면 완료된다.
* 무슨 팝업창이 뜨는데 Hide Quickstart ... 체크 후 확인 눌렀더니 Security 목록에 Quickstart 가 사라졌다...!
* 데이터베이스 계정관리와 IP 관리는 각각 Database Access, Network Access 메뉴에서 할 수 있는듯 하다..
VSCode에서 몽고DB 연결하기
확장 프로그램을 다운로드해서 VSCode 내에서 몽고디비를 사용할 수 있게 해본다.
이걸 깔면 몽고디비 사이트나 몽고디비 Compass를 사용하지 않고 DB를 관리할 수 있다.

mongoDB for VS Code 를 설치한다.
설치가 완료되면 좌측 아이콘 바에 나뭇잎 아이콘이 생긴다.

사이트로 돌아와서 Cluster 메뉴의 Connect 클릭

MongoDB for VS Code 선택

커넥션 스트링 복사 후 Done 하여 창을 닫는다.
* 커넥션 스트링의 <db_password> 영역은 아까 등록한 계정 trvl 의 비밀번호를 입력하는 영역이다.

VS Code 로 돌아와서
나뭇잎 아이콘 클릭 > Add Connection 클릭 > Connection String Connect 클릭

상단에 커넥션 스트링 작성하고, trvl 계정 비밀번호도 맞게 입력 후 엔터 (1234가 비밀번호이다. 실제 비밀번호 아님!)

좌측 CONNECTIONS 에 방금 연결한 클러스터가 표출된다.
그리고 클러스터 하위에 기본 데이터베이스인 admin과 local 이 표출된다.
프로젝트와 디비 연결하기
그 다음으로 프로젝트의 메인 실행파일인 app.js에게 몽고디비를 어떻게 연결하는지 알려주어야 한다.
이때 사용하는 것이 환경변수이다.
환경변수는 환경변수 값을 저장하고 관리하는 파일인 .env 파일에 저장한다.
만약 이 프로젝트를 깃허브와 같은 사이트에 올려서 다른 사람들이 볼 수 있게끔 오픈한다고 가정한다면,
DB접속 정보 같은 데이터는 노출되면 안 된다.
다른 사람에게 노출시키지 않아야 하는 내용들은 .env 파일에 환경 변수로 저장해 두고,
깃허브에 소스를 공개할 때는, .env 파일을 push하지 말아라 라고 지정해주면 된다

myContacts 프로젝트 아래에 .env 라는 신규파일을 생성한다

.env 파일에 변수명=커넥션스트링/데이터베이스명 형태로 선언했다.
이때 변수명은 보통 "대문자"로 지정한다.
코드 안의 다른 변수들과 환경변수를 쉽게 구별하기 위함이다.
DB_CONNECT 라는 변수명에 커넥션스트링/myContacts 로 작성하였다.
커넥션스트링 뒤에 슬래시를 붙이고 데이터베이스명을 작성하면, 해당 데이터베이스가 생성이 되고,
그 데이터베이스에 연결하겠다 라는 의미가 된다.
mongoose (몽구스) 와 .env 모듈 설치
- 몽구스: node.js 환경에서 몽고디비를 사용하기 쉽게 만들어주는 몽고디비 관련 모듈
- .env 모듈: .env 파일의 데이터를 가져와서 사용할 수 있게 해주는 모듈
실행중인 서버 종료하고 npm i mongoose dotenv 해서 두 개의 모듈을 한번에 설치한다.
npm i mongoose dotenv

설치 완료
이제 프로젝트와 몽고디비 연결할 환경은 모두 갖춰졌다.
app.js 파일 안에다가 데이터베이스 연결하는 코드를 작성해도 되지만,
node.js는 되도록 모듈화 시켜서 코드를 작성하는 게 좋다.
데이터베이스 연결하는 코드를 별도의 파일로 만들어서, app.js에 불러오도록 작성하자.
config 파일 생성하기
프로젝트 하위에 config 폴더 생성 후, 하위에 dbConnect.js 파일을 생성한다

dbConnect.js
const mongoose = require('mongoose'); //몽구스 모듈 가져오기
require('dotenv').config(); //dotenv 모듈가져와서 그 안의 config() 함수 실행
//디비 연결시, async await 사용하여 비동기 처리 꼭!
const dbConnect = async() => {
try{
const connect = await mongoose.connect(process.env.DB_CONNECT);
console.log("DB Connected");
}catch(err){
console.log(err);
}
}
module.exports = dbConnect;
위 코드를 위에서부터 차근차근 살펴보자.
const mongoose = require('mongoose');
require('dotenv').config();
mongoose 모듈을 가져와서 mongoose 라는 변수에 할당한다.
dotenv 모듈을 가져와서 config 함수를 실행한다. (이 경우에는 변수 할당이 필요 없으니 실행만 한다.)
const dbConnect = async() => {
(...생략...)
}
그리고 디비 연결 작업을 한다.
디비 연결은 시간이 걸리는 작업인데, 자바스크립트의 특징에 의해 비동기로 실행될 가능성이 있으므로,
반드시 "비동기 처리"를 해주어야 한다. 비동기 처리는 async-await 를 사용할 것이다.
async()=>{}로 비동기 처리하여 DB 연결을 할 것이고, 연결이 되면 dbConnect 변수에 할당해줄 것이다.
async() => {} 의 대괄호 {} 안에 시간이 걸리는 곳 (DB연결 주소를 호출하는 부분) 앞에 await 선언을 하면 비동기 처리가 된다.
//디비 연결시, async await 사용하여 비동기 처리 꼭!
const dbConnect = async() => {
try{
const connect = await mongoose.connect(process.env.DB_CONNECT);
console.log("DB Connected");
}catch(err){
console.log(err);
}
}
async 함수 안에서 try-catch 작업을 해주었다.
DB 연결 시 오류가 발생할 경우 catch문으로 처리해준다.
그리고 DB를 연결하는 부분인 mongoose.connect(process.env.DB_CONNECT)
이 부분이 시간이 걸리는 작업이므로, 그 앞에 await 선언을 한다.
await 선언으로 인해, DB 연결이 되고 나서 console.log("DB Connected") 가 출력될 것이다.
mongoose.connect(process.env.DB_CONNECT) 는
mongoose 모듈의 connect 함수로 파라미터에 해당하는 주소로 DB 연결을 실행하라! 라는 뜻이고,
process.env.DB_CONNECT는 .env 파일에 작성한 DB_CONNECT 환경변수 값이다.
process.env 는 .env 파일에 있는 내용을 가져오는 객체이고, require('dotenv').config()가 선행되어야 사용할 수 있다.
module.exports = dbConnect;
마지막으로 이 dbConnect.js 파일을 모듈화 해준다.
이제 이 모듈을 app.js 에 불러와서 사용할 수 있다.
app.js
const express = require('express');
const dbConnect = require('./config/dbConnect');
const app = express();
dbConnect(); //DB 접속
//메인 화면
app.get("/", (req, res)=>{
res.send("Hello Node!");
})
//바디파서 미들웨어 등록
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
//라우터 파일
app.use("/contacts", require("./routes/contactRoutes"));
app.listen(3000, () =>{
console.log("서버 실행중");
})
상단에 const dbConnect = require('.config/dbConnect'); 로 모듈을 가져오고,
dbConnect(); 로 DB를 실행하는 코드를 추가 작성해주었다.

nodemon app.js 하여 서버를 실행했더니,
app.listen 으로 3000번 포트가 잘 열렸고, DB 연결도 정상적으로 되었음을 확인했다.
https://youtu.be/iFN5zKuvTK4?feature=shared
https://youtu.be/jdvxPa0VVHI?feature=shared
'백엔드 > Node.js' 카테고리의 다른 글
| [Node.js] 라우터, 컨트롤러 분리하기 (0) | 2025.02.25 |
|---|---|
| [Node.js] 몽고DB 주요 개념(도큐먼트, 컬렉션, 스키마), 스키마 생성 (0) | 2025.02.16 |
| [Node.js] 바디파서 미들웨어 (0) | 2025.02.15 |
| [Node.js] express의 미들웨어, 라우터 미들웨어, 라우팅 파일 분리 (0) | 2025.02.13 |
| [Node.js] express로 다양한 라우팅 작성하고 테스트 하기, 썬더 클라이언트 설치 (0) | 2025.02.12 |
