프로필

프로필 사진
Popomon
Frontend Developer
(2020/12 ~)

    카테고리

    포스트

    [Node/Rest API] MongoDB 접속모듈 만들기

    2020. 11. 10. 02:06

    꿈가게: To Do List - iOS

    꿈가게: To Do List - Android

    MongoDB 접속 URL

    다음과 같이 몽고디비의 접속 URL에는 아이디와 비밀번호가 입력되고, 데이터베이스 아이피가 추가로 입력됩니다. 제가 일하는 팀에서는 개발자에게는 데이터베이스의 아이피를 별도의 호스트 파일에 등록하여 localhost 또는 dbhost 와 같은 도메인 이름으로 사용하는 것을 추천합니다. 아이피를 알지 못하면 계정정보를 알아도 해킹할 수가 없다고 합니다. 그리고 직접 데이터베이스에 접속해서 데이터를 변경하는 경우에는 항상 VPN을 사용하도록 설정하여 보안을 유지할 수 있습니다.

     

    대부분의 해킹은 잘못된 코딩에 의해서 발생합니다. 따라서 JSON API를 설계하는 경우에 접근 키가 없이 데이터를 조회한다던가, 버전이 오래된 SQL 라이브러리를 사용하는것은 보안에 위협이 될 수 있습니다.

     

    mongodb+srv://<아이디>:<비밀번호>@<아이피>/<데이터베이스명>?retryWrites=true&w=majority

     


    데이터베이스 접속 모듈

    mongoose를 이용한 코드입니다. 환경변수 파일(.env)를 생성하여 DATABASE_URL을 정의한 후, 아래와같이 모듈 코드에서 사용할 수 있습니다. 환경변수 파일은 .gitignore 파일에 추가하여 업로드 되지 않도록 주의해야 합니다.

     

    // 환경변수 파일 불러오기
    const dotenv = require("dotenv");
    dotenv.config();
    
    // 몽구스 로딩
    const mongoose = require("mongoose");
    
    // 모듈 생성
    const connect = async () => {
      const DATABASE_URL = process.env.DATABASE_URL;
      try {	
        let connection = await mongoose.connect(DATABASE_URL, {
          useUnifiedTopology: true,
          useNewUrlParser: true,
          useFindAndModify: false,
          useCreateIndex: true
        });
    
        console.log("MongoDB connected");
        return connection;
      } catch (err) {
        console.log(err);
        console.log(`Connection failed with config ${DATABASE_URL}`);
        process.exit(1);
      }
    };
    
    // 모듈 익스포트
    module.exports = connect;