글들 보다가 흥미로워서 괜히 껴보려고 글 남겨보네요
지금 많은분들이 DB 격리수준으로 대화하고 계신것 같은데, 격리수준과 DB의 구현에 대해서 약간은 분리해서 보는게 좋다고 생각이 들어요.
우선 격리수준은 사실 생각보다 엄청 가볍게 정의되어있어서 REPEATABLE READ의 경우는 더티리드와 반복 불가능한 읽기를 방지하기만 하면 해당 격리레벨로 인정될 수 있습니다.
따라서 다른 글들에서 논의되었던 유령읽기는 애초에 고려 대상이 아니구요. (만약 유령읽기까지 방지하면 그 순간부터는 DB 구현체에서 REPEATABLE READ라고 해도 SQL-92부터 제시되었던 모델 기준으로는 SERIALIZABLE에 가까울 수 있는거죠. 다만, 그렇게 해석하는것 자체가 괜찮냐에 대한 내용은 하기 링크 참고 하시면 좋을 듯 합니다)
하지만 MySQL이나 PostgreSQL은 이 부분을 조금 더 보장이 되게끔 구현이 되어있는 거죠. (오라클은 애초에 해당 레벨이 없는 ㅋㅋㅋ...)
따라서 DBMS를 사용하는개발자의 입장에서는 쓰시는/공부하는 DBMS 구현이 어떻게 되어있는지를 알고 사용하시는게 중요하다고 생각됩니다.
개념 자체에 대해서 더 공부해보고 싶으신 분은 A Critique of ANSI SQL Isolation Levels 와 https://jepsen.io/consistency 등 자료를 보시면 도움 되실것 같아 남겨봅니다.