mysql2 패키지의 일반 커넥션과 커넥션 풀

송준섭 Junseop Song·2023년 10월 19일

JavaScript

목록 보기
4/5
post-thumbnail

참고

pool의 장점과 단점

mysql2 패키지에서는 다음과 같이 커넥션 객체를 생성할 수 있음

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

그러나 매 요청마다 이렇게 새로운 커넥션을 연결하는 것은 비용이 많이 드는 작업

그래서 mysql2 패키지에서는 connection pool을 제공함

const pool = mysql.createPool({
  host: 'localhost',
  user: 'root',
  database: 'test',
});

위처럼 pool을 생성하면 미리 DB와 connection을 맺어 일정 수의 connection 객체를 생성해 놓음

그 후 DB와의 연결이 필요할 때 pool에 connection을 요청해 얻어서 쿼리를 실행

그 후 pool에 다시 커넥션을 반납

→ 매 요청마다 connection을 새로 맺고 끊을 일이 없어 성능이 향상되고, 데이터 처리 속도가 빨라짐

→ connection의 수를 제한하는 것도 가능하여 서버의 자원 고갈을 막을 수도 있음

그러나 몇 가지 단점도 존재

생성된 pool은 최대 저장 connection 수가 정해져 있기에 많은 요청이 발생한 경우 connection이 모두 사용 중이라면 반납이 될 때까지 대기해야 함

→ 트래픽이 많이 몰리는 서비스에 connection 수를 너무 적게 설정하면 원활한 서비스가 이루어질 수 없음

그렇다고 connection 수의 제한을 너무 많이 설정하면 메모리를 많이 소모하므로 성능을 덜어뜨릴 수도 있음

→유저 수에 따라 적절한 connection 수를 유지하는 것이 중요

결론

사용자 수가 많거나 동접자 수가 많은 경우에는 pool을 이용하는데, 적절한 connection 수를 제한두는 것이 좋음

사용자 수가 별로 없다면 쿼리를 실행할 때마다 connection을 빠르게 맺고 끊는 것이 오히려 성능 향상에 도움이 될 수 있음

0개의 댓글