Custom Transactional Decorator Challenger
λ¬Έμ
NestJSμμ TypeORMμ μ¬μ©νμ¬ νΈλμμ μ ꡬνν λ, νλμ λ©μλκ° λ무 λ§μ μ± μμ κ°μ§κ³ μλ€.
μ€λ³΅λ μ½λκ° μ‘΄μ¬νλ€.
NestJS 곡μ λ¬Έμμμλ Transactionsλ₯Ό ꡬννλ λκ°μ§ λ°©λ²
QueryRunner μ¬μ©
async createMany(users: User[]) {
const queryRunner = this.dataSource.createQueryRunner();
await queryRunner.connect();
await queryRunner.startTransaction();
try {
await queryRunner.manager.save(users[0]);
await queryRunner.manager.save(users[1]);
await queryRunner.commitTransaction();
} catch (err) {
// since we have errors lets rollback the changes we made
await queryRunner.rollbackTransaction();
} finally {
// you need to release a queryRunner which was manually instantiated
await queryRunner.release();
}
}dataSource.transaction
async createMany(users: User[]) {
await this.dataSource.transaction(async manager => {
await manager.save(users[0]);
await manager.save(users[1]);
});
}μ½λ
μ μ½λμμ try {} λ¬Έ μΈμ μ½λ μ€λ³΅λλ€.
ν΄κ²° λ°©λ²
TypeScriptμ λ°μ½λ μ΄ν°λ₯Ό μ¬μ©νμ¬ κ³΅ν΅ λΆλΆμ λΆλ¦¬νλ κ²μ΄ κ°λ₯ν κ²μΌλ‘ 보μΈλ€.
ν΄κ²° κ³Όμ
Step1
@Transactional() Decoratorλ₯Ό ꡬνν΄μ κ³΅ν΅ λ‘μ§μ Decoratorμμ ꡬννλλ‘ νλ€.
@Transactional() Decoratorλ₯Ό ꡬνν΄μ κ³΅ν΅ λ‘μ§μ Decoratorμμ ꡬννλλ‘ νλ€.λΉμ§λμ€ λ‘μ§
κ³΅ν΅ λ‘μ§(Transactional Decorator)
Step1 λ¬Έμ μ
λΉμ¦λμ€ λ‘μ§μ Connectμ κ³΅ν΅ λ‘μ§μ Connectκ° μλ‘ λ€λ₯΄κΈ° λλ¬Έμ, λΉμ¦λμ€ λ‘μ§μ νΈλμμ
μΌλ‘ κ°μΈλ κ²μ΄ λͺ©νμμΌλ μ΄λ₯Ό λ¬μ±νμ§ λͺ»νλ€.
κ³΅ν΅ λ‘μ§μ Connect 47
λΉμ§λμ€ λ‘μ§μ Conenct 48

Step2
λΉμ¦λμ€ λ‘μ§μμ QueryRunnerλ₯Ό μ¬μ©νμ¬ κ΅¬ννκ³ , λ°μ½λ μ΄ν°λ₯Ό ν΅ν΄ μ΄λ―Έ νΈλμμ μ΄ μ¬μ© μ€μΈμ§ νμΈνκ³ , νμμ λ°λΌ μΆκ°μ μΌλ‘ νΈλμμ μ μμνκ±°λ QueryRunnerλ₯Ό μ£Όμ νλ€.
λΉμ§λμ€ λ‘μ§
κ³΅ν΅ λ‘μ§(Transactional Decorator)
κ²°κ³Ό
νλμ connect μμ νλμ transactional μμμ λͺ¨λ λ‘μ§μ΄ μ€ννλ€.

κ²°λ‘
NestJSμ TypeORMμ μ¬μ©νμ¬ νΈλμμ κ΄λ¦¬λ₯Ό μν μ½λ μ€λ³΅μ μ€μ΄κ³ , λ©μλμ μ± μμ λΆμ°νλ λ°©λ²μ νꡬνλ€.
Transactional Decoratorμ λμ
λΉμ¦λμ€ λ‘μ§κ³Ό νΈλμμ κ΄λ¦¬μ λΆλ¦¬
νλμ Connect λ΄μμμ νΈλμμ μ€ν
κ²°λ‘ μ μΌλ‘Transactional λ°μ½λ μ΄ν°μ μ¬μ©κ³Ό QueryRunnerμ μ μ ν κ΄λ¦¬λ₯Ό ν΅ν΄, NestJS λ° TypeORM νκ²½μμ νΈλμμ
μ ν¨μ¨μ μΌλ‘ κ΄λ¦¬ν μ μλ ꡬ쑰λ₯Ό ꡬμΆνλ€. νΈλμμ
κ΄λ¦¬μ λν μ€λ³΅ μ½λλ₯Ό μ€μ΄κ³ , λΉμ¦λμ€ λ‘μ§μ λͺ
νμ± λ° μ μ§λ³΄μμ±μ ν₯μμμΌ°λ€.
λ¬Όλ‘ ,μ΄ λ°μ½λ μ΄ν° μ¬μ©νλ κ²μ΄ μ΄λ€ μΆκ°μ μΈ μν₯μ λ―ΈμΉ μ§λ μμ§ λΆνμ€νλ€. ν μ€νΈμ½λλ₯Ό μμ±νκ³ μ§μμ μΌλ‘ νμΈν΄μ κ°μ μμ ν μμ μ΄λ€.
Last updated