City At Night

[MernStack] Blog 만들기 4. MongoDB 설정 및 연결(내용 추가 수정됨) 본문

MernStack

[MernStack] Blog 만들기 4. MongoDB 설정 및 연결(내용 추가 수정됨)

Wuny 2021. 3. 5. 00:20
728x90
반응형

1.  MongoDB 기본적인 셋팅

MongoDB 홈페이지 접속 후 Start free를 눌러 회원가입 후 로그인을 해준다.

그 다음 프리티어로 선택을 하고 클러스터를 생성한다.(가장 가까운 지역 일본을 선택한다)

 

그 다음 좌측 Network Access로 이동하여
Add IP Address를 눌러 나의 아이피 주소를 등록한다.

 

 Add current ip adress를 눌러 자신의 아이피를 입력시킨다.
나는 이미 내 아이피를 등록을 하여 current Ip Address가 안보이지만 처음인 사람들은 보이니 클릭한다.
Network Access는 내가 등록한 아이피에서만 데이터베이스에 접근 할 수 있게 한다
집이나 사무실에서만 한다면 추가를 해주고 Comment로 그 아이피주소의 명칭을 넣어주자.

 

 

다시 좌측 메뉴에서 클러스터로 이동 하여  Connect를 눌러준다.

 

UserName과 Password 를 작성하고

 

Choose a connection method를 누르면 다음과 같은 화면이 나오는데 Connect your application을 선택한다.

 

이제 2번에 있는 코드를 복사한다.

미리 설명하면, <password>에는 내가 설정한 password를 myFirstDatabase에는 내 DB이름을 넣는다.
password는 내가 설정한 pasword이며,  myFirstDatabase는 내가 지정하면 된다.

여기까지 MongoDB의 기본적인 구축은 끝이다. 이제 연결만 시키자.

 

2. 내 MongoDB URI 등록

server 폴더 밖에 .env 라는 파일을 만들어주고 

MONGO_URI = "mongodb+srv://dbAdmin:admin1234@base.c8auh.mongodb.net/myBlogDB?retryWrites=true&w=majority"

MongoDB클러스터에서 복사한 URI를 붙여 넣어 준다음 password와 db이름을 수정해줍니다.
비밀번호는 절대 노출해서는 안되기때문에 .env라는 파일에 따로 설정해두는 겁니다.
(패스워드인 admin1234와 DB이름인 myBlogDB는 하나의 예시입니다.)

 

3. .env 에 설정한 DB URI를 서버와 연결하기

server폴더 아래에 config라는 폴더를 만들어주고 index.js 파일을 만들어준다.

import dotenv from "dotenv";
dotenv.config();

export default{
    MONGO_URI : process.env.MONGO_URI,
}

.evn에서 적었던 MONGO_URI를 변수로 불러오고 있기 때문에 우리는 실제 URI를 알 수 가 없으므로 보안측면에서 좋다.
그럼  MONGO_URI 역할은 config/inex.js에서 export default로 모듈화한 {MONGO_URI}가 하고 있다.
실제로 mongoDB를 연결하기 위해 app.js에서 mong_uri를 추가해야하는데 위에서 모듈화해버린 {MONGO_URI}를 가져다 쓰면 된다.

4. app.js에 mongo_db 붙이기

import express from 'express';
✓import mongoose from "mongoose";
✓import config from './config';

const app = express()
✓const {MONGO_URI} = config

✓mongoose.connect(MONGO_URI,{

   useNewUrlParser : true,
    useUnifiedTopology: true,
✓}).then( ()=> console.log("MongoDB connecting Success!!!")).catch((e)=> console.log(e));

app.get('/')

export default app;

✓는 추가된 코드이다. 
mongoDB를 사용하기때문에 mongoose를 불러오고
위 3번에서 설명을 다 했듯이 DB URI를 불러오기 위해서 .config를 불러왔다.
mongoose.connect는 MONGO_URI를 연결하고 옵션값으로 useNew~,useUnified~ 를 true로 주고
연결이 되면 "success!"라는 로그를 띄운다. 아니면  error 메시지를 남긴다.

(node:9662) DeprecationWarning: Listening to events on the Db class has been deprecated and will be removed in the next major version.
MongoDB connecting Success!!!

DB가 잘 붙은걸 볼 수 있다.
다음 버전부터 DB Class가 삭제된다는 경고를 주고 있다.

models/post.js 에 

mongoose.set('useCreateIndex'true
를 추가해주면 사라진다.

 

이제 나중에 회원가입 기능 ,글 쓰기 기능이 완성되어 회원가입을 하거나 글을 쓰면 mongo DB 클러스터에서 확인할 수 있다.

추가된 내용 ++
보안적인 측면을 위한 라이브러리와  외부자원을 요청할 수 있는 라이브러리, 로그를 관리하는 라이브러리를 추가하겠습니다.
첫번째 포스팅에 대략적으로 설명이 되어있지만 다시 추가 설명 하겠다.

보안척인 측면을 위한 라이브러리
hpp,helmet

외부자원 요청 라이브러리
cors :  도메인, 프로토콜포트가 다른 서버의 자원을 요청할 수 있게 하는것.

CORS 같은 상황이 발생하면 외부 서버에 요청한 데이터를 브라우저에서 보안 목적을 차단한다. 때문에 서버나 클라이어트 단에서 특정 도메인 혹은 모든 도메인을 허용하도록 설정하여 해결해야 함.

로그 관리 라이브러리
morgan: morgan은 nodeJS 에서 사용되는 로그 관리를 위한 미들웨어 이다.
로그 관리가 쉽다.

--------------------------수정(추가) 2021.03.14------------------------------------

<app.js>
hpp,helmep,cors,morgan을 사용하기위해 import 해준다.

import hpp from 'hpp';;
import helmet from 'helmet';
import cors from 'cors'
import morgan from 'morgan'

----------------------------------------------------------------------------------------------

app.use(hpp())
app.use(helmet())

app.use(cors({origin : true, credentials : true}))
app.use(morgan("dev"))

const {MONGO_URI} 밑에 추가해준다.

그 다음 

app.use(express.json())

이 코드는  json형식으로 자원을 보내거나 받는다고 지정하는것이다.
python과 android에서는 내가 하나하나 파싱해서 사용했는데.. .여긴 아닌가보다..너무 간단한데..?

다음 포스팅에서는 라우팅이라는 것을 해볼 것이다.
사용자가 서버에게 요청을 하면 그 요청에 맞는 뷰를 보여주는것이다.


 

728x90
반응형
Comments