Node.js - MySQL 데이터 삽입
안녕하세요, 미래의 코딩 슈퍼스타 여러분! 오늘 우리는 Node.js와 MySQL의 세계로 흥미로운 여정을 떠납니다. 특히, Node.js를 사용하여 MySQL 데이터베이스에 데이터를 삽입하는 방법에 대해 집중적으로 배울 것입니다. 프로그래밍에 처음 도전하는 분이라면 걱정하지 마세요 - 나쁜 경험 없이 단계별로 설명해드릴게요. 그럼 시작해보겠습니다!
Node.js와 MySQL은 무엇인가요?
시작하기 전에 Node.js와 MySQL에 대해 간단히 이해해보겠습니다:
- Node.js: JavaScript 실행 환경으로, 웹 브라우저뿐만 아니라 컴퓨터에서도 JavaScript를 실행할 수 있습니다.
- MySQL: 데이터를 저장하고 관리하는 인기 있는 데이터베이스 시스템입니다.
Node.js를 셰프로, MySQL을 크고 정리된 냉장고로 생각해보세요. 우리는 Node.js를 사용하여 MySQL 냉장고에 데이터를 넣는 코드를 작성할 것입니다!
개발 환경 설정
먼저, 우리의 요리 속 재료를 준비해야 합니다. 다음과 같이 하세요:
- 공식 웹사이트(nodejs.org)에서 Node.js를 설치합니다.
- mysql.com에서 MySQL을 설치합니다.
- 터미널에서 다음 명령어로 Node.js의 MySQL 모듈을 설치합니다:
npm install mysql
훌륭합니다! 이제 우리는 모든 재료를 준비했습니다. 그럼 요리... 아니, 코딩을 시작해보겠습니다!
Node.js로 데이터 삽입
연결 설정
데이터를 삽입하기 전에 MySQL 데이터베이스에 연결해야 합니다. 다음과 같이 하세요:
const mysql = require('mysql');
const connection = mysql.createConnection({
host: 'localhost',
user: 'your_username',
password: 'your_password',
database: 'your_database_name'
});
connection.connect((err) => {
if (err) {
console.error('데이터베이스 연결 오류: ' + err.stack);
return;
}
console.log('데이터베이스에 연결됨.');
});
이를 간단히 설명하자면:
- 이전에 설치한 MySQL 모듈을 요청합니다.
-
mysql.createConnection()
을 사용하여 데이터베이스에 연결을 생성합니다. -
connection.connect()
를 사용하여 데이터베이스에 실제로 연결합니다. - 오류가 발생하면 로그를 남깁니다. 그렇지 않으면 연결이 완료되었음을 확인합니다.
간단한 INSERT 문
이제 연결이 완료되었으므로 데이터를 삽입해봅시다! 가정해보겠습니다. users
라는 테이블이 있고, id
, name
, email
이라는 열이 있습니다. 새로운 사용자를 추가하는 방법은 다음과 같습니다:
const newUser = { name: 'John Doe', email: '[email protected]' };
connection.query('INSERT INTO users SET ?', newUser, (error, results) => {
if (error) throw error;
console.log('새로운 사용자가 추가되었습니다. ID: ' + results.insertId);
});
여기서 무엇이 일어나고 있나요?
-
newUser
객체를 생성하여 추가하고 싶은 데이터를 저장합니다. -
connection.query()
를 사용하여 SQL 쿼리를 데이터베이스로 전송합니다. - 쿼리의
?
는 占位符로, MySQL이newUser
객체로 대체합니다. - 성공하면 MySQL이 결과를 반환합니다. 새로운 레코드의 ID가 포함됩니다.
여러 레코드 삽입
한 번에 여러 사용자를 추가하고 싶다면 어떻게 하나요? 그것도 가능합니다!
const users = [
{ name: 'Alice', email: '[email protected]' },
{ name: 'Bob', email: '[email protected]' },
{ name: 'Charlie', email: '[email protected]' }
];
connection.query('INSERT INTO users (name, email) VALUES ?', [users.map(user => [user.name, user.email])], (error, results) => {
if (error) throw error;
console.log('추가된 레코드 수: ' + results.affectedRows);
});
이 새로운 점은 무엇인가요?
- 사용자 객체의 배열을 생성합니다.
-
users.map()
을 사용하여 배열을 MySQL이 기대하는 형식으로 변환합니다. -
?
占位符는 여러 가지 값을 나타냅니다. -
results.affectedRows
는 추가된 레코드 수를 나타냅니다.
예비 문장(Prepared Statement)으로 삽입
이제 예비 문장을 사용하여 수준을 높이겠습니다. 예비 문장은 반복적으로 사용할 수 있는 레시피와 같습니다. 각 번째에 재료(데이터)를 바꿔서 사용할 수 있습니다.
const sql = "INSERT INTO users (name, email) VALUES (?, ?)";
const values = ['David', '[email protected]'];
connection.query(sql, values, (error, results) => {
if (error) throw error;
console.log('새로운 사용자가 추가되었습니다. ID: ' + results.insertId);
});
여기서 특별한 점은 무엇인가요?
- SQL 쿼리와 데이터를 분리합니다.
- 쿼리의
?
占位符는 데이터가 들어갈 곳을 나타냅니다. -
values
배열을query()
에 별도의 인자로 전달합니다.
이 방법은 SQL 주입 공격을 방지하는 데 더 안전합니다. 신뢰할 수 있는 레시피를 사용하는 것과 같습니다!
예비 문장을 반복 사용
예비 문장의 진정한 강점은 반복 사용할 때 발挥됩니다:
const sql = "INSERT INTO users (name, email) VALUES (?, ?)";
const users = [
['Eva', '[email protected]'],
['Frank', '[email protected]'],
['Grace', '[email protected]']
];
users.forEach(user => {
connection.query(sql, user, (error, results) => {
if (error) throw error;
console.log('새로운 사용자가 추가되었습니다. ID: ' + results.insertId);
});
});
여기서 우리는 같은 SQL "레시피"를 사용하여 각 사용자에 대해 데이터를 바꿔서 추가합니다.
연결 종료
요리가 끝났다면 부엌을 닫아야 합니다! 데이터베이스 연결을 종료하는 것과 같습니다:
connection.end((err) => {
if (err) {
console.error('데이터베이스 연결 종료 오류: ' + err.stack);
return;
}
console.log('데이터베이스 연결이 닫혔습니다.');
});
이렇게 하면 우리는 어떤 연결도 열어둔 상태로 두지 않고, 애플리케이션이나 데이터베이스 서버의 속도를 늦추지 않습니다.
메서드 요약
이제 배운 메서드를 간단히 요약해보겠습니다:
메서드 | 설명 |
---|---|
mysql.createConnection() |
MySQL 데이터베이스에 연결을 생성합니다 |
connection.connect() |
데이터베이스 연결을 설정합니다 |
connection.query() |
SQL 쿼리를 실행합니다 |
connection.end() |
데이터베이스 연결을 종료합니다 |
결론
축하합니다! Node.js를 사용하여 MySQL 데이터베이스에 데이터를 삽입하는 방법을 배웠습니다. 우리는 간단한 삽입, 여러 레코드 삽입, 그리고 예비 문장을 사용한 삽입을 다루었습니다. 연습이 최고의 교육이라고 생각합니다. 그렇다면 작은 프로젝트를 만들어보세요. 예를 들어, 즐겨찾는 레시피를 저장하는 간단한 앱을 만들어보세요. 이렇게 하면 새로운 기술을 연습할 수 있고,할머니의 비밀 쿠키 레시피를 잃지 않을 수 있습니다!
Happy coding, 그리고 데이터베이스가 항상 올바르게 정규화되기를 바랍니다!
Credits: Image by storyset