Day26(4.18)

ShinJuYong·2022년 4월 18일
0

camp

목록 보기
25/44
post-thumbnail

ACID / Transaction

데이터의 오염을 막기위해서 로직을 묶어서 다시 시도할수있게 만드는것
(1,2,3)이 있다면 하나라도 실패하면 다시 시도하게 만든다(실패처리)

1. 서로 다른 Transaction을 부분적으로 처리한다.

2. 모든 Transaction이 정상적으로 완료되면 Commit 한다.

3. 만약 Transaction중 하나라도 비정상적으로 처리되면 rollback을 수행.

NestJS에서 강력하게 추천하는 방식은 바로 QueryRunner를 통해 Transaction을 수행하는 것. 

QueryRunner를 사용하면 Transaction의 Commit과 Rollback을 수동으로 제어할 수 있다.

Unit Testing(단위 테스트)를 보다 쉽게 진행할 수 있다. 즉 Jest를 통한 Testing 시 Mocking을 좀 더 쉽게 할 수 있음.

ACID

  • Atomicity : 모두 성공하지않으면 실패
  • Consistency : 같은 쿼리는 조회할때마다 같아야한다.
  • Isolation : 한개를 처리하는동안 다른것은 격리상태여야한다.
  • Durability : 한번 성공했으면 에러가 나더라도 문제가 없어야한다.

Isolation

Isolation은 총 4단계를 걸친다..

  • READ UNCOMMITTED
  • READ COMMITTED
  • REPEATABLE READ
  • SERIALIZABLE

READ UNCOMMITTED

각 트랜잭션에서의 변경 내용이 COMMIT이나 ROLLBACK 여부에 상관 없이 다른 트랜잭션에서 값을 읽을 수 있다.

정합성에 문제가 많은 격리 수준이기 때문에 사용하지 않는 것을 권장된다.

Dirty Read

READ UNCOMMITTED는 문제는 DIRTY READ현상 발생 되는것입니다. 즉 트랜잭션이 작업이 완료되지 않았는데도 다른 트랜잭션에서 볼 수 있게 되는 현상을 의미한다.

Lock

SERIALIZABLE
성능 측면에서는 동시 처리성능이 가장 낮으며 가장 단순한 격리 수준이지만 가장 엄격합니다.
데이터베이스에서는 거의 사용되지 않습니다.

마치 영화관 자리예매처럼 한 자리를 예매하게되면 해당 자리에대해서 LOCK을 걸어 다른사람은 예매를 못하게 막는것

비관적락

  1. 공유락(s-lock)

    읽기전용, 쓰기 잠금

  2. 베타락(x-lock)

    읽기 쓰기 모두 잠금

순서

락을 거는 테이블은 순서를 잘정해서
데드락이 걸리지않도록 주의하자.
(접근 순서를 동일하게끔)

TIL Git

강의-깃허브

메인프로젝트 - 트랜잭션

알고리즘

프로그래머스-LV1-로또의-최고순위와-최저순위
프로그래머스-LV2-올바른괄호
프로그래머스-LV2-최댓값과최솟값

스킬 체크 레벨2 통과~~

0개의 댓글