PORTFOLIO/TECHNICAL DECISION-MAKING

[CodeChef - 기술적 의사 결정]이벤트 동시성 제어

jki09871 2025. 1. 6. 15:35

문제 상황

포인트 이벤트 진행 시 많은 사용자가 몰려 동시성 문제가 발생하였고, 이로 인해 데이터 불일치 및 성능 저하가 확인되었습니다. 이를 해결하기 위해 다양한 동시성 제어 방법(낙관락, 비관락, 분산락)을 검토한 결과, 분산 락을 도입하게 되었습니다.

시스템 내에서 데이터베이스 접근이 빈번하게 발생하면서 동시성 문제, DB 부하 증가, 그리고 데이터 일관성 저하 문제가 나타났습니다. 특히, 다수의 사용자가 동시에 데이터를 갱신하거나 조회하는 경우 트랜잭션 충돌이 빈번하게 발생해 응답 지연데이터 오류가 발생했습니다. 이러한 문제를 해결하기 위해 동시성 제어 방식을 단계적으로 개선하여 최적의 솔루션을 찾았습니다.


동시성 제어 방식 발전 과정 및 선택 이유

1. DB 바로 저장

  • 특징: 별도의 동시성 제어 없이 모든 요청이 즉시 DB에 접근하여 데이터를 처리하는 방식.
  • 문제점:
    • 다수의 스레드가 동시에 접근하면서 트랜잭션 충돌이 빈번하게 발생.
    • DB 부하 증가응답 속도 저하.
    • 데이터 불일치 문제 발생.
  • 결론: 동시성 제어가 없어 간단히 구현 가능했지만, 성능과 데이터 일관성 문제가 심각해 개선이 필요.

2. 낙관적 락

  • 특징: 데이터 경합이 발생할 가능성을 낮게 보고, 충돌 발생 시 재시도하는 방식.
  • 장점:
    • 충돌이 적은 환경에서는 높은 처리 속도를 제공.
    • DB 바로 저장 방식에 비해 데이터 일관성 개선.
  • 단점:
    • 충돌이 증가하면 재시도로 인해 성능 저하 발생.
    • 응답 시간이 불안정.
  • 결론: 충돌 빈도가 낮은 경우 적합하지만, 충돌이 많은 환경에서는 효율이 떨어져 개선 필요.

3. 비관적 락

  • 특징: 데이터를 처리할 때마다 락을 걸어 다른 스레드가 접근하지 못하도록 하는 방식.
  • 장점:
    • 데이터 일관성을 보장.
    • 충돌 가능성을 원천 차단.
  • 단점:
    • 락 대기 시간 증가로 응답 시간이 느려짐.
    • 트랜잭션 처리 속도 감소.
  • 결론: 데이터 일관성은 확보했지만, 성능 저하가 발생하여 효율적인 개선 방안이 필요.

4. 분산 락

  • 특징: Redisson의 분산 락을 활용해 멀티 서버 환경에서도 동시성 제어 가능.
  • 장점:
    • 멀티 서버 지원: 분산 환경에서도 안정적인 동시성 제어.
    • 일관된 응답 속도: 락 대기 시간을 최적화해 빠르고 안정적인 처리 제공.
    • 데이터 일관성 보장: 데이터 충돌 없이 안전한 갱신 가능.
  • 단점:
    • 순서 보장 안됨
  • 결론: 멀티 서버 환경에서도 데이터 일관성과 성능을 모두 만족하는 했습니다.

최종 판단 및 효과

  1. 데이터 무결성 유지: 트랜잭션 충돌 방지로 이벤트 처리 안정성 확보.
  2. 빠른 처리 성능: Redis 기반 분산 락으로 트래픽이 몰려도 응답 속도 저하 없이 대응.
  3. 운영 효율성 개선: 대규모 트래픽 환경에서도 서비스 안정성을 유지.

결론

Redis 분산 락은 데이터 충돌을 방지하고 빠른 성능을 제공하지만, 요청 순서가 보장되지 않는다는 한계가 있습니다. 이 단점은 Redis Stream을 활용한 작업 순서 관리, 타임스탬프 정렬, 또는 **메시지 큐(Kafka 등)**를 도입해 추후 개선할 계획입니다. 현재 프로젝트에서는 정확성과 성능이 더 중요하다고 판단하여, Redis 분산 락이 가장 적합한 선택으로 평가되었습니다.