데이터를 엔티티에 저장할 때 예상되는 문제
동시성 이슈 (Concurrency Issues)
두명 이상의 사용자가 동시에 같은 데이터의 삽입 요청을 했을 때 모든 요청에 담긴 데이터가 중복이 없다고 판단되어 동시에 데이터가 삽입되는 현상.
해결방법
Lock
락은 데이터를 보호하고, 다른 트랜잭션이 동시에 같은 데이터를 수정/삽입 하지 못하게 합니다.
하지만 락을 사용하면 다른 트랜잭션이 락이 해제될 때까지 기다려야 하므로 성능 문제가 발생 할 수 있습니다.
- [프로그래밍/SQL] - [ SQL ] Lock
- 소극적 락(Pessimistic Locking) : 데이터를 처음 읽을 때 락을 걸고 트랜잭션이 끝날 때까지 락을 유지하는 방법입니다.
- 적극적 락(Optimistic Locking) : 데이터에 버전 번호나 타임스탬프를 추가하여 데이터를 불러온 후 수정된 경우에만 업데이트가 발생하도록 하는 방법입니다.
MVCC (Multi-version Concurrency Control)
MVCC는 여러 트랜잭션이 동시에 같은 데이터에 접근할 수 있게 합니다. 이는 락을 사용하는 것보다 성능이 좋지만, 데이터 중복 문제를 완전히 해결하지는 못합니다.
MVCC는 동시에 여러 트랜잭션이 데이터베이스에 접근할 때 일관성을 유지하면서 동시성을 높이는 기술입니다. 각 트랜잭션은 데이터의 특정 버전을 보게 되며, 실제 데이터를 직접 변경하는 대신 변경 시점의 스냅샷을 참조합니다. 이렇게 하면 여러 트랜잭션이 동시에 같은 데이터를 읽을 수 있습니다.
Unique 데코레이션
@Unique() 데코레이션은 데이터베이스 테이블의 특정 컬럼이나 컬럼 조합에 유니크 제약조건을 적용하여, 그 필드에 중복된 값이 저장되지 않도록 합니다.
주의점
- 데이터베이스가 유니크 제약조건을 위반할 경우, 일반적으로 예외가 발생합니다. 이 예외를 적절히 처리해야 데이터베이스 에러로 인한 프로그램 중단을 방지할 수 있습니다.
- 모든 데이터베이스와 ORM이 @Unique 주석을 지원하지는 않을 수 있으므로, 사용하기 전에 해당 ORM 또는 프레임워크 문서를 확인해야 합니다.
'DataBase > SQL' 카테고리의 다른 글
[ SQL ] Lock (0) | 2024.07.06 |
---|---|
[ sql ] [ TypeORM ] Entity 의 constructor (0) | 2024.07.04 |
[sql][typeORM] N:M 관계에서 원하는 데이터찾기 (0) | 2024.06.22 |
[ SQL ] [ TypeORM ] @Query - 키워드가 포함되어 있는 게시물 검색 (1) | 2024.04.19 |
[ ORM ] Sequlize : Model synchronization (0) | 2024.01.12 |