본문으로 바로가기
 

AWS RDS

RDS(Relational Database Servide) 관계형 데이터베이스(RDBMS)를 생성하고 확장할 수 있는 서비스 DB 인스턴스를 손 쉽게 생성하고 관리하며 성능 확장도 할 수 있고 여러모로 편리하다. 장애에 대비한 Failover,..

darrengwon.tistory.com

 

 

 


 

 

우리는 sequelize라는 ORM을 활용하여 DB를 구성한 적이 있습니다. 이번에는 SQL을 활용하여 DB를 활용해봅시다.

 

* AWS RDS를 생성했다는 가정 하에 포스팅이 진행됩니다. 파라미터 그룹을 utf8, utf8-general-ci 및 퍼블릭 액세스가 가능하다고 체크했습니다. 

 

 

 

🧷 HeidiSQL 설치 및 DB, TABLE 생성

 

HeidiSQL은 관계형 데이터베이스 GUI 중 가장 유명한 툴로 정평이 나있습니다. 제가 보기에도 Workbench보다 더 편리하고 이용하기에도 좋으니 앞으로는 이걸 사용할 예정입니다. (안타깝게도 제작자가 mongoDB는 제작할 예정이 없다고 합니다) 홈페이지로 접속하여 다운로드를 진행합시다.

 

HeidiSQL - MariaDB, MySQL, MSSQL, PostgreSQL and SQLite made easy

What's this? HeidiSQL is free software, and has the aim to be easy to learn. "Heidi" lets you see and edit data and structures from computers running one of the database systems MariaDB, MySQL, Microsoft SQL, PostgreSQL and SQLite. Invented in 2002 by Ansg

www.heidisql.com

 

 

설치 이후에는 아래 신규 버튼을 눌러 세션을 생성한 후, RDS를 참고해 호스트명 / IP에는 엔드포인트, 사용자와 암호는 RDS 생성시에 입력했던 그대로 입력하고 포트도 RDS 설정대로 입력합니다.

 

 

 

입력 후 [열기]를 눌러 접속할 수 있습니다. RDS를 GUI 형식으로 보게 된 것입니다.

 

 

이제 여기서 SQL을 이용해 스키마를 설계합니다. 하드 코딩으로 넣어준 값을 떠올려 봅시다.

    {
      id: 1,
      image: "https://placeimg.com/64/64/1",
      name: "홍길동",
      birthday: "945323",
      gender: "남자",
      job: "회사원",
    },

 

이를 SQL로 작성하면 다음과 같습니다.

USE management;

CREATE TABLE CUSTOMER (
	id INT PRIMARY KEY AUTO_INCREMENT,
	image VARCHAR(1024),
	name VARCHAR(64),CUSTOMERCUSTOMER
	birthday VARCHAR(64),
	gender VARCHAR(64),
	job VARCHAR(64)
) DEFAULT CHARACTER SET UTF8 COLLATE utf8_general_ci;

 

여기서 주의할 점은 항상 management db를 사용할 것이기 때문에 항상 상단에 USE management를 적어줘야 한다는 것입니다. 입력을 받아서 DB에 정보를 쌓아야겠지만 빠른 진행을 위해 하드 코딩하도록 하겠다.

 

USE management;

INSERT INTO CUSTOMER VALUES(1, "https://placeimg.com/64/64/1", "홍길동", "960508", "남자", "대학생");
INSERT INTO CUSTOMER VALUES(2, "https://placeimg.com/64/64/2", "유마려", "170508", "남자", "프로그래머");
INSERT INTO CUSTOMER VALUES(3, "https://placeimg.com/64/64/3", "홍미주", "670508", "여자", "디자이너");

데이터를 보니 잘 들어갔다.

 

 

🧷 RDS DB를 express에 연결하기

 

이제 이 RDS 상에 있는 정보들을 express에 불러오도록 하자.

 

0️⃣ mysql 설치

npm i mysql

 

1️⃣ 접속하기 위해 database.json을 생성하였고 .gitignore에 추가해주었다. 사실 이름은 뭐가 되어도 좋다. config.json으로 하고 싶다면 그렇게 하라.

// database.json

{
  "host": "RDS 엔드 포인트[customer-management2.ckcvrfxtjv2y.ap-northeast-2.rds.amazonaws.com]",
  "user": "RDS 유저",
  "password": "RDS 비밀번호",
  "port": 3306,
  "database": "해당 RDS내 사용하고자 하는 DB이름(여기서는 management)"
}
// .gitignore
// git에서 제외된 파일, 폴더는 회색으로 보이니 확인하세요. 중요한겁니다.

#database
database.json

 

2️⃣ app.js에서 mysql, fs 모듈을 설치하고 database.json을 불러와 mysql.createConnection에 입력하여 연결한 후, 쿼리 명령어를 달려 rows를 res.send()로 보내도록합시다.

const fs = require("fs");
const mysql = require("mysql");
const express = require("express");

const app = express();

//port
const PORT = 5000;

//middleware
app.use(express.json());
app.use(express.urlencoded({ extended: true }));

// 불러온 database.json을 파싱하여 conf 객체에 넣습니다.
const data = fs.readFileSync("./database.json");
const conf = JSON.parse(data);

// database.json에 설정한 값을 넣어 연결을 생성합니다.
const connection = mysql.createConnection({
  host: conf.host,
  user: conf.user,
  password: conf.password,
  port: conf.port,
  database: conf.database,
});

// 연결을 수행합니다.
connection.connect();

// 해당 라우터로 접속하면 SQL을 날리고 그 결과물을 전송합니다.
app.get("/api/customers", (req, res) => {
  connection.query("SELECT * FROM CUSTOMER", (err, rows, fields) => {
    res.send(rows);
  });
});

app.listen(PORT, () => console.log(`server on : http://localhost:${PORT}`));

 

성공적으로 연결되면 RDS DB에 담긴 내용을 express로 가져와 활용할 수 있습니다. express에서 front로 res.json, res.send 등으로 정보를 전달하여 활용하면 됩니다.

 

React - Expresss - RDS가 잘 연결 되었는지 확인하기 위해 HeidiSQL에서 INSERT 쿼리를 넣어서 프론트에서 어떻게 반응하는지 확인해봅시다.

 

 


darren, dev blog
블로그 이미지 DarrenKwonDev 님의 블로그
VISITOR 오늘 / 전체