프로젝트/아침 루틴

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와 비동기의 관계를 다시 알아봐야겠다.