
Q1 풀이를 위해서는 동시성 문제와 비관적 락, 낙관적 락 개념을 알아야 할 것으로 보인다.
여러 사용자가 동시에 같은 데이터를 수정하려 할 때 발생하는 충돌 상황.
여러 실행 흐름(스레드, 프로세스, 트랜잭션 등)이 공유 자원에 동시에 접근하면서 데이터 불일치가 발생하여 문제가 발생한다.
비관적 락은 여러 트랜잭션이 같은 데이터에 동시에 접근하면 충돌이 발생할 것이라고 미리 가정하고, 먼저 접근한 트랜잭션이 데이터에 락을 걸어 다른 트랜잭션의 접근을 막는 방식이다.
이 방식은 데이터에 접근하기 전에 먼저 락을 걸고, 락이 해제될 때까지 다른 트랜잭션은 해당 데이터에 접근하지 못하고 기다려야 한다.

낙관적 락은 동시 접근 시 충돌이 발생하지 않을 것이라고 가정하고, 작업 완료 후 충돌 여부를 확인하는 방식이다.
이 방식은 데이터를 수정할 때 락을 걸지 않고 저장 시점에 버전을 조건으로 확인하여, 그 사이 버전이 바뀌어 업데이트된 행이 0건이면 충돌로 판단해 재시도하거나 실패 처리한다.

| 구분 | 낙관적 락 | 비관적 락 |
|---|---|---|
| 락 사용 | X | O |
| 성능 | O | X |
| 안전성 | X | O |
※ 락사용 : 데이터를 수정하기 전에 잠금을 거는가
※ 성능 : 기다림 없이 빠르게 처리할 수 있는가
※ 안전성 : 충돌을 미리 막아 실패 없이 처리되는가
동시성 제어는 성능과 속도 사이의 트레이드오프
유감스럽게도 동시성 제어에서 정합성과 성능을 모두 챙기는 방법은 없다.
개발하는 프로그램의 특성에 따라 정합성과 성능 중 무엇이 더 중요한지 판단하고, 그에 맞는 방법을 선택하자.
티켓팅 사이트. 큐스토 귀엽다

여러 사람이 동시에 같은 좌석을 선택하면, 비관적 락으로 한 명만 선점에 성공하고 나머지는 "이미 선택된 좌석입니다" 안내를 받아 결제 진행이 불가능함.

나무위키에는 동시수정 이라는 기능이 있다.
여러 사람이 동시에 같은 문서 저장을 시도하면, 낙관적 락으로 먼저 저장한 사람의 수정만 반영되고, 나머지 사람은 "편집 충돌" 안내를 받아 최신 내용을 확인한 뒤 다시 저장해야 한다.
