우리는 sequelize라는 ORM을 활용하여 DB를 구성한 적이 있습니다. 이번에는 SQL을 활용하여 DB를 활용해봅시다.
* AWS RDS를 생성했다는 가정 하에 포스팅이 진행됩니다. 파라미터 그룹을 utf8, utf8-general-ci 및 퍼블릭 액세스가 가능하다고 체크했습니다.
🧷 HeidiSQL 설치 및 DB, TABLE 생성
HeidiSQL은 관계형 데이터베이스 GUI 중 가장 유명한 툴로 정평이 나있습니다. 제가 보기에도 Workbench보다 더 편리하고 이용하기에도 좋으니 앞으로는 이걸 사용할 예정입니다. (안타깝게도 제작자가 mongoDB는 제작할 예정이 없다고 합니다) 홈페이지로 접속하여 다운로드를 진행합시다.
설치 이후에는 아래 신규 버튼을 눌러 세션을 생성한 후, 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 쿼리를 넣어서 프론트에서 어떻게 반응하는지 확인해봅시다.
'DB, ORM > 🧊 MySQL' 카테고리의 다른 글
MySQL에서 SQL 파일 사용하기(source), SQL 내보내기 (0) | 2020.07.29 |
---|---|
mysql 패키지) connection pool의 필요성 및 생성 (0) | 2020.07.29 |
(Ubuntu) MySQL 설치 및 환경변수 설정과 접속 (0) | 2020.06.09 |
(Window) MySQL 8 설치 및 환경변수 설정과 접속 (0) | 2020.03.12 |
sequelize ORM를 이용한 MySQL 활용 (0) | 2020.03.12 |