들어가기앞서…

프로젝트에서 동시성 문제를 해결하기 위해 락에 대해서 공부하고, 또 성능 개선을 위해 고민까지 해보았다.

하지만 결국 락을 걸고 동시성을 해결한다는 것은, 하나의 요청을 처리하는 동안 모든 요청이 대기를 하기때문에 성능이 눈에띄게 좋아지는 것은 힘들 것 같다는 생각이 들었다.

성능을 개선하기위해 구글링을 하니 ‘분산 락’이라는 것에 대한 언급이 많았다. 분산 락은 무엇일까? 한 번 알아보자.


분산 락

분산락은 분산 시스템에서 여러 노드나 프로세스가 동시에 공유 자원에 접근할 때 발생하는 충돌을 방지하고, 자원의 일관성을 유지하기 위해 사용되는 기술이다.

분산 락의 장점

분산 락 장점은 나중에..작성하자

분산 락의 종류

분산 락을 구현할 수 있는 방식은 여러가지가 존재한다.

분산 락 구현에는 Redis, MySQL의 네임드 락, 그리고 ZooKeeper 등의 기술이 사용되며, Redis는 주로 SETNX 명령어와 Redlock 알고리즘을 통해, MySQL은 자체적으로 제공하는 네임드 락을 활용해 동시성 문제를 해결한다.

분산 락 적용 이유

하지만 필자가 진행중인 프로젝트는 단일 서버인데도 Redis 분산 락을 적용하기로했다.

  1. 커넥션 풀 / 자원 고갈 방지

현재 select … for update문으로 요청이 몰릴 시, 모든 요청이 DB 커넥션을 붙잡고 대기하게 된다. 때문에 커넥션 풀 고갈이 일어나 timeout 시간이 지나면 예외가 발생하게 된다.