강의

멘토링

커뮤니티

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

쵸잉님의 프로필 이미지
쵸잉

작성한 질문수

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

좋아요 수 설계 - 동시성 문제

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

작성

·

18

·

수정됨

0

  1. 강의에서는 비관적 락과 낙관적 락을 다루셨는데, 일반적으로 대규모 서비스가 아닌이상 좋아요 자체가 순식간에 많은 트래픽이 몰릴것같지않아 낙관락으로 처리하는 것이 더 효율적일것같다고 생각이듭니다. 그래도

    극단적인 상황을 대비해서, 뒤에서 나오는 조회수 처리처럼 레디스로 좋아요 수를 증가시키고 스케줄링같은걸로 RDB에 백업하는 방식은 어떤가요?

  2. 동시성처리에서 비관적 락으로만 처리해야 하는 상황이 있을까요? 레디스의 분산 락을 사용하는 것이 성능 측면에서 비관락보다 유리할 때도 있을 것 같은데, 실제로 비관락을 반드시 써야 하는 예시나 사례가 궁금합니다.

  3. RDB 트랜잭션(@Transactional) 내부에서 레디스를 함께 업데이트하는 경우, RDB에서 장애가 발생해서 롤백이됬는데 Redis 만 데이터가 업데이트 되는 경우도 발생할수도 있을것같은데. 이런 경우를 어떻게 처리하는지, 2PC를 적용하는지 아니면 다른 방법이 있는지도 궁금합니다.

답변 1

0

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

질문해주신 내용은 데이터베이스의 동시성 문제 해결 방안과 Redis를 활용한 최적화 방법에 대한 것입니다. 특히 대규모 시스템에서의 좋아요 처리 방법과 관련된 다양한 처리 방안을 탐색하고자 하신 것 같네요. 각 질문에 대해 아래와 같이 정리해 드립니다.

1. 낙관적 락 및 Redis 활용 방안

  • 일반적으로 낙관적 락은 충돌 발생 가능성이 낮은 경우 유리하며, 성능 측면에서 효율적입니다. Redis를 활용하여 일시적으로 좋아요 수를 저장하고 스케줄링 또는 배치 프로세스를 통해 RDB에 백업하는 방식은 확장성과 성능을 개선할 수 있습니다.
  • 이 접근법은 주기적으로 데이터를 동기화하여 일관성을 유지할 수 있게 하며, 특정 시점에 데이터 동기 문자체가 지연될 수 있다는 점을 염두에 두어야 합니다.

2. 비관적 락 사용해야 하는 경우와 Redis의 분산 락

  • 비관적 락은 트랜잭션이 데이터의 충돌을 피하고 싶을 때 사용됩니다. 예를 들어, 금융 거래재고 관리와 같은 안전이 중요한 시스템에서는 비관적 락이 적합할 수 있습니다.
  • 분산 시스템에서는 Redis의 분산 락이 위와 같은 락을 피할 수 있도록 도움을 줄 때도 있습니다. 분산 락을 통해 여러 서버에 걸쳐 락을 관리할 수 있으며, 이는 특정한 성능 상 이점을 줄 수 있습니다.

3. Redis와 RDB의 트랜잭션 처리

  • Redis와 RDB가 같은 트랜잭션에 속하는 경우, 2PC (Two-Phase Commit Protocol) 를 적용할 수 있으나 이는 복잡성과 성능 이슈가 있을 수 있습니다.
  • 대신, 보상 트랜잭션을 도입하여 실패 시 롤백을 수동으로 설계하거나 가능한 데이터 불일치를 허용하고 비동기적으로 동기화 처리를 확인하여 처리할 수도 있습니다.

더 많은 정보를 원하시면 아래 링크를 참고하시길 바랍니다:

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

쵸잉님의 프로필 이미지
쵸잉

작성한 질문수

질문하기