프로젝트에서 동시성 문제를 해결하기 위해 락에 대해서 공부하고, 또 성능 개선을 위해 고민까지 해보았다.
하지만 결국 락을 걸고 동시성을 해결한다는 것은, 하나의 요청을 처리하는 동안 모든 요청이 대기를 하기때문에 성능이 눈에띄게 좋아지는 것은 힘들 것 같다는 생각이 들었다.
성능을 개선하기위해 구글링을 하니 ‘분산 락’이라는 것에 대한 언급이 많았다. 분산 락은 무엇일까? 한 번 알아보자.
분산락은 분산 시스템에서 여러 노드나 프로세스가 동시에 공유 자원에 접근할 때 발생하는 충돌을 방지하고, 자원의 일관성을 유지하기 위해 사용되는 기술이다.
분산 락 장점은 나중에..작성하자
분산 락을 구현할 수 있는 방식은 여러가지가 존재한다.
분산 락 구현에는 Redis, MySQL의 네임드 락, 그리고 ZooKeeper 등의 기술이 사용되며, Redis는 주로 SETNX 명령어와 Redlock 알고리즘을 통해, MySQL은 자체적으로 제공하는 네임드 락을 활용해 동시성 문제를 해결한다.
하지만 필자가 진행중인 프로젝트는 단일 서버인데도 Redis 분산 락을 적용하기로했다.
커넥션 풀 / 자원 고갈 방지현재 select … for update문으로 요청이 몰릴 시, 모든 요청이 DB 커넥션을 붙잡고 대기하게 된다. 때문에 커넥션 풀 고갈이 일어나 timeout 시간이 지나면 예외가 발생하게 된다.