프로젝트/아침 루틴
DB 설정하고 MySQL connection pool 사용하기 / try-catch와 비동기 고민
케케_
2024. 11. 1. 17:31
DB 설정
mariadb.js
//sql 모듈 소환
const mysql = require("mysql2");
//db와 연결 통로 생성
const pool = mysql.createPool({
host: "localhost",
user: "root", //디비 접속 아이디
password: "root", //디비 접속 비범
database: "my_routine", //접속 원하는 데이타베이스명
connectionLimit: 5, // 최대 연결 수
});
module.exports = pool;
- 우선 데이터 베이스를 설정하기 위한 파일을 따로 생성해줬다.
- 강의를 들었을 땐, 그냥 createConnection만 사용했는데, 지피티에서는 계속 pool로 연결하는 코드가 나왔다. 알아봤더니 pool이 더 효율적인 방식으로 현업에서 더 많이 사용할 것 같아. pool을 사용해보기로 했다.
- 디비 파일을 sql를 사용하는 폴더에 require로 불러오면 된다.
routineRoutes.js
- 나중에 컨트롤러로 뺄 예정이지만, 우선 라우트 파일에 api를 구현하고 있어 이 파일에 추가했다.
const pool = require("../mariadb");
- pool 변수로 받아줬다.
- 루틴 수정 코드 : 코드가 가장 짧아 한 눈에 보여 수정 api를 가져왔다
- sql도 우선 임의로 만든 코드이다.
router.post("/", (req, res) => {
let sql =
'INSERT INTO my_routine.routines (userId, name, description, duration, createdAt, priority) VALUES (2, "일기", "아침마다 일기를 써",10,"2024-11-1","1");';
pool.getConnection((err, conn) => {
console.log("connection_pool POST in 루틴추가");
if (err) return res.status(400).json({ message: "Connection 실패" });
conn.query(sql, (err, results) => {
if (err) return res.status(400).json({ message: "잘못된 요청으로 실패" });
return res.status(201).json(results);
});
conn.release();
});
});
- pool.getConnection()
- 이 메소드로 connection을 가져와 연결한다.
- conn.query()
- sql 사용은 createConnection를 사용할 때와 같았다.
- conn.releasee()
- pool 사용 후 pool을 반환하는 메소드로 필수인 코드
- 쿼리 실행 후 반환
고민 중
- 비동기식 await/async 로 구현하다가 어쩌다 보니 그 부분이 빠져버렸다. 개념 정리가 안돼있기도 하고 이 부분은 나중에 바꿔도 될 것 같다는 생각이다. 일단 구현을 더 하다가 마지막이나 문제가 됐을 때 바꾸도록 해야겠다.
- 위 과정에서 try catch문은 비동기 작업에선 필요없다 (이유를 찾아봐야겠다)는 지피티의 말로 try-catch를 안했는데, 어쩌다 보니 비동기식도 try-catch도 안한 코드가 됐다. 나중에 비동기식으로 꼭 바꿔야겠다. try-catch를 쓰려는 이유는 if로 계속 처리하는 것보단 try-catch가 가독성이 좋고 효율적이라고 한다.
--> try-catch와 비동기의 관계를 다시 알아봐야겠다.