[javascript] Express.js에서의 트랜잭션 처리 방법
Express.js는 Node.js 기반의 웹 애플리케이션 프레임워크로 많은 개발자들에게 사랑받고 있습니다. 이 프레임워크를 사용하여 데이터베이스에 트랜잭션을 처리하는 방법에 대해 알아보겠습니다.
1. 데이터베이스 설정
트랜잭션을 처리하기 위해서는 먼저 데이터베이스를 설정해야 합니다. 가장 일반적으로 사용되는 데이터베이스는 MySQL, PostgreSQL, MongoDB 등이 있습니다. 각 데이터베이스마다 다른 설정 방법이 필요하지만, 보통 mongoose
나 sequelize
라는 라이브러리를 사용하여 데이터베이스 연결을 설정합니다.
// 데이터베이스 연결 설정 예시 (Mongoose)
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/mydatabase', { useNewUrlParser: true, useUnifiedTopology: true });
// 모델 정의
const Schema = mongoose.Schema;
const MyModelSchema = new Schema({ name: String, age: Number });
const MyModel = mongoose.model('MyModel', MyModelSchema);
2. 트랜잭션 처리
트랜잭션을 처리하기 위해서는 데이터베이스의 일관성을 유지하고 오류가 발생할 경우 롤백을 할 수 있어야 합니다. Express.js에서는 여러 가지 방법을 통해 트랜잭션을 처리할 수 있습니다.
2.1. Callback을 사용한 트랜잭션 처리
app.post('/transaction', (req, res) => {
const session = mongoose.startSession();
session.startTransaction();
MyModel.create({ name: 'John', age: 30 }, (error, doc) => {
if (error) {
session.abortTransaction();
session.endSession();
return res.status(500).json({ error: '트랜잭션 실패' });
}
// 이후 추가적인 작업 수행
session.commitTransaction();
session.endSession();
return res.status(200).json({ message: '트랜잭션 성공' });
});
});
2.2. Promise를 사용한 트랜잭션 처리
app.post('/transaction', async (req, res) => {
const session = mongoose.startSession();
session.startTransaction();
try {
const doc = await MyModel.create({ name: 'John', age: 30 });
// 이후 추가적인 작업 수행
session.commitTransaction();
session.endSession();
return res.status(200).json({ message: '트랜잭션 성공' });
} catch (error) {
session.abortTransaction();
session.endSession();
return res.status(500).json({ error: '트랜잭션 실패' });
}
});
3. 롤백 처리
트랜잭션 처리 중에 에러가 발생하면 데이터베이스를 롤백하여 이전 상태로 되돌릴 수 있어야 합니다. 이를 위해 try-catch
문을 사용하여 롤백 처리를 할 수 있습니다.
app.post('/transaction', async (req, res) => {
const session = mongoose.startSession();
session.startTransaction();
try {
// ...
session.commitTransaction();
session.endSession();
return res.status(200).json({ message: '트랜잭션 성공' });
} catch (error) {
session.abortTransaction();
session.endSession();
return res.status(500).json({ error: '트랜잭션 실패' });
}
});
4. 결론
Express.js에서 트랜잭션을 처리하는 방법에 대해 알아보았습니다. 데이터베이스 설정 후 콜백이나 프로미스를 사용하여 트랜잭션을 처리하고, 에러 발생 시 롤백하여 데이터베이스 일관성을 유지할 수 있습니다. 이를 통해 안정적이고 신뢰성 있는 웹 애플리케이션을 개발할 수 있습니다.