Node.js – 데이터베이스 연동 – MySQL – 3 – 트랜잭션 처리

ES6(ECMAScript 2015) - 객체 리터럴 확장 - 2 - 프로토타입 축약
Node.js – 데이터베이스 연동 – MySQL – 3 – 트랜잭션 처리

Node.js – 데이터베이스 연동 – MySQL – 3 – 트랜잭션 처리

트랜잭션 처리란?

트랜잭션 처리는 데이터베이스에서 여러 개의 쿼리를 논리적인 작업 단위로 묶어서 한 번에 실행하고, 이 작업들이 모두 성공적으로 완료되거나 실패할 경우 원래 상태로 롤백하는 기능을 말합니다. 이를 통해 데이터의 일관성과 안전성을 보장할 수 있습니다. Node.js에서 MySQL 데이터베이스와의 연동을 통해 트랜잭션 처리를 할 수 있습니다.

트랜잭션 처리 방법

트랜잭션 처리를 위해 다음과 같은 단계를 따를 수 있습니다.

  1. 트랜잭션 시작 (Begin Transaction): 트랜잭션을 시작하기 위해 BEGIN이라는 명령어를 사용합니다. 이 명령어를 실행하면 데이터베이스는 트랜잭션을 시작하고, 이후 실행되는 쿼리들은 트랜잭션에 속하게 됩니다.

    예시:

    connection.query('BEGIN', (error) => {
      if (error) {
        throw error;
      }
      console.log('트랜잭션 시작');
    });
  2. 쿼리 실행: 트랜잭션에 속하는 쿼리들을 순차적으로 실행합니다. 이때, 각 쿼리는 이전 쿼리의 결과에 영향을 받을 수 있습니다.

    예시:

    connection.query('INSERT INTO users SET ?', user, (error, result) => {
      if (error) {
        connection.rollback(() => {
          throw error;
        });
      }
      console.log('사용자 추가');
    });
  3. 트랜잭션 완료 (Commit): 모든 쿼리가 성공적으로 실행되었을 경우, 트랜잭션을 완료하기 위해 COMMIT이라는 명령어를 사용합니다. 이 명령어를 실행하면 데이터베이스는 트랜잭션 내의 모든 작업을 영구적으로 반영합니다.

    예시:

    connection.commit((error) => {
      if (error) {
        connection.rollback(() => {
          throw error;
        });
      }
      console.log('트랜잭션 완료');
    });
  4. 트랜잭션 롤백 (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에서의 트랜잭션 처리에 대해 소개해드렸습니다. 이를 통해 데이터의 일관성과 안전성을 유지할 수 있으며, 신뢰성 있는 애플리케이션을 개발할 수 있습니다. 만약 추가로 궁금한 점이 있으시다면 언제든지 물어보세요!

답글 남기기