1. 에러
Cannot perform update query because update values are not defined. Call "qb.set(...)" method to specify updated values.
다음과 같은 에러가 떴는데, 작성한 Service 코드에는 문제가 없었다.
DB를 살펴보던 중 Tickets와 Seats간 1:1 relation을 설정했는데도 Tickets에 외래키가 생성되지 않음을 확인
Tickets Entity에 @JoinColumn 데코레이터를 추가하여 외래키를 생성하였다.
@OneToOne(() => Seats, (seat) => seat.tickets)
@JoinColumn()
seat: Seats;
2. Isolation Level 적용
- READ UNCOMMITTED: 다른 트랜잭션이 커밋되지 않은 데이터를 읽을 수 있음. 데이터 일관성이 보장되지 않기 때문에 권장X
- READ COMMITTED: 다른 트랜잭션이 커밋된 데이터만 읽을 수 있음. 데이터 일관성이 보장
- REPEATABLE READ: 동일한 쿼리를 반복해서 실행해도 결과가 항상 같음. 트랜잭션 동안 읽은 데이터에 대한 락 설정 > 다른 트랜잭션에서 해당 데이터 수정 불가능
- SERIALIZABLE: 모든 트랜잭션을 직렬화하여 실행, 가장 높은 고립성 수준으로 데이터 일관성을 최대한 보장하지만 동시성이 매우 낮아져서 성능 저하
예매 기능에서, 다른 계정이 같은 좌석을 선택할 경우, 나중에 선택한 계정에는 이선좌가 떠야한다. 따라서 한 사람이 좌석 선택을 끝내고 커밋 된 후의 좌석 상태를 읽어와야 하기 때문에 READ COMMITTED를 사용했다.
- 다른 계정이 같은 좌석을 선택 > 한 계정이 좌석을 선택하고 커밋이 완료될때까지 접근 불가능, 커밋이 완료된 후 접근
- 다른 계정이 다른 좌석을 선택 > 서로 간섭 X
'TIL' 카테고리의 다른 글
TIL 240708 - class-validator, custom validator (0) | 2024.07.08 |
---|---|
TIL 240705 - 알고리즘 코드카타 리뷰 - 타겟 넘버 (0) | 2024.07.05 |
TIL 240703 - Guard, 커스텀 데코레이터 사용 (0) | 2024.07.03 |
TIL 240702 - 의존성 주입 문제 해결 (0) | 2024.07.02 |
TIL 240701 - javascript/typescript에서 날짜 한국표준시각으로 변경 (0) | 2024.07.01 |