202. 병행 수행 시 문제점 (격리성 위배 시) - 동시성 제어 실패 부작용 갱신 손실 모순성 오손 읽기 연쇄 복귀 유령 읽기 트랜잭션 에러
핵심 인사이트: (201번 심화) 동시성 제어(관리인)가 졸거나 자물쇠(Lock)가 고장 났다고 치자. 10만 명이 하나의 DB(엑셀 파일)에 마구잡이로 접속해서 동시에 글자를 쓰고 지우면 어떤 생지옥이 열릴까? "야! 내가 기껏 1만 원 올렸더니 뒤에 온 놈이 내 결과를 덮어쓰고 지워버렸어!(갱신 손실) 아니, 방금 재고가 10개였는데 1초 뒤에 다시 보니까 왜 갑자기 5개로 줄어있어?!(모순성) 게다가 아까 에러 나서 롤백된 놈이 쓴 가짜 쓰레기 데이터를 내가 진짜인 줄 알고 꿀꺽 삼켜버렸네?!(오손 읽기)" 격리성(I) 헌법이 박살 났을 때 터지는 5가지 최악의 데이터 융단폭격 시나리오, 병행 수행의 문제점 5형제다.
Ⅰ. 병행 수행(Concurrent Execution)의 인터리빙(Interleaving)
- DB는 트랜잭션 A가 다 끝날 때까지 트랜잭션 B를 멍청하게 기다리게 두지 않습니다.
- 인터리빙: A의 쿼리 1줄 실행 ➜ B의 쿼리 1줄 실행 ➜ 다시 A 쿼리 실행. 이렇게 짧은 시간 단위로 섞어서(교차 실행) 처리하여 체감상 동시에 돌아가는 것처럼 만듭니다.
- 문제 발생: 이 섞어 찌개(인터리빙) 과정에서 195번 격리성(Isolation) 룰을 똑바로 지키지 않으면, 남의 덜 익은 데이터를 훔쳐 먹거나 덮어쓰는 사고가 필연적으로 터집니다.
Ⅱ. 병행 수행 시 발생하는 5대 악질 문제 (시험 단골) 🌟 핵심 🌟
이 5가지 현상은 정보처리기사, 감리사 등 모든 IT 시험에서 무조건 1문제가 출제되는 절대 족보입니다. (각 항목의 디테일은 203~207번에서 하나씩 파고듭니다.)
1. 갱신 손실 (Lost Update) - "내 노력이 허공으로 증발"
- 내가 A 데이터를 고치고 저장(Update)했는데, 나랑 0.001초 차이로 들어온 뒷사람이 똑같은 A 데이터를 다른 값으로 고치고 저장해 버렸습니다.
- 결과: 내가 고생해서 고친 데이터는 허공으로 영원히 날아가 버리고, 마지막 놈의 데이터만 살아남는 최악의 덮어쓰기 사고입니다. (가장 많이 일어남)
2. 모순성 (Inconsistency) - "아까랑 말이 다르잖아!"
- 일명 **'반복할 수 없는 읽기(Unrepeatable Read)'**라고도 합니다.
- 내가 트랜잭션 안에서 A값을 읽으니 100원이었습니다. 잠시 딴일 하다가 다시 A값을 읽었더니? 그사이에 다른 놈이 들어와서 A를 50원으로 홀랑 바꿔놓고 도망갔습니다.
- 결과: 하나의 트랜잭션 안에서 똑같은 걸 두 번 읽었는데 값이 달라지는 앞뒤가 안 맞는 미친 모순 현상입니다.
3. 오손 읽기 (Dirty Read) - "덜 익은 쓰레기를 삼킴"
- 트랜잭션 A가 데이터를 200원으로 고쳤습니다(아직 COMMIT은 안 한 임시 상태).
- 이 찰나에 딴 놈이 들어와서 그 아직 확정되지 않은 200원이 진짜인 줄 알고 꿀꺽 읽어서 자기 계산에 써먹었습니다. 근데 A가 에러 나서 ROLLBACK(취소) 되어버렸다면?!
- 결과: 딴 놈은 이 세상에 존재하지도 않는 가짜 데이터(Dirty Data)를 읽어버린 꼴이 되어 장부가 다 틀어집니다.
4. 연쇄 복귀 (Cascading Rollback) - "다 같이 지옥으로"
- 오손 읽기(Dirty Read)가 낳은 끔찍한 나비효과입니다.
- 딴 놈이 쓰레기 데이터를 주워 먹고 이미 "나 일 끝났어!(COMMIT)" 도장까지 찍어버렸습니다.
- 근데 그 쓰레기의 원본이었던 A가 롤백됩니다. 그럼 주워 먹었던 놈도, 그놈 걸 주워 먹었던 놈들도 도미노처럼 모조리 다 과거로 끌려가 취소(연쇄 롤백)되어야 하는, 병행 제어의 대참사입니다.
5. 유령 읽기 (Phantom Read) - "귀신이 나타났다!"
- 모순성(Unrepeatable Read)이랑 비슷하지만 다릅니다. 값이 바뀌는 게 아니라 '행(Row)' 자체가 새로 생겨납니다.
- 내가 "나이 20살인 사람 목록 다 가져와!" 했더니 5명이 나왔습니다. 다시 "20살 가져와!" 했더니 그사이에 누군가 20살 회원 가입(INSERT)을 해버려서 6명이 튀어나옵니다.
- 결과: 없던 유령(데이터 행)이 나타나서 통계나 집계 쿼리를 엉망으로 만듭니다.
📢 섹션 요약 비유: 동시성 제어(자물쇠)가 풀린 엑셀 파일은 **'여러 명이 동시에 붓을 들고 덤벼드는 하나의 거대한 캔버스 그림'**입니다. 5가지 재앙이 그림을 망칩니다. 1. 갱신 손실: 내가 사과를 빨갛게 칠했는데, 1초 뒤 친구가 초록색으로 덧칠해버려 내 빨간색이 흔적도 없이 사라집니다(덮어쓰기). 2. 모순성: 내가 호수를 파란색으로 보고 잠시 눈을 감았다 떴더니, 누가 그새 검은색으로 칠해놔서 "어? 아까 파란색이었는데?" 하고 미쳐버립니다. 3. 오손 읽기: 1번 친구가 사과를 칠하다 말고 "아 맘에 안 들어, 다 지울게(롤백)!" 하는 찰나에, 2번 친구가 그 칠하다 만 사과 색깔을 보고 "오, 이 색깔이랑 맞춰서 바나나 칠해야지!" 하고 칠해버립니다. 1번이 지워버린 가짜 찌끄러기 색깔(Dirty Data)에 맞춰 그림을 망쳐버립니다. 4. 연쇄 복귀: 가짜 색깔을 보고 바나나를 칠했던 2번 친구, 그걸 보고 또 포도를 칠했던 3번 친구까지 모두 "아 ㅆㅂ 다시 그려야 하네" 하고 연쇄적으로 도미노처럼 그림을 다 지워야 하는 생고생입니다. 5. 유령 읽기: 내가 그림의 사과 개수를 세었더니 3개였는데, 뒤돌아본 사이 누군가 사과 1개를 몰래 더 그려 넣어서(INSERT) 다시 세보니 4개가 되어 귀신에 홀린 듯한 기분이 드는 5대 지옥 시나리오입니다.