inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

좋아요 수 구현

트랜잭션 레벨에 대해 궁금합니다!

해결된 질문

152

이동연

작성한 질문수 8

0

안녕하세요. 쿠케님 강의가 너무 유익해서 잘듣고있습니다!

강의를 진행하면서 문득 생각이 든건데 실무에서 트랜잭션 레벨을 조절을 하기도 하나요???

기본 트랜잭션은 REPEATABLE_READ인데 갭락이 걸릴것을 우려해서 COMMITED_READ로 바꾼다거나 이런식으로 트랜잭션 레벨을 조절하는 경우가 있나요???

java mysql spring-boot kafka redis

답변 2

0

쿠케

동연님, 안녕하세요!

강의 잘 들어주셔서 감사하네요~!

 

실무에서 트랜잭션 레벨을 조절하기도 합니다!

높은 레벨일수록 일관성을 보장하는 대신 성능을 희생할 수 밖에 없다보니,

트랜잭션이 딱히 중요하지 않은 서비스에서는 read uncommitted 또는 read commited로 낮춰서 운영하기도 합니다!

그 위의 레벨은 제가 직접 경험한건 아니지만, 금융처럼 일관성이 중요한 곳에서는 더 높은 레벨로 제어할 수도 있을 것 같네요. 이러한 도메인에서는 성능에서 손해를 보더라도 데이터 일관성이 깨지지 않는게 더욱 중요할 수 있습니다.

서비스 요구사항과 성능/일관성 트레이드오프 고려해서 실제로 조절하기도 합니다!

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 이동연님.

트랜잭션 레벨의 조절에 관한 질문을 주셨군요. 트랜잭션 격리 수준은 데이터베이스의 동시성과 일관성에 직접적인 영향을 미치기 때문에 실무에서는 이 레벨을 전략적으로 조정하는 경우도 있습니다. 다음은 주요한 상황들입니다:

트랜잭션 격리 수준의 종류와 조절 이유

  1. Read Uncommitted: 가장 낮은 수준으로, 아직 커밋되지 않은 데이터를 다른 트랜잭션이 읽을 수 있습니다. 주로 성능이 매우 중요한 경우에 사용될 수 있지만, 데이터의 정확성이 중요한 시스템에는 거의 사용되지 않습니다.

  2. Read Committed: 대부분의 애플리케이션에서 기본적으로 사용되는 레벨입니다. 커밋된 데이터만 읽기 때문에 Dirty Read가 방지됩니다. 높은 성능과 적당한 데이터 일관성을 보장합니다.

  3. Repeatable Read: 동일 트랜잭션 내에서 같은 데이터를 여러 번 읽더라도 동일한 결과를 보장합니다. Phantom Read를 제외한 대부분의 경우에 안전하며 MySQL의 기본값입니다.

  4. Serializable: 가장 높은 격리 수준으로, 완전한 일관성을 보장하지만 성능 비용이 상당히 큽니다. 실행 흐름이 거의 직렬화되어 병렬 처리 이점을 상실합니다.

실무에서의 조절 사례

  • 갭 락 회피: 만약 특정 작업이 갭 락으로 인해 병목이나 데드락을 야기한다면, Read Committed와 같은 낮은 격리 수준으로 전환하여 성능을 개선할 수 있습니다.

  • 트래픽 패턴 변화: 고화된 트래픽에서 데이터 일관성보다는 성능을 중시해야 하는 경우가 있다면 트랜잭션 레벨을 조정하여 처리를 최적화할 수 있습니다.

  • 데이터 보호: 민감한 데이터를 다루는 경우에는 격리 수준을 높여 무결성을 보장하는 방법도 선택할 수 있습니다.

위와 같은 실무적 배경에서 트랜잭션 레벨은 조정될 수 있으며 이는 시스템의 요구 사항과 성능 트레이드오프에 따라 결정됩니다. 추가적인 정보는 자료를 참고하시길 바랍니다: 트랜잭션 격리 수준 실무 적용 사례 (게시글 제목).

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

consumer에서 에러가 발생할 경우 데이터 유실 문의

0

35

2

게시글 테스트 데이터 삽입

0

43

2

정렬, 필터, 검색 등의 조건이 붙을 경우 최적화할 수 있는 방법이 무엇이 있을까요?

0

92

2

좋아요 기능 정합성 보장 방법

0

89

2

좋아요 동시성처리 최적의 선택?

1

112

2

프론트엔드 msa 환경 api 주소 통합? 과 서버끼리 통신 방식에대해

0

83

2

안녕하세요 무한스크롤 강의듣다가 질문이 있습니다.

0

53

1

조회수 조회 로직 질문

1

63

2

비로그인 유저도 어뷰징 방지 정책

1

61

2

CommentServiceTest의 테스트 로직 질문

0

49

2

무한 스크롤 방식에서 페이지 번호 방식 쿼리의 문제점 의문

1

68

2

path 쿼리 관련 질문드립니다!

0

53

2

antigravity 에디터를 쓰신다면 종료해주세요

1

118

0

프로젝트 구조

0

80

2

article_like_count api test

0

69

2

이벤트 페이로드 객체의 생성 방식이 팩토리 메서드 패턴이 아닌 빌더 패턴인 이유가 궁금합니다!.

0

97

2

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

0

85

2

findByPath에서 articleId로도 검색을 해야 할 것 같아요.

0

86

3

jpa ddl-auto none을 하는 이유와 join 방법

0

90

2

팩터리 메소드와 response 객체 사용 이유가 궁금합니다!

0

84

2

커서 기반 페이지네이션 과 무한 스크롤링

0

94

2

게시글 생성 로직에서 오류 발생시 redis 게시글 수 되돌리기

0

94

2

멀티 모듈이 아닌 MSA 환경에서 common

0

144

2

2Depth 강의 도중 궁금한 점 있어요!!

0

71

2