npm install mysql2 # mysql 다운로드
mysql.createPool()
pool를 사용해서 클라이언트 요청때마다 DB가 연결/끊기가 반복 되면 상당한 리소스가 사용됨으로
그래서 일정한 connection 을 미리 만들어서 재사용 한다.
const mysql = require('mysql2/promise');
const pool = mysql.createPool({
host: 'localhost',
user: 'root',
password: 'password',
database: 'db',
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0,
}
)
연결이 다 차 있을 때, 새로운 연결 요청을 어떻게 처리할지 결정
true → 기다린다 (큐에 넣고 대기)
false → 바로 에러 발생 (ER_CON_COUNT_ERROR)
동시에 DB 연결 허용 한번에 요청까지 허용한다.
connectionLimit에 허용한 connection이 넘어가면 대기 수
0 은 무제한
우리가 박재범 콘서트를 티켓팅 한다고 가정해봅시다.
사용자가 한 번에 엄청난 connection을 요청하면 서버에 갑자기 큰 부하가 생기게 됩니다.
이때 connectionLimit
을 1000명으로 설정하고,
queueLimit
을 0(무제한 대기)으로 두면,
처음 1000명은 바로 DB에 연결되고,
그 외 인원은 connection이 가능해질 때까지 기다리게 됩니다.
이렇게 하면 서버가 한꺼번에 죽지 않고 안전하게 connection을 관리할 수 있습니다.
다만 서버에서도 DB 서버에 직접 접근하기 때문에, 성능/부하 관리에 유의해야 한다!
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만 암호화 처리 하겠습니다! :)