Spring Bean과 DB 동시성 문제

trankill_Kim·2024년 4월 14일

🌿 Spring bean이란?

Spring Container가 관리하는 자바 객체로, default scope가 Singleton이다.

🧐 singleton이라고?

나 혼자 서버에 request를 보내는 게 아니라 천명의 사람들이 request를 보내면 어떻게 되는 거지? 여러 스레드가 동시에 데이터베이스에 접근하는 거니까 문제가 생길 수도 있지 않을까?

🔎 이를 막기 위해서는 어떻게 해야 할까?

여러 방법이 있지만 그 중에서도 MySQL을 활용하는 방법 두가지를 정리해보겠다.

1. Pessimistic Lock

실제 데이터에 락을 걸어서 여러 스레드가 동시에 접근하는 것을 막는 방법이다.

  • 마트 계산대를 생각하면 된다.
  • 데드락이 발생할 수 있다는 게 단점이다.

🔒 데드락이란?
서로 상대방의 작업이 끝나기만을 기다리느라 정체된 상태

2. Optimistic Lock

버전을 통해 Data Consistency를 확인하는 방법이다.

  • 충돌이 발생한 요청은 다시 처리하려 시도해야 하기 때문에 충돌이 빈번할수록 성능에 부정적 영향을 미친다.

0개의 댓글