Study

분산락

kinim329 2026. 5. 6. 22:19

분산락이란?

분산락은 여러 서버나 여러 프로세스가 동시에 같은 자원에 접근하지 못하도록 막는 잠금 방식이다.

일반적인 synchronized나 Java Lock은 하나의 애플리케이션 안에서는 동작하지만, 서버가 여러 대로 늘어나면 한계가 있다.

예를 들어 서버가 1대라면 아래처럼 처리할 수 있다.

synchronized void buyStock() {
    // 매수 처리
}

하지만 서버가 2대 이상이면 문제가 생긴다.

  • 사용자 요청 1 → asset-service 서버 A
  • 사용자 요청 2 → asset-service 서버 B

이 경우 서버 A와 서버 B는 서로의 메모리를 공유하지 않는다.

그래서 서버 A에서 락을 걸어도 서버 B는 그 사실을 모른다.

이럴 때  Redis같은 외부 저장소를 이용해서 여러 서버가 공통으로 확인할 수 있는 락을 거는 방식이 분산락이다.

왜 필요할까?

분산 환경에서는 같은 데이터에 동시에 접근하는 상황이 자주 발생한다.

예를 들어 주식 매수 요청이 거의 동시에 두번 들어왔다고 가정해보자.

현재 잔액이 10000원이고, 주식 1주 가격이 7000원이라면 정상적으로는 한 번만 매수되어야한다.

하지만 동시에 요청이 들어오면 두 요청이 모두 같은 잔액을 조회할 수 있다.

  • 요청 A: 잔액 10000원 조회
  • 요청 B: 잔액 10000원 조회
  • 요청 A: 7000원 매수 가능 판단
  • 요청 B: 7000원 매수 가능 판단

결과적으로 실제 잔액보다 더 많은 금액이 사용될 수 있다.

이런 문제를 막기 위해 특정 사용자 계좌나 특정 주식 보유 정보에 대해 한 번에 하나의 요청만 처리되도록 잠금을 걸어야 한다.

'Study' 카테고리의 다른 글

로그 찍기의 중요성  (0) 2026.05.09
Redis로 분산락 거는 방법  (0) 2026.05.07
N+1문제  (0) 2026.05.05
Redis Sorted Set  (0) 2026.05.02
WebSocket & 실시간 통신  (0) 2026.05.01