[AWS] AWS 스터디 3주차 회고, 연결한다! DB!

SSO·2022년 5월 25일
0

[AWS] AWS 스터디

목록 보기
2/4

Retrospect


3주차에서는 AWS에서 RDS를 생성하고, 생성한 RDS에 워크벤치로 접속하여 sample node.js 프로젝트를 연동하는 작업까지 배워보았다. 사실 이 작업은 SOPT 5차 세미나에서 배운 내용이랑 겹치는 부분이 꽤 많았어서 복습 겸 했던 것 같다. 다른 부분은 AWS에서 생성한 RDS를 DB로 쓴 것!


🧡 3주차


3주차 시작 ~~ AWS로 들어가줍시다 ~.~

👩‍💻 RDS 생성

💥 로그인 후 RDS 서비스 > 데이터베이스 > 데이터베이스 생성 순으로 클릭
클릭해 새로운 DB를 만들면 된다!

엔진 옵션: MariaDB 선택 (버전은 기본으로 뒀음)
템플릿: 프리 티어 선택 (중요, 선택 안하면 과금 나간다 흑흑)
DB 인스턴스 식별자: DB 인스턴스 이름 지정
사용자 이름, 마스터 암호 (DB 연결에 필요한 계정, 빨간 박스): 지정
인스턴스 구성: 보고 하고 싶은 거 선택
연결-퍼블릭 액세스: 예 (다른 환경에서 DB에 접근 가능하게 한다)

위와 같이 세팅하고 데이터베이스 생성을 클릭하고 RDS 서비스의 데이터베이스를 확인하면 생성한 RDS가 추가되는 것을 확인할 수 있다!


👩‍💻 Workbench(워크벤치) 연결

워크벤츠는 DB를 화면으로 볼 수 있는 GUI 도구이다.
생성한 RDS를 워크벤츠로 연결시켜서 쉽게 DB 봐보자 ~.~

👇 각자 환경에 맞게 선택해서 워크벤치 다운 받기
https://dev.mysql.com/downloads/workbench/

Connection Name: 사용할 이름 지정
Hostname: 생성한 RDS에 접속해서 엔드포인트 주소 복붙! (들어가면 연결&보안 탭에서 확인할 수 있다)
Username: RDS 설정 과정 중 입력한 마스터 사용자 이름
Password: RDS 설정 과정 중 입력한 마스터 암호

모두 입력했으면 Test Connection으로 잘 연결되는 지 확인해본다. Connection이 안되면 거의 계정 정보가 틀렸거나.. 아니면 포트 번호도 확인해주자. (보통 3306이 초기값이긴 함!)

연결 후 들어가보면 생성한 DB들을 쉽게 보고 확인할 수 있다 ㅎㅎ GUI 만세~!~!


👩‍💻 Node.js 프로젝트에서 테이블 생성

node.js 프로젝트 (express)에서 RDS를 연결시켜봤다 (우와) !~!

> .env

DB_PORT= 3306 // 초기값은 3306 (바꿨으면 바꾼 포트 번호)
DATABASE=<DB이름> // RDS 설정 때 지정한 DB 인스턴스 식별자
HOST=<RDS엔드포인트> // RDS에 접속해서 연결&포트에 보이는 엔드포인트를 복붙해주자!
DB_USERNAME=<사용자이름>
PASSWORD=<비밀번호>

먼저 .env 파일을 작성해줘야하는데, 절대절대 노출되면 안되니까 .gitignore에 추가해놓기!

> src/loaders/database.ts

import sequelize from 'sequelize';
import { Sequelize } from 'sequelize';
import config from '../config';

export default new Sequelize(
  config.database as string,
  config.dbUsername as string,
  config.dbPassword as string,
  {
    host: config.host as string,
    port: parseInt(config.port) as number,
    dialect: 'mariadb',
  }
);

여기서는 Maria DB를 사용했기 때문에 알맞은 dialect를 써주고 위 코드와 같이 작성해주자.

> src/config/index.ts

import dotenv from "dotenv";

const envFound = dotenv.config();
if (envFound.error) {
  throw new Error("⚠️  Couldn't find .env file  ⚠️");
}
process.env.NODE_ENV = process.env.NODE_ENV || "development";

export default {
  environment : process.env.NODE_ENV,
  port : process.env.DB_PORT, // 3306
  database : process.env.DATABASE, // RDS 서비스의 DB를 뜻함. create database test;
  host : process.env.HOST, // RDS 서비스의 주소
  dbUsername : process.env.DB_USERNAME, // ID
  dbPassword : process.env.PASSWORD // password
}

index.ts는 SOPT 세미나에서 배운 것처럼 같이 node.js 프로젝트 초기 세팅 방식으로 연결해주었다.

> src/models/User.ts

import {DataTypes, Model} from "sequelize";
import sequelize from "../loaders/database";

export default class Users extends Model {}

// 테이블
Users.init({
  userId : {
    type: DataTypes.INTEGER,
    allowNull: false,
    primaryKey: true,
    autoIncrement: true,
    comment : 'Users 테이블의 Primary key'
  },
  email : {
    type: DataTypes.STRING,
    allowNull: false,
    comment : '사용자 이메일'
  },
  password : {
    type: DataTypes.STRING,
    comment : '사용자의 비밀번호'
  },
  platformType : {
    type: DataTypes.STRING,
    comment : '소셜 로그인 유형'
  },
  signUpAt : {
    type: DataTypes.DATE,
    allowNull: false,
    comment : '회원가입 날짜'
  },
  loginAt : {
    type: DataTypes.DATE,
    allowNull: false,
    comment : '마지막 로그인 날짜'
  }
}, {
  sequelize,
  modelName: 'Users'
});

model 파일도 기존과 같이 init 하여 각 필드를 설정해주면 된다.

프로젝트 실행 후 (yarn dev) 다시 워크벤치를 확인하면 연결해줬던 DB의 스키마 안에 (sohyeon) 작성한 User과 필드가 생성된 걸 확인할 수 있다 ~~ (짝짝짝)



🙇‍♀️ Feeling


캡스톤 프로젝트와 추천 시스템 프로젝트에서 RDS를 써보기는 했지만 제대로 써보지 못해서 아쉬웠었는데 직접 연동하고 테이블까지 만들어볼 수 있어서 AWS와 조금 더 친해진 느낌이다. SOPT 앱잼 때 마구마구 써먹어야지 ㅎㅎ

profile
쏘's 코딩·개발 일기장

0개의 댓글