프로젝트에서 사용하는 DB는 Mysql을 사용하게 되었습니다. 흔히 프로젝트에서 DB와 연동하는 일은 한번쯤은 꼭 있습니다. 그래서 오늘은 기록용 겸 포스팅 겸 해서 올려보겠습니다.
저는 .env 환경변수 저장하는 파일 생성해서 DB에 접속하는 코드를 작성하도록 하겠습니다.
1. npm install mysql2
npm install mysql2
Node.js에서 MySQL 데이터베이스와 상호작용하기 위한 패키지입니다.
mysql과 mysql2 가 있는데 mysql2이 계속 버전업 되고 있는 패키지입니다.(mysql2를 사용했습니다)
2. DB 연동하는 파일
const mysql = require('mysql2/promise');
console.log('db.js, ',
process.env.DB_HOST, process.env.DB_PORT,
process.env.DB_USER, process.env.DB_PASSWORD,
process.env.DB_NAME
)
// connection보다 pool이 더 좋대 gpt
const db = mysql.createPool(
{
host : process.env.DB_HOST,
port: process.env.DB_PORT,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
connectionLimit: 10, // 최대 연결 수
}
);
module.exports = {db};
원래는 CreateConnection을 사용하는 걸 많이 봤는데 프론트엔드 프로젝트 내에서 Promise를 사용하여 비동기 async/await를 사용한다면 createPool로 생성해주는게 좋습니다.
만약 .env 파일을 생성하지 않았다면
// connection보다 pool이 더 좋대 gpt
const db = mysql.createPool(
{
host : 'DB 호스트',
port: 'DB 포트번호',
user: 'DB 사용자',
password: 'DB 비밀번호',
database: 'DB 데이터 베이스 명',
connectionLimit: 10, // 최대 연결 수
}
);
위와 같이 생성해주면 됩니다.
module.exports = {db} 코드로 다른 파일에서 가져올 수 있도록 export 해줍니다.
3-1. DB 쿼리문 (select)
const {db} = require('../config/db');
const getAllUsers = async() => {
console.log('repository 진입')
const [rows] = await db.query('SELECT * FROM LC_USER_T');
console.log('repository', rows)
return rows;
}
DB 파일에서 코드 가져오고, async/ await를 사용해서 객체를 만들어줍니다.
db.query('쿼리문'); 을 사용해서 데이터를 select 해주면 됩니다.
3-2. DB 쿼리문 (insert)
const {db} = require('../config/db');
const insertUser = async(userData) => {
try{
const {email, name, password, user_type} = userData;
console.log('repository 진입', userData)
const result = await db.execute(
"INSERT INTO LC_USER_T(email, name, password, user_type ) VALUES (?, ?, ?, ? )",
[email, name, password, user_type])
return result;
}catch(error){
return error;
}
}
DB 파일 가져오는 것은 동일하고 insert에서도 async/await를 해줍니다.
파라미터값을 바로 보내면 안되더라구요. insert할 데이터와 쿼리문의 형식이 동일해야 합니다! 꼭 기억하세요
만약에 .query를 사용하고 싶다면 사용할 수 있습니다. 살짝 다른 코드입니다
const insertUser = async (userData) => {
try {
const query = `
INSERT INTO users (user_type, password, name, email)
VALUES (
${db.escape(userData.user_type)},
${db.escape(userData.password)},
${db.escape(userData.name)},
${db.escape(userData.email)}
)
`;
const [result] = await db.query(query);
console.log('Insert result:', result);
return result;
} catch (error) {
console.error('Error inserting user:', error);
throw error;
}
};
DB연동파일명. execute("쿼리문", [data1, data2, datat3, ...])
delete, update도 동일합니다. 모두 executed와 qurey 사용가능합니다.(qpt쿼리)
3-3. DB 쿼리문(delete)
execute 사용 시
const deleteUser = async (userId) => {
try {
const [result] = await db.execute(
'DELETE FROM users WHERE id = ?', [userId]
);
console.log('Delete result:', result);
return result;
} catch (error) {
console.error('Error deleting user:', error);
throw error;
}
};
query 사용 시
const deleteUser = async (userId) => {
try {
const [result] = await db.query(
`DELETE FROM users WHERE id = ${db.escape(userId)}`
);
console.log('Delete result:', result);
return result;
} catch (error) {
console.error('Error deleting user:', error);
throw error;
}
};
3-4 쿼리문(update)
execute 사용 시
const updateUser = async (userId, email) => {
try {
const [result] = await db.execute(
'UPDATE users SET email = ? WHERE id = ?',
[email, userId]
);
console.log('Update result:', result);
return result;
} catch (error) {
console.error('Error updating user:', error);
throw error;
}
};
query 사용 시
const updateUser = async (userId, email) => {
try {
const [result] = await db.query(
`UPDATE users SET email = ${db.escape(email)} WHERE id = ${db.escape(userId)}`
);
console.log('Update result:', result);
return result;
} catch (error) {
console.error('Error updating user:', error);
throw error;
}
};
execute를 사용할 때에는 매개변수값을 잘 지정해주면 되는데 만약 query를 사용하면 DB.escape를 사용하여 Query injection을 방지해주면됩니다.
이런 방식으로 로그인까지 완료했고 토큰 생성까지 완료했습니다. 빨리 만들어보고 검증할 수 있었으면 좋겠습니다.
'백 > Node.js' 카테고리의 다른 글
[Node] node.js로 로그인, 회원가입 구현하기 Sign-Up, Sign-In API(MVC 패턴) (1) | 2024.12.17 |
---|---|
[Node] Node.js 백엔드 폴더 구조 (1) | 2024.11.25 |
[Node.js] Node로 간단한 API 만들기, 웹 서버 만들어보기 (5) | 2024.11.11 |
[Node] Node.js 란? (6) | 2024.10.30 |