
Node.js – 데이터베이스 연동 – MySQL – 3 – 트랜잭션 처리
트랜잭션 처리란?
트랜잭션 처리는 데이터베이스에서 여러 개의 쿼리를 논리적인 작업 단위로 묶어서 한 번에 실행하고, 이 작업들이 모두 성공적으로 완료되거나 실패할 경우 원래 상태로 롤백하는 기능을 말합니다. 이를 통해 데이터의 일관성과 안전성을 보장할 수 있습니다. Node.js에서 MySQL 데이터베이스와의 연동을 통해 트랜잭션 처리를 할 수 있습니다.
트랜잭션 처리 방법
트랜잭션 처리를 위해 다음과 같은 단계를 따를 수 있습니다.
-
트랜잭션 시작 (Begin Transaction): 트랜잭션을 시작하기 위해
BEGIN
이라는 명령어를 사용합니다. 이 명령어를 실행하면 데이터베이스는 트랜잭션을 시작하고, 이후 실행되는 쿼리들은 트랜잭션에 속하게 됩니다.예시:
connection.query('BEGIN', (error) => { if (error) { throw error; } console.log('트랜잭션 시작'); });
-
쿼리 실행: 트랜잭션에 속하는 쿼리들을 순차적으로 실행합니다. 이때, 각 쿼리는 이전 쿼리의 결과에 영향을 받을 수 있습니다.
예시:
connection.query('INSERT INTO users SET ?', user, (error, result) => { if (error) { connection.rollback(() => { throw error; }); } console.log('사용자 추가'); });
-
트랜잭션 완료 (Commit): 모든 쿼리가 성공적으로 실행되었을 경우, 트랜잭션을 완료하기 위해
COMMIT
이라는 명령어를 사용합니다. 이 명령어를 실행하면 데이터베이스는 트랜잭션 내의 모든 작업을 영구적으로 반영합니다.예시:
connection.commit((error) => { if (error) { connection.rollback(() => { throw error; }); } console.log('트랜잭션 완료'); });
-
트랜잭션 롤백 (Rollback): 만약 트랜잭션 내의 어떤 쿼리가 실패하거나 오류가 발생했을 경우, 트랜잭션을 롤백하여 이전 상태로 되돌립니다.
ROLLBACK
이라는 명령어를 사용하여 롤백을 수행할 수 있습니다.예시:
connection.rollback((error) => { if (error) { throw error; } console.log('트랜잭션 롤백'); });
트랜잭션 처리 예시
다음은 트랜잭션 처리를 사용하여 사용자를 추가하고 주문을 생성하는 예시입니다.
connection.query('BEGIN', (error) => {
if (error) {
throw error;
}
const user = { name: 'John', email: 'john@example.com' };
connection.query('INSERT INTO users SET ?', user, (error, result) => {
if (error) {
connection.rollback(() => {
throw error;
});
}
const order = { user_id: result.insertId, product: 'Apple', quantity: 10 };
connection.query('INSERT INTO orders SET ?', order, (error) => {
if (error) {
connection.rollback(() => {
throw error;
});
}
connection.commit((error) => {
if (error) {
connection.rollback(() => {
throw error;
});
}
console.log('주문 완료');
});
});
});
});
이 예시에서 users
테이블에 사용자 정보를 추가하고, 해당 사용자의 주문을 orders
테이블에 추가합니다. 모든 쿼리가 성공적으로 실행되면 트랜잭션은 완료되고 “주문 완료” 메시지가 출력됩니다. 만약 어느 한 쿼리라도 실패하면 트랜잭션은 롤백되고 예외가 발생합니다.
주의해야 할 점
트랜잭션 처리를 할 때에는 몇 가지 주의사항을 염두에 두어야 합니다:
- 트랜잭션 내에서 오류가 발생하면 트랜잭션을 롤백해야 합니다. 롤백하지 않으면 데이터베이스에 영향을 줄 수 있습니다.
- 트랜잭션의 범위를 적절하게 설정해야 합니다. 트랜잭션 범위가 너무 넓으면 동시성 문제가 발생할 수 있고, 너무 작으면 불필요한 오버헤드가 발생할 수 있습니다.
- 트랜잭션 처리는 데이터베이스의 일관성과 안전성을 보장하기 위해 사용되지만, 과도한 트랜잭션 처리는 성능에 영향을 줄 수 있습니다. 적절한 상황에서 사용하는 것이 좋습니다.
트랜잭션 처리는 데이터의 무결성을 유지하고 안정성을 보장하기 위해 중요한 개념입니다. 이를 잘 활용하여 데이터베이스 연동을 수행하면 안정적이고 신뢰할 수 있는 애플리케이션을 개발할 수 있습니다.
이상으로 Node.js와 데이터베이스 연동, 특히 MySQL에서의 트랜잭션 처리에 대해 소개해드렸습니다. 이를 통해 데이터의 일관성과 안전성을 유지할 수 있으며, 신뢰성 있는 애플리케이션을 개발할 수 있습니다. 만약 추가로 궁금한 점이 있으시다면 언제든지 물어보세요!