nodejs mysql 연동하기

7887 단어 nodejsdbmysqldb

nodejs 에서 mysql 연동하기

express를이용해서 코드를짠뒤 mysql에 연동하는법을 알아보자

var express = require("express");
var router = express.Router();
const mysql = require("mysql");
// const connection = mysql.createConnection({ -> 1
//   host: "127.0.0.1",
//   user: "root",
//   password: "???",
// });
const pool = mysql.createPool({
  connectionLimit: 10, // connection이 10개이하로 이루어질떄 pool에있는 connection을 a api이용할때 connection사용 b api 이용할때 2번째 connection 이용하고 1번째 connection반남
  host: "127.0.0.1",
  user: "root",
  password: "???",
  database: "ex11",
});

/* GET home page. */
router.get("/", function (req, res, next) {
  // mysql db 연결 1
  // connection.connect((err) => { -> 1
  //   if (err) {
  //     console.error("error connecting ", err.stack);
  //     return;
  //   }
  //   console.log("coonected as id " + connection.threadId);
  //   res.status(200).json({ id: connection.threadId });
  //밑에부분은 잘안씀 왜냐하면 Pool에 쿼리를돌려도되지만 새로운 connection을 열확률이 크기떄문
  // pool.query("SELECT 1+1 AS solution", (error, results) => {
  //   if (error) throw errow;
  //   console.log("The solution is: ", results[0].solution);
  // });
  // mysql db 연결 1
  pool.getConnection((err, connection) => {
    if (err) throw err; // 서버는 절대죽으면안되기때문에 handling하는 코드가 있어야함
    //Use the connection
    connection.query("SELECT * FROM products", (error, results) => {
      //When done with the connection, release it.
      connection.release(); //무조건해줘야함

      console.log("getConnections : ", results);
      res.status(200).json({ results });
      // Handle error after the release
      if (error) throw error; //이거는 쿼리에대한 error
    });
  });
});
// });

module.exports = router;

Connection Pool 개념

데이터베이스에 연결된 Connection을 미리 만들어 둔후 Pool에 보관하였다가 필요할 때 Pool에서 Connection을 가져다 사용한 후, 다시 Pool에 반환하는 기법이다. Connection Pool을 이용하면 여러 Connection을 이용할 수 있기 때문에 더 큰 부하를 견딜 수 있다.

또한 기존처럼 필요할때 마다 Connection을 생성하고 닫지 않아도 되기 때문에 어플리케이션의 성능향상 또한 기대할 수 있다.

쉽게생각하면 connection 방법과 pool에대해서 poolconnection을 재사용할수있게 사용하는 기법이고 생각하면 좋다.

const pool = mysql.createPool({
  connectionLimit: 10, // connection이 10개이하로 이루어질떄 pool에있는 connection을 a api이용할때 connection사용 b api 이용할때 2번째 connection 이용하고 1번째 connection반남
  host: "127.0.0.1",
  user: "root",
  password: "???",
  database: "ex11",
});

mysql.createPool(_config) : 새로운 Pool 생성
pool.getConnection : pool에서 Connection 가져오기

Connection Pool 모듈화

getConnection() 함수를 exports하여 아래와 같이 필요한 곳에서 랩핑하여 쉽게 사용할 수 있다.

사용후 꼭 conn.release()를 통해 Pool에 Connection을 반환한다.
connetion pool

router.get("/", function (req, res, next) {
// mysql db 연결 1
  pool.getConnection((err, connection) => {
    if (err) throw err; // 서버는 절대죽으면안되기때문에 handling하는 코드가 있어야함
    //Use the connection
    connection.query("SELECT * FROM products", (error, results) => {
      //When done with the connection, release it.
      connection.release(); //무조건해줘야함

      console.log("getConnections : ", results);
      res.status(200).json({ results });
      // Handle error after the release
      if (error) throw error; //이거는 쿼리에대한 error
    });
  });
});

그후 getConnection코드를 이용해

pool에있는 connection을 사용을한다.

예를들어 a api이용할때 connection사용 b api 이용할때 2번째 connection 이용하고 1번째 connection반납 이런식으로 작동이된다.

위와 같이 Connection Pool을 생성할 수 있다. 그후 Pool에서 Connection을 얻어서 사용할 수 있다. 사용한 후 반드시 conn.release()를 통해 Pool에 반납해야한다.

    connection.query("SELECT * FROM products", (error, results) => {
      //When done with the connection, release it.
      connection.release(); //무조건해줘야함

      console.log("getConnections : ", results);
      res.status(200).json({ results });

connection.query같은경우는 db에 query명령어를 입력하는것인데 위에코드는 products라는 을 선택하는 코드이다.

테이블만들기

이제 db에 연결한 table을 한번 만들어보자.

먼저 만들고싶은 폴더에서 오른쪽마우스로 클릭해 create table을 선택하자.

그다음은 만들고 싶은 table의 이름을 적는다.
나의경우는 ex1 이라는 table을 만들겠다.
밑에부분에는 table의 column을 지정한다.

예시로 3개의 column을 만들어보자.

여기서 주의할점은 varchar을 선택할때 밑에 설정을 utf8로 설정해줘야 한글이 인식이된다.

설정이 완료된후 apply버튼을 클릭해 만들고싶은 table의 query를 자동입력 받게하고 선택을 해주면 table이 완성된다.

완성된 table을 살펴보면 지금은 table의 raw에 아무런 값을 입력하지 않았기때문에 빈값이 나온다.

다음으로 raw값을 입력해보자.

위의 사진처럼 입력했을떄 idx는 굳이 입력을 안해줘도 되는데 그이유는 아까 처음 table설정할때 ai(auto increment)를 해줬기때문에 자동으로 숫자가 설정이된다.

만들고싶은 raw를 추가한뒤 다시 apply를 클릭하면
완성이됐다고 나온다.

이제 table에 추가한 값이 잘나오는지 확인해보자

먼저 connection을 재사용할수있게 connection.release();코드를 실행하고

req의 응답코드인

res.status(200).json({ results });

의 결과를 보면 db에 저장한

값이 제대로 됐다는것을 알수있다.

데이터 추가

이제 데이터를 추가해보자

데이터 추가 코드는 INSERT INTO 해당테이블 (c1, ...) VALUES (r1 ,...)으로 구성된다.

잘된걸 알수있다.

이제 client에서 데이터를 입력받아 table에 정보를 추가하는법을 알아보자.

위의 코드와 다르게 client에게 정보를 받는 코드는

req.body이므로 이걸 destruting분할과 key만 가져와
{name,price}로 정보를 가져온다.

그후 위의 코드와 다르게 INSERT문에서 values의 부분을 템플렛 리터럴을 사용해서 표현하면된다.

그후 위와같은 방법을그대로 하면 데이터가 table에 저장이된걸 볼수있다.

수정

다음은 table데이터 수정에 대해서 알아보자

수정은 put메서드를 사용해서 나타낸다.

그후 UPDATE쿼리문을 이용해 해당 테이블을 선택하고 바꿀 column(name,price,idx)을 선택하고 바꾸고싶은값 (${name},{price},{idx})을 선택하면 된다.

사실 post부분과 거의 유사한데 바뀌는부분은 수정할 name,price,idx를 선택하고 그걸 client에서 어떻게 수정할지만 정하면 끝이다.

수정할 부분의 name,price,idx를 정한뒤 서버로 보내면

수정이 잘된것을 볼수있다.

삭제

마지막은 삭제이다.

DELETE쿼리문을 선택하고 삭제할 idx를 선택하면 끝이다.


삭제할 idx를 선택한뒤


실행해주면 삭제가 된것을 알수있다.

좋은 웹페이지 즐겨찾기