강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

scorbiclife님의 프로필 이미지
scorbiclife

작성한 질문수

스프링 DB 1편 - 데이터 접근 핵심 원리

트랜잭션 - 개념 이해

Read Committed 격리 수준 사용 관련 질문

작성

·

18

·

수정됨

0

Non-repeatable read가 발생 가능한 Read Committed 격리 수준에서 어떻게 비즈니스 로직의 정합성을 유지할 수 있는지 바로 이해하지 못했다가, 검색 및 추론을 통하여 아래 [1]과 같이 이해했습니다.

질문

  1. 제가 잘 이해했는지 확인하기 위해서 질문드렸습니다! 혹시 근본적으로 오해한 부분이 있을까 두렵습니다ㅠㅠ

  2. 제가 잘 이해한 것이 맞다면, Read Committed 격리 수준을 사용할 때 데이터 정합성을 유지하기 위한 디테일들을 신경쓰면서 데이터 접근 계층의 로직을 작성하는지 궁금합니다.

[1] 제가 이해한 Read Committed 격리 수준에서 데이터 정합성을 유지하기 위한 가정 및 필요조건

  1. JPA를 사용한다.

  2. RDBMS가 Read Committed 격리 수준을 구현할 때 MVCC를 사용한다.

    1. 이유: JPA를 활용하여 비즈니스 로직을 작성할 때 데이터베이스 전역적으로 잘 정의된 일관적인 스냅샷이 존재한다고 가정하기 때문

  3. JPA로 작성한 코드가 항상 JPA의 1차 캐시를 cache hit하는 경우 Repeatable Read 격리 수준처럼 사용해도 무방하다.

  4. JPA에서 Lazy Loading을 사용한다면, 다른 MVCC 스냅샷의 데이터가 조회될 때에도 비즈니스 로직의 정합성이 깨지지 않는 맥락에서만 사용한다.

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

scorbiclife님이 JPA와 Read Committed 격리 수준에 대해 이해하신 내용을 바탕으로 몇 가지 추가 정보를 드리겠습니다.

Read Committed 격리 수준은 트랜잭션이 커밋한 변경사항만 읽을 수 있게 보장합니다. 이는 Dirty Read를 방지하지만, Non-Repeatable Read와 Phantom Read는 여전히 발생할 수 있습니다. JPA의 경우, 영속성 컨텍스트를 통해 1차 캐시를 이용하여 이러한 문제를 일정 부분 해소할 수 있습니다.

  1. JPA를 사용한다: JPA는 어플리케이션 레벨에서 영속성 컨텍스트와 1차 캐시를 활용해 일관성을 제공합니다. 영속성 컨텍스트 내에서 같은 엔티티에 대한 반복적인 읽기가 캐시를 통해 처리가 되므로 ‘Repeatable Read’ 효과를 가질 수 있습니다.

  2. RDBMS가 MVCC를 사용한다: MVCC(Multi-Version Concurrency Control)는 버전 관리를 통해 여러 트랜잭션이 동시에 진행될 때 데이터 일관성을 유지합니다. 이로 인해 트랜잭션 간 간섭을 최소화할 수 있어, 데이터를 읽는 동안 안정성을 제공합니다.

  3. JPA의 1차 캐시 활용: JPA에서 1차 캐시는 트랜잭션이 진행되는 동안 같은 데이터를 반복적으로 읽을 때 성능을 높이고 일관성을 유지하는데 도움을 줍니다.

  4. Lazy Loading 주의점: Lazy Loading은 실제 필요 시점에 데이터를 불러오는 방식으로, 여러 트랜잭션이 특정 시점에서 동일한 완료 상태의 데이터를 보장하지 않을 수 있습니다. 이 경우 데이터 정합성이 깨지지 않도록 비즈니스 로직 상에서 주의가 필요합니다.

관련 질문에 유사한 답변이 있는 게시글을 소개해 드리겠습니다:
- “DB격리레벨 강의자료중 궁금한점이 있습니다.”

이 답변들이 scorbiclife님께 조금이라도 도움이 되었으면 좋겠습니다. 😊

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

scorbiclife님의 프로필 이미지
scorbiclife
질문자

안녕하세요. 공유해주신 유사 게시글이 관련 있는 내용이라, 저와 이 질문글을 읽는 분들이 참고할 만한 좋은 레퍼런스인 것 같습니다.

유사 게시글과 그 게시글에서 공유된 블로그 글을 모두 읽어 보았는데, 제가 해석하기로는 블로그 글에서 실행한 내용이 저의 3번 질문의 맥락과 일치하는 것 같습니다.

다만 저는 2번과 4번 질문을 작성한 논리적인 이유가 있었는데, 그 맥락이 AI 인턴님께서 답변주신 내용에 충분히 담기지 않은 것 같습니다. 혹시 심층적인 논리적 추론이 가능한 모델로 제가 레퍼런스를 검토할 수 있는 답변을 주시거나, 실제 신뢰할 수 있는 분께서 저의 잘못될 수 있는 이해를 검토해주시면 감사드립니다.

scorbiclife님의 프로필 이미지
scorbiclife

작성한 질문수

질문하기