Skip to content

Spring Boot ‐ 동시성 이슈를 데이터베이스로 해결하기

dnwls16071 edited this page Jan 9, 2025 · 4 revisions

📚 Pessimistic Lock(비관적 락)

  • 실제로 데이터에 Lock을 걸어서 정합성을 맞추는 방법이다.
  • Exclusive Lock을 걸게 되면 다른 트랜잭션에서는 Lock이 해제되기전에 데이터를 가져갈 수 없게 된다.
  • 데드락이 걸릴 수 있기 때문에 주의해서 사용해야 합니다.

📚 Optimistic Lock(낙관적 락)

  • 실제로 Lock을 이용하지 않고 버전을 이용함으로써 정합성을 맞추는 방법이다.
  • 먼저 데이터를 읽은 후에 update를 수행할 때, 현재 내가 읽은 버전이 맞는지 확인하여 업데이트 한다.
  • 내가 읽은 버전에서 수정사항이 생겼을 경우에는 application에서 다시 읽은 후에 작업을 수행해야 한다.

📚 Named Lock(네임드 락)

  • 이름을 가진 Metadata Locking 이다.
  • 이름을 가진 lock을 획득한 후 해제할 때까지 다른 세션은 이 lock을 획득할 수 없도록 한다.
  • 주의할 점으로는 Transaction이 종료될 때, lock이 자동으로 해제되지 않는다.
  • 별도의 명령어로 해제를 수행해주거나 선점시간이 끝나야 해제가 된다.

[ 기타 ]

[ 사용 기준에 대한 질의 응답 정리 ]

  • 낙관적 락과 비관적 락을 사용하는 기준은 "동시에 수정을 하는 일이 빈번하게 일어나는가?" 이다.
  • 동시에 수정을 하는 일이 적다면 낙관적 락을, 동시에 수정하는 상황이 빈번하게 발생한다면 비관적 락을 사용한다.
  • 예를 들어, 1000명의 사용자가 동시에 A라는 상품을 구매하려고 할 때, 충돌이 빈번하게 일어난다고 할 수 있다.
  • 반면 1000명의 사용자가 A라는 상품을 구매하지만 구매 시간은 다르다고 할 때, 충돌이 비교적 적게 일어난다고 할 수 있다.

Spring Batch

✏️스프링 배치에 대해서 정리한 내용입니다.

Spring & Spring Boot

✏️스프링과 스프링 부트에 대해 정리한 내용입니다.

Java

✏️자바에 대해서 정리한 내용입니다.

JPA(Java Persistence API)

✏️JPA에 대해 정리한 내용입니다.

QueryDsl

✏️QueryDsl에 대해 정리한 내용입니다.

HTTP(Hypertext Transfer Protocol)

✏️HTTP에 대해 정리한 내용입니다.

Docker

✏️Docker에 대해 정리한 내용입니다.

Kubernetes

✏️Kubernetes에 대해 정리한 내용입니다.

CI/CD(Continuous Integration/Continuous Deploy)

✏️Github Actions에 대한 개념을 공부하는데 좋았던 리포지토리입니다.

Redis

✏️Redis에 대해 학습한 내용과 프로젝트에서 Redis를 활용한 내용을 정리합니다.

MySQL

✏️MySQL에 대해 학습한 내용과 프로젝트에서 MySQL을 활용한 내용을 정리합니다.

Clean Code & Test

✏️[인프런 워밍업 스터디 3기] 클린 코드와 테스트에 대해 학습한 내용과 프로젝트에서 테스트 코드를 도입한 내용을 정리합니다.

Nginx

✏️Nginx에 대해 학습한 내용과 프로젝트에서 적용한 부분에 대해 정리한 내용입니다.

RabbitMQ

✏️RabbitMQ 공식문서와 서적, 강의 등으로 개인적으로 학습한 내용과 프로젝트에서 적용한 부분에 대해 정리한 내용입니다.

Algorithm

✏️신입/경력 이직시 필요한 코딩 테스트 시험을 준비합니다.

CS

✏️기술면접 CS 지식 기록

Clone this wiki locally