sequelize 관계, 트랜잭션

이제우·2023년 10월 29일
0

Associations

sequelize도 테이블을 1:1(one to one), 1:N(one to many), n:m(many to many)의 관계로 설정할 수 있다.

1:1

sequlize의 1:1의 관계를 hasOnebelongsTo로 설정할 수 있다.

A.hasOne(B);
B.belongsTo(A);

이렇게 설정하면 B테이블에 참조키가 생성된다.

1:N

1:N 관계는 hasManybelongsTo로 설정할 수 있다.

A.hasMany(B);
B.belongsTo(A);

이렇게 설정하면 역시 B테이블에 참조키가 생성된다.

users와 posts로 1:N 관계를 설정한 예시

n:m

n:m 관계는 belongsToMany로 설정할 수 있다.
이 관계에서는 둘의 관계를 담는 테이블을 설정해주어야 한다.

A.belongToMany(B,{through:"C"})
B.belongToMany(A,{through:"C"})

movies와 actors로 n:m 관계를 설정한 예시


트랜잭션

데이터베이스의 상태를 변화시키는 논리적 기능을 수행하기 위한 작업의 단위이다. 여기서 상태를 변화시키는 것은 sql언어를 사용하여 데이터베이스를 조작하는 행위를 말한다. 또 작업의 단위란 사용자가 한번에 수행해야할 연산들을 말한다.

자주 드는 예시로 A가 B로 10,000원을 입금해야할 때 A의 통장에서 10,000원이 출금되고 B의 통장으로 10,000원이 입금되어야 한다. 이 과정에서 B의 통장으로 10,000원이 입금되어야할 상황에 어떤 오류를 만나 B의 통장에 입금이 되지 않을 경우 A의 통장만 10,000원이 출금되는 상황이 발생한다.

이런 상황을 방지하기 위해 모든 과정이 끝났을 때 거래 내용이 반영(Commit)되어야 하고, 과정 중 하나라도 문제가 발생하면 거래가 시작하기 전으로 돌아가거나(Roll Back) 거래가 취소(Undo) 되어야한다.

이러한 트랜잭션을 통해 우리는 데이터베이스의 안정성을 확본한다.

RollBack과 Commit

Commit 트랜잭션이 성공적으로 끝났고, 데이터베이스가 일관성 있는 상태일때, 해당 트랜잭션의 결과를 반영함을 알림

RollBack 트랜잭션을 수행하는 중 비정상적으로 종료되어 데이터베이스의 일관성을 깨뜨렸을 때, 트랜잭션의 원자성을 유지하기 위해 연산을 처음으로 되돌리거나 취소하는 상태.

트랜잭션의 성질

트랜잭션은 4가지 성질이 있다.
원자성(Atomicity), 일관성(Consistency), 독립성/격리성(Isolation), 지속성/영속성(Durability)
각 특성의 첫 글자를 따서 ACID라고 부른다.

1) 원자성
트랜잭션의 연산은 모두 반영되거나 반영되지 않아야한다. (All or Nothing)
트랜잭션의 모든 명령은 전부 수행해야하며, 오류가 발생하면 전부 취소 되어야한다.

savepoint
트랜잭션 내부에서 사용자가 지정할 수 있는 작업 단위로 중간 저장소 느낌
특정 지점에 savapoint를 지정한 후 rollback to savepoint로 해당 지점으로 rollback 할 수 있다.

2) 일관성
트랜잭션으 작업 결과는 항상 일관성이 있어야한다.

3) 독립성
하나의 트랜잭션의 연산이 실행하고 있을 땐 다른 트랜잭션이 끼어들 수 없다.
또한 완전히 완료 될 때까지 다른 트랜잭션이 해당 연산 결과를 참조할 수도 없다.

4) 영속성
성공한 트랜잭션의 결과는 영구적으로 반영되어야 한다.

profile
게으른 사람 중에 제일 부지런하게 사는 사람이 꿈

0개의 댓글