Node.js mysql 연동

요한·2025년 9월 3일
0

mysql

설치

npm install mysql2 # mysql 다운로드

연결

mysql.createPool()

pool를 사용해서 클라이언트 요청때마다 DB가 연결/끊기가 반복 되면 상당한 리소스가 사용됨으로
그래서 일정한 connection 을 미리 만들어서 재사용 한다.

  • 성능향샹의 도움 됨

mysql.createPool() 사용 방법

const mysql = require('mysql2/promise');

const pool = mysql.createPool({
    host: 'localhost',
    user: 'root',
    password: 'password',
    database: 'db',
    waitForConnections: true,
    connectionLimit: 10,
    queueLimit: 0,
    }
)

waitForConncetions

연결이 다 차 있을 때, 새로운 연결 요청을 어떻게 처리할지 결정
true → 기다린다 (큐에 넣고 대기)
false → 바로 에러 발생 (ER_CON_COUNT_ERROR)

connectionLimit

동시에 DB 연결 허용 한번에 요청까지 허용한다.

queueLimt

connectionLimit에 허용한 connection이 넘어가면 대기 수
0 은 무제한

예시

우리가 박재범 콘서트를 티켓팅 한다고 가정해봅시다.
사용자가 한 번에 엄청난 connection을 요청하면 서버에 갑자기 큰 부하가 생기게 됩니다.

이때 connectionLimit1000명으로 설정하고,
queueLimit0(무제한 대기)으로 두면,
처음 1000명은 바로 DB에 연결되고,
그 외 인원은 connection이 가능해질 때까지 기다리게 됩니다.

이렇게 하면 서버가 한꺼번에 죽지 않고 안전하게 connection을 관리할 수 있습니다.
다만 서버에서도 DB 서버에 직접 접근하기 때문에, 성능/부하 관리에 유의해야 한다!

query 사용 및 테스트

const pool = require('../config/mysql');
// insert query
pool.query('insert into users(email,password,name,created_at) values(?,?,?,now())',[email,password,name])

// select query
const [rows]=pool.query('select * from users')
res.render('signup', { users:rows});
// select 결과를 rows 객체 배열에 담에 전송

결과

다음 글에선 회원가입/로그인 로직구현 및 session으로 user 상태 관리하고 간단하게 password만 암호화 처리 하겠습니다! :)

profile
코드 깍는 개발자 kangyohan.dev.0421@gmail.com

0개의 댓글