강의

멘토링

커뮤니티

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

주주파파님의 프로필 이미지
주주파파

작성한 질문수

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

[33. 좋아요 수 구현] 에서 테스트 하는 화면 동시성 문제

해결된 질문

작성

·

32

0

  • 학습 관련 질문을 최대한 상세히 남겨주세요!

  • 고민 과정도 같이 나열해주셔도 좋습니다.

  • 먼저 유사한 질문이 있었는지 검색해보세요.

인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

 

[33. 좋아요 수 구현] 에서 테스트 하는 화면에서요.
해당 방법대로 실행을 하면 동시성 문제가 발생합니다.

Record has changed since last read in table 'article_like_count'

저는 MariaDB를 사용하고 있는데요.
MySQL도 마찬가지로 기본 잠금 수준이 Repeatable Read 라고 알고 있습니다.
해당 기본 수준으로 실행하면 동시성 문제로 영상과 다른 결과를 보이게 됩니다.

따라서 잠금 수준을 Read Commited 나 Read Uncommited 로 변경하면 제대로 실행이 됩니다.

이렇게 하는 것이 정답인지 아니면 다른 원인이 있는건지 알려주세요.

답변 2

1

쿠케님의 프로필 이미지
쿠케
지식공유자

주주파파님, 안녕하세요!

 

이전에도 동일한 질문이 있었는데요(https://inf.run/f8wTm),

제가 데이터베이스 개발자는 아니다보니 각 DB별 상세한 내부 동작까지는 저도 명쾌하게 답변드리긴 어렵기 때문에, 일단 강의와 동일한 환경으로 진행하는 것을 권장 드리고 있습니다.

 

추가로 원인 관련해서는 찾아보았는데요, 정확히 어떤 쿼리와 어떤 db 버전에서 해당 에러가 발생했다는 말씀이실까요?

https://mariadb.com/docs/server/server-usage/storage-engines/innodb/innodb-system-variables#innodb_snapshot_isolation

innodb_snapshot_isolation 설정이 디폴트로 ON이라면, 위 에러가 발생할 수 있을 것 같습니다. (설정에 대한 설명과 버전별 차이에 대해서는 위 문서 참고)

강의에서 진행하는 mysql 실습 환경은 단일 레코드에 대한 동시 업데이트 시에 락을 획득하려고 대기하게 되지만,

maria db에서 snapshot isolation 설정이 ON이라면 언급 주신 에러를 던지게 되는 동작이네요.

innodb_snapshot_isolation 설정을 OFF로 변경 후 테스트 해보시겠어요?

주주파파님의 프로필 이미지
주주파파
질문자

OFF로 변경하니 원하는 결과를 얻을 수 있습니다.

답변 감사합니다.

0

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

MariaDB를 사용하신다고 하셨고, 동시성 문제와 관련된 질문을 주셨네요. 기본적으로 MySQL과 MariaDB의 잠금 수준은 Repeatable Read로 설정되어 있어서 트랜잭션마다 데이터를 동일하게 읽을 수 있는 장점이 있지만, 이로 인해 동시성 문제가 발생할 수 있습니다. 말씀하신 대로, 이를 해결하기 위해 Read Committed로 격리 수준을 변경하는 것이 방법 중 하나입니다.

문제의 원인 및 해결 방법

  1. 잠금 수준 문제: Repeatable Read 수준에서는 트랜잭션이 시작되었을 때의 데이터를 보여주기 때문에, 동시성이 높은 환경에서 업데이트 및 읽기 오류가 발생할 수 있습니다. 이 경우 Read Committed로 설정을 변경하면 커밋된 데이터만 읽기 때문에 동시성 문제를 저감할 수 있습니다.

  2. 낙관적 락 활용: MariaDB에서 기본 설정으로 제공되는 락을 활용할 수도 있지만, 데이터베이스 수준에서 직접 관리하는 것이 아니라, 애플리케이션 수준에서 낙관적 락을 사용하여 충돌을 관리할 수 있습니다. JPA에서는 @Version 어노테이션을 사용하여 낙관적 락을 구현할 수 있습니다.

  3. 데이터 환경 특성 고려: MariaDB와 MySQL의 동작 특성이 미세하게 다를 수 있으므로, 테스트 환경에 맞게 데이터베이스 설정을 최적화하는 것이 중요합니다.

관련 자료 및 유사 글

비슷한 상황에서 발생할 수 있는 동시성 문제 해결 사례를 참고하시길 권장드립니다:

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

주주파파님의 프로필 이미지
주주파파

작성한 질문수

질문하기