인프런 커뮤니티 질문&답변
언커밋 상태에 대해 질문드립니다.
해결된 질문
작성
·
26
1
4-4 강의를 보면서 궁금한 점이 있어서 질문드립니다!
엉터리 기사를 예시로 들어주실 때 언커밋 상태가 잘 이해가 가지않습니다. 다른 기자도 기사를 봤다는건 일단 기사가 올라는 간 상태인가요? 그럼 커밋된 단순 기사 오보와 차이가 무엇인가요..?
언커밋된 기사가 롤백되는거랑 커밋됐지만 오보를 뒤늦게 눈치채고 삭제하는거랑 차이를 모르겠습니다. 언커밋이 정확히 어떤 상태인건가요?
답변 2
0
안녕하세요 라이언님 좋은 질문 해주셔서 감사합니다!
1. 언커밋 상태란 정확히 무엇인가?
언커밋 상태는 "작업은 했지만 아직 확정하지 않은 상태"예요. 워드로 비유하면 이렇습니다:
언커밋: 문서 내용을 타이핑하고 있는데, 아직 "저장" 버튼을 누르지 않은 상태
커밋: "저장" 버튼을 눌러서 파일로 확정된 상태
롤백: "저장 안 함"을 선택해서 변경사항을 버린 상태
데이터베이스에서는 다음과 같이 분류됩니다.
UPDATE같은 SQL을 실행했지만COMMIT을 하지 않은 상태 → 언커밋COMMIT을 실행해서 데이터베이스에 영구 반영 → 커밋ROLLBACK을 실행해서 변경사항 취소 → 원래 상태로 복귀
2. "다른 기자도 기사를 봤다"는 것의 의미
여기서 핵심은 기자 A의 기사가 실제로 확정되어 "발행"된 게 아니라는 점입니다.
기자 A의 상황
기사 에디터 화면에서 "손흥민 맨유 이적!" 작성 중
아직 "발행" 버튼을 누르지 않음 (언커밋 상태)
화면에는 보이지만, 공식적으로 발행된 건 아님
기자 B의 상황
Read Uncommitted 레벨에서는 기자 A의 "작성 중인" 기사까지 볼 수 있음
마치 다른 사람이 작성 중인 워드 문서를 엿보는 것과 같음
기자 B가 이걸 보고 "확정된 정보"라고 착각해서 자기 기사에 인용해버림
3. 커밋된 오보와의 차이
커밋된 오보 (발행된 잘못된 기사):
1. 기자 A: "손흥민 맨유 이적!" 작성 완료
2. 기자 A: "발행" 버튼 클릭 (COMMIT) → 공식 발행됨
3. 기자 B: 발행된 기사를 보고 인용
4. 기자 A: "앗, 오보였네!" → 기사 삭제 요청
5. 결과: 두 기사 모두 실제로 발행되었고, 나중에 수정/삭제
언커밋된 기사 (작성 중 취소):
1. 기자 A: "손흥민 맨유 이적!" 작성 중 (언커밋)
2. 기자 B: 작성 중인 기사를 엿보고 인용 (Dirty Read)
3. 기자 A: "아니다" → 취소 버튼 (ROLLBACK)
4. 결과: 기자 A의 기사는 애초에 발행되지 않았는데,
기자 B는 "발행될 것"이라고 착각하고 인용해버림
4. 데이터베이스 관점에서의 차이
언커밋 롤백:
-- Transaction A
START TRANSACTION;
UPDATE news SET title = '손흥민 맨유 이적'; -- 변경
-- (이 시점에서 Transaction B가 읽음 = Dirty Read)
ROLLBACK; -- 취소! 애초에 변경이 없었던 것처럼 됨
커밋 후 삭제:
-- Transaction A
START TRANSACTION;
INSERT INTO news VALUES ('손흥민 맨유 이적');
COMMIT; -- 확정! DB에 영구 저장됨
-- Transaction B
SELECT * FROM news; -- 확정된 기사 조회
-- 나중에
DELETE FROM news WHERE title = '손흥민 맨유 이적'; -- 오보 삭제
차이점:
언커밋 롤백: 데이터가 "처음부터 없었던 것"으로 처리 (히스토리에도 안 남음)
커밋 후 삭제: 데이터가 "한 번 존재했다가 삭제됨" (로그에 기록 남음)
이라고 분류해야 합니다! 질문 주신 내용이 트랜잭션 격리성의 핵심 개념이니, 정확히 이해하고 넘어가시면 됩니다! 실제 프로젝트에서 격리 레벨을 적절히 선택하는 경험을 쌓아보시길 추천드립니다 🥰
0
안녕하세요, 신나는 라이언님. 인프런 AI 인턴입니다.
언커밋 상태는 데이터베이스 트랜잭션의 ACID 특성 중 하나인 “일관성”과 관련 있습니다. 데이터베이스에서의 “언커밋” 상태는 트랜잭션이 완료되지 않은 중간 단계라고 할 수 있는데요, 이 상태에서는 해당 트랜잭션이 다른 사용자에게 보이지 않거나 그 시점으로 인해 데이터를 연관된 모든 사용자가 볼 수 있는 것이 보장되지 않습니다.
언커밋 상태
- “언커밋” 상태의 데이터는 트랜잭션이 아직 완료되지 않았기 때문에 다른 사용자가 볼 수 없습니다. 만약 이 상태에서 롤백이 이루어지면, 해당 변경 사항은 데이터베이스에 반영되지 않고 이전 상태로 돌아갑니다.
- 반면, “커밋” 상태는 모든 변경 사항이 완전히 데이터베이스에 반영되어, 다른 모든 사용자에게 보이는 상태를 의미합니다. 만약 커밋된 후에 오보가 발견되면, 새로운 트랜잭션을 수행하여 데이터를 수정해야 하며, 이는 삭제 작업이나 다른 조치를 통해 이루어집니다.
언커밋 상태에서의 롤백은 미완료 작업을 무효화하는 것이며, 커밋된 후의 수정은 이미 완료된 작업을 변경하는 것으로, 데이터 처리의 시점과 방법이 다릅니다.
이러한 개념이 이해되신다면, 트랜잭션과 관련된 데이터의 일관성을 더 깊이 이해하실 수 있을 것입니다. 유사한 질문에 대한 추가적인 자료는 다음 링크를 참조해 주세요:
- Database Transactions: Understanding Committed and Uncommitted States
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.




