본문 바로가기
DevOps/CI_CD

DevOps) CI/CD 구현하기 AWS RDS MySQL와 Node.js 연동하기 후 도커 이미지 만들기 (9)

by 개발이 체질인 나그네 2022. 4. 15.
반응형

 

 

전 실습 때, AWS RDS 서비스를 통해 MySQL DB를 새로 만들었습니다.

 

이번 실습의 백엔드는 Node.js를 이용하기로 했으니,

Node.js와 DB를 연동한 후, Docker로 이미지를 만들어 베포해보겠습니다.

 

 Node.js와 MySQL 연동은 시퀄라이즈(sequelize)를 이용하여 연동시켜보겠습니다.

 

 


 

 

(1)

 

npm i express sequelize sequelize-cli mysql2

npx sequelize init

먼저 mysql 패키지 설치 후 사진처럼 템플릿을 만들어 진행하겠습니다.

 

 

※ 본 실습은 Node.js 실습이 아닌 서버 구축 실습이기에, 설명없이 진행하며, 백엔드 코드는 더미코드로 간단하게만 이용할 수 있는 내용을 넣었습니다.

 

app.js

▼ 코드 복사 보기

더보기
const express = require("express");
const { sequelize } = require('./models');


const app = express();
app.set("port", process.env.PORT || 3000);

sequelize.sync({ force: false })
  .then(() => {
    console.log('데이터베이스 연결 성공');
  })
  .catch((err) => {
    console.error(err);
  });
  
app.use('/',(req,res,next) => {
    res.send('hello express!!')
})

app.listen(app.get("port"), () => {
    console.log(app.get("port"), "번 포트 연결완료");
  });

 

 

/models/index.js

▼ 코드 복사 보기

더보기
const Sequelize = require('sequelize');
const User = require('./user');

const env = process.env.NODE_ENV || 'development';
const config = require('../config/config')[env];
const db = {};

const sequelize = new Sequelize(config.database, config.username, config.password, config);

db.sequelize = sequelize;
db.Sequelize = Sequelize;

db.User = User;

User.init(sequelize);

// User.associate(db);

module.exports = db;

 

/models/user.js

▼ 코드 복사 보기

더보기
const Sequelize = require('sequelize');

module.exports = class User extends Sequelize.Model {
  static init(sequelize) {
    return super.init({
      name: {
        type: Sequelize.STRING(20),
      },
      age: {
        type: Sequelize.STRING(20),
      }
    }, {
      sequelize,
      timestamps: false,
      underscored: false,
      modelName: 'user',
      tableName: 'users',
      paranoid: false,
      charset: 'utf8',
      collate: 'utf8_general_ci',
    });
  }

//   static associate(db) {
//     db.User.hasMany(db.Comment, { foreignKey: 'commenter', sourceKey: 'id' });
//   }
};

 

/config/config.json

▼ 코드 복사 보기

더보기
{
  "development": {
    "username": "user",
    "password": "[ 본인이 설정한 비밀번호 ]",
    "database": "user",
    "host": "[ RDS 엔드포인트 ]",
    "dialect": "mysql"
  },
  "test": {
    "username": "root",
    "password": null,
    "database": "database_test",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "production": {
    "username": "root",
    "password": null,
    "database": "database_production",
    "host": "127.0.0.1",
    "dialect": "mysql"
  }
}

Dockerfile

▼ Node.js Dockerfile 코드 복사 보기

더보기
FROM    ubuntu:20.04
RUN     apt-get update
RUN     DEBIAN_FRONTEND=noninteractive apt-get install -y nodejs npm

# 2. 소스 복사
COPY    . /usr/src/app

# 3. Nodejs 패키지 설치
WORKDIR /usr/src/app
RUN     npm install

# 4. WEB 서버 실행 (Listen 포트 정의)
EXPOSE 3000
CMD    node app.js

 

Mysql DB

 

현재 실습을 위한 DB에 user DB를 만들고,

users 테이블을 넣어놨습니다.

 

node.js 백엔드에서 user DB와 연동을 시켜놨습니다.

 

 


(2)

 

우분투의 서버에 코드를 전해주기위해, 쥬피터로 load 시켜도되지만, 폴더 자체를 옮기진 못하서, GitHub을 이용하여

서버로 Node.js를 옮기도록 하겠습니다.

 

 

 

git clone [ github repogitory 주소 ]

우분투 서버의 원하는 위치에 해당 주소를 clone해주세요.

  • Username : [ github ID ]
  • Password : [ Access Token ] 

 

* GitHub Access Token 발급 방법

https://rfriend.tistory.com/685

 

[GitHub] Git 토큰으로 인증하기 (a personal access token)

이번 포스팅에서는 GitHub 의 인증 수단인 개인 토큰(a personal access token)을 발급하고 인증하는 절차를 소개하겠습니다. 터미널에서 GitHub 을 사용하다가 아래와 같은 에러 메시시가 나왔다면, 이는

rfriend.tistory.com

 

 

 

 

clone가 완료된 폴더로 가보면, Github에 저장된 코드가 전부 복사된걸 확인 할 수 잇습니다.

 


(3)

 

docker build -t [컨테이너 명] .

docker run -p 3000:3000 web

Dockerfile이 있는 위치에서 build 후, run을 해주세요.

 

저는 3000번 포트를 사용했습니다.

 

*3000번 포트를 사용할 경우 AWS 인바운드 규칙에 3000을 열어주세요.

 

 

결과적으로 3000번 포트와 연결도 잘됬고,

DB 까지 연결 성공한 모습을 볼 수 있습니다.

 


Reference

GitHub Access Token 발급 방법 : https://rfriend.tistory.com/685

 

[GitHub] Git 토큰으로 인증하기 (a personal access token)

이번 포스팅에서는 GitHub 의 인증 수단인 개인 토큰(a personal access token)을 발급하고 인증하는 절차를 소개하겠습니다. 터미널에서 GitHub 을 사용하다가 아래와 같은 에러 메시시가 나왔다면, 이는

rfriend.tistory.com

동빈나 유튜브 : https://www.youtube.com/watch?v=Z4x05HbN_T0&list=PLRx0vPvlEmdChjc6N3JnLaX-Gihh5pHcx&index=11

 

 

 

반응형

댓글