본문 바로가기
경일/DATABASE

[mysql] connecting pool (feat.node.js)

by dev_kong 2022. 2. 17.
728x90
728x90

0. 목차

1. 개요

2. connecting pool 쓰는 이유

3. node.js connecting pool 생성

1. 개요

https://kong-dev.tistory.com/125?category=998366 

 

[nodejs] node에서 mySQL 연결(Error: connect ECONNREFUSED ::1:3306)

매우 간단하다. 우선 npm 을 통해 mysql 라이브러리를 다운 받아주자. $ npm init -y $ npm install mysql 다운 받은 라이브러리를 require를 통해 땡겨오고, const mysql = require('mysql') 이제 연결설정을 만..

kong-dev.tistory.com

이런걸 한적이 있다.

사실 그냥 저 포스팅 이후로 db 연결할 때는 계속 저렇게 썼다.

 

connection pool에 대한 존재는 알고있었지만,

써야되는 이유가 와닿지도 않았고 어떻게 쓰는지도 몰랐기 때문,

그런데 오늘 수업을 통해 왜 사용하고, 어떻게 사용하는지 알게되었다.

2. connection pool 쓰는 이유

기존에 연결방식을 이용하는 경우에는,

사용자로 부터 요청이 들어 올때 마다 커넥션을 생성하고 지우고, 생성하고 지우고, 를 반복한다.

과연 이게 효율적인 걸까?

그냥 프로그래밍이나, CS 지식이 없는 사람이 생각해봐도 뭔가 비효율 적이다.

 

이름이 pool 이니까. 자꾸 해수욕장이 떠오른다..

만약 내가 해운대 해수욕장에서 튜브를 빌려주는 장사를한다고 해보자.

손님이 "튜브 하나 빌려주쇼" 하면 나는 그제서야 튜브에 바람을 넣고,

바람이 다 들어간 튜브를 손님에게 대여해준다.

그리고 손님이 "아이고 덕분에 재밌게 잘 놀았수다" 하고 튜브를 반납하면,

나는 또 그 튜브의 바람을 빼고있다.

 

손님이 튜브를 대여하고 반납할때마다 위의 과정을 반복한다고 생각해보자..

상당히 비효율 적이다..

그냥 바람 빵빵하게 넣어놓은 튜브 한 100개 준비해놓고,

손님이 와서 "튜브하나 주쇼" 하면 "옙" 하고 뒤에 쌓여있는 튜브 꺼내주면 된다.

매우 효율적이다.

 

그리고 매우 놀랍게도 connection pool 이 하는 역할도 이거다.

요청이 올때마다 connection 을 생성하는게 아니라,

미리 생성해놓은 connection 을 빌려주고,

다시 반납받는다.

물론 connection을 지우고 다시 생성하는 멍청한 짓은 하지않는다.

 

굉장히 좋은 방법이고 효율적인 방법 같지만, 

단점도 존재한다.

만약 바람이 빵빵하게 들어간 튜브 100개를 보관할 장소가 없다면..?

connection pool 에서는 connection 을 보관하는 장소가 메모리이다.

사용자가 너무너무 많은데, 디비서버의 메모리가 딸린다면, 자연스레 성능이 떨어질 것 이다.

 

대충 구글에서 검색한 사진

3. node.js connecting pool 생성

그 뭐 대충 알겠다.

이제 만들어 보자.

 

const mysql = require('mysql');

const connection = mysql.createConnection({
  host: 'localhost',
  user: 'username',
  password: 'password',
  database: 'test',
});

connection.connect((err) => {
  if (err) throw err;
  console.log('socket open');
});

 

평소에 사용하던 방법이다.

 

그리고

const mysql = require('mysql');

const pool = mysql.createPool({
  host: 'localhost',
  user: 'username',
  password: 'password',
  database: 'test',
  connectionLimit: 5,
});

pool.getConnection((err) => {
  if (err) throw err;
  
  console.log('socket open');
});

요렇게 하면 pool 연결 ^^

728x90
728x90

댓글