import mysql from 'mysql2';
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'password',
database: 'sparta',
});
connection.connect((err) => {
if (err) {
console.error('DB 연결 실패:', err);
return;
}
console.log('DB 연결 성공!');
});
간단한 테스트 용도나 요청이 많지 않은 경우 사용한다. 잦은 연결이 필요할 시 connection보다는 pool이 유용하다.
const createPool = (dbConfig) => {
const pool = mysql.createPool({
host: dbConfig.host,
port: dbConfig.port,
user: dbConfig.user,
password: dbConfig.password,
database: dbConfig.database,
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0,
});
const originQuery = pool.query;
pool.query = (sql, params) => {
const date = new Date();
console.log(
`[${formatDate(date)}] Execution query: ${sql} ${params ? `${JSON.stringify(params)}` : ``}`,
);
return originQuery.call(pool, sql, params);
};
return pool;
};
config를 이용하여 Pool을 생성하고 있지만 하드코딩으로 적어도 생성은 되지 않을까 싶다.
쿼리를 변경하여 로그를 찍을 수 있게끔 조정할 수 있다.
const pools = {
GAME_DB: createPool(database.GAME_DB),
USER_DB: createPool(database.USER_DB),
};
export default pools;
위 코드를 이용하여 pools에 커넥션을 생성하고 밖에서 사용할 수 있게끔 하면 된다.
한 지점에서 다른 지점으로 데이터가 이동하는 데 걸리는 시간을 의미하며, 네트워크 성능에 중요한 지표이다. 레이턴시는 밀리초(ms) 단위로 측정되며, 응답 지연이 길어질수록 사용자 경험에 악영향을 미칠 수 있다.
데이터 패킷이 송신지에서 수신지로 이동한 뒤, 다시 수신지에서 송신지로 돌아올 때까지 걸리는 총 시간이다. RTT (Round Trip Time)라고 불리며, ping
명령어를 통해 RTT를 측정할 수 있다. RTT가 높을수록 네트워크 응답 속도가 느려지며, 실시간 애플리케이션에 악영향을 줄 수 있다.
네트워크 지연을 사용자가 인지하지 못하도록 숨기는 기술이다. 이 기술은 주로 예측, 보간, 평활화 등의 기법을 활용한다. 주로 게임, 미디어 스트리밍 등 실시간 응용 프로그램에서 사용된다.
레이턴시를 줄이기 위해 현재 상태를 기반으로 미래의 상태를 예측하는 기법으로 주로 온라인 게임과 같은 실시간 애플리케이션에서 사용된다.
예를 들어, 네트워크 레이턴시가 100ms인 상황에서 매초 1번씩 패킷이 전송된다고 가정했을 때 송신된 패킷이 1초 후 도착해야 하지만, 실제로는 1.1초에 도착하게 된다. 이때 송신자는 다음 위치를 미리 예측한다.
거리 = 속력 × 시간 공식에 따라, 만약 물체의 속도가 10m/s라면 1.1초 후 물체의 위치는 11m가 된다.
이러한 예측 덕분에 레이턴시로 인한 지연을 최소화하여 더 자연스러운 사용자 경험을 제공한다.
이와 같은 기법을 잘 활용하면 네트워크 지연 문제를 최소화할 수 있다.