sitelink1 https://blog.naver.com/pass4u/220027954372 
sitelink2  
sitelink3  
extra_vars4  
extra_vars5  
extra_vars6  

Connection pooling을 사용하는 법은 매우 쉽다.

앞의 예제의 경우에는 전체가 하나의 connection만 사용하기 때문에 동시에 많은 요청이 들어올 경우 제대로 처리가 되지 않는다.

Connection을 만드는 부분을 살펴보면 DB Connection을 만드는 방법과 크게 다르지 않다.

여기에 몇가지 인자를 추가 지정할 수 있는데, connectionLimit은 pool에 담을 수 있는 최대의 connection 수이다. 

여기서는 20개로 설정하였다. (디폴트는 10)

다음으로 사용한 옵션이 waitForConnection이라는 옵션인데, true로 되어 있으면 Pool내에 가용한Connection이 없을 경우에 Connection이 반납되기를 기다리고, false로 되어 있으면, Connection이 없을 경우 바로 에러를 리턴한다.

 

var pool = mysql.createPool({

    host    :'localhost',

    port : 3306,

    user : 'terry',

    password : 'asdf1234',

    database:'terry',

    connectionLimit:20,

    waitForConnections:false

});

 

 

 

 

실제로 테스트를 해보면 재미있는 점이, Pool이 생성되도, 실제로 connection이 만들어지지 않는다. 

Pool.getConnection시에, 유휴 connection이 없을 경우에만 connectionLimit 범위안에서 connection을 생성한다.

아쉬운 점이 자바 엔터프라이즈에서 사용하는 Connection Pool의 경우 min/max 값을 정해서 자동으로connection pool의 사이즈를 조정한다거나, 각 Connection을 health 상태를 주기적으로 검사해서 문제가 있는 것은 끊는다거나 등의 기능이 되는데, 거의 기능이 없다. (장애 대응이 쉽지 않을 듯)

 

Pool을 사용해서 Query를 해보자. 

앞에서 구현한 select * from users를 pool로 구현해주면 query 전에pool.getConnection으로 싸주고, getConnection의 callback 함수안에서 두 번째 인자로 넘어온connection 객체를 이용해서 쿼리를 수행하면 된다.

 

//select all

app.get('/users'function(req,res){

    pool.getConnection(function(err,connection){

        var query = connection.query('select * from users'function (err, rows) {

            if(err){

                connection.release();

                throw err;

            }

            console.log(rows);

            res.json(rows);

            connection.release();

        });

        console.log(query);

    });

});

 

 

 

 

여기서 주의할점은 connection을 사용한 후에, 반드시 connection.release 를 이용해서 pool에connection을 반납해야 한다.

특히 에러가 났을때도 connection을 반납해야 하는 것을 잊지 말아야 한다.

이렇게 connection을 반납하지 않아서 유휴 conneciton이 pool에 남아있지 않는 현상을 connection leak이라고 하는데, connection pool을 사용할 때 상당히 자주 발생하는 장애이기 때문에 반드시 꼼꼼하게 처리하기 바란다. (나중에 leak이 발생하면 찾기도 어렵다.)

 

 

 

 

 

 

 

 

 

 

 

 

번호 제목 글쓴이 날짜 조회 수
56 Node.js로 ES6 코드 실행하기 (Babel) file 황제낙엽 2023.01.07 3
55 자바스크립트 CommonJS 모듈 내보내기/불러오기 (require) file 황제낙엽 2023.01.07 1
54 Node.js에서 ES 모듈(import/export) 사용하기 file 황제낙엽 2023.01.07 1
53 CommonJS 와 ES 의 Module 시스템 황제낙엽 2023.01.07 1
52 [session] 기본 - Express-session 기반 로그인 세션 관리 황제낙엽 2022.01.03 1
51 [session] 기본 - 2 file 황제낙엽 2022.01.03 0
50 [session] 기본 - 1 황제낙엽 2022.01.03 1
49 [T아카데미] Node.js 프로그램 기초부터 응용까지 강좌 모음 황제낙엽 2021.03.15 29
48 Node.js 에서 Bulk INSERT 를 하는 방법 (multi insert) 황제낙엽 2021.02.02 663
47 mysql, mysql2 모듈 버전 비교 황제낙엽 2021.01.31 268
46 [T아카데미/Node.js 프로그래밍] 프로그램 흐름 제어 (콜백지옥, Async, Promise) file 황제낙엽 2021.01.27 17
45 ORM 툴 Sequelize file 황제낙엽 2021.01.27 12
44 [connection과 pool-05] pool 생성이 너무 많은 경우의 database에서의 에러 - Too many connections file 황제낙엽 2021.01.27 50
43 [connection과 pool-04] connection pool 에서의 Transaction을 이용한 commit 과 rollback 황제낙엽 2021.01.27 64
42 [connection과 pool-03] mysql.createPool 과 connection.query 황제낙엽 2021.01.27 383
41 [connection과 pool-02] mysql.createPool 과 pool.query 황제낙엽 2021.01.27 23
40 [connection과 pool-01] mysql.createConnection 과 connection.query 황제낙엽 2021.01.27 39
39 [T아카데미/Node.js 프로그래밍/MySQL] createPool, getConnection 의 간단한 예제 (강의 예제) 황제낙엽 2021.01.27 49
38 여러 개의 데이터 베이스 연결을 동시에 관리하는 PoolCluster 황제낙엽 2021.01.16 2205
» connetion pooling 과 connection leak 황제낙엽 2021.01.16 35