분산 환경에서 잠금 충돌과 타임아웃 처리 경험 서술
분산 시스템에서 잠금 문제를 접하면서 가장 먼저 이해한 것은 락을 무기한 들고 있으면 다른 노드 전체가 멈출 수 있다는 점이었습니다. 타임아웃을 제대로 설계하지 않으면 데드락보다 훨씬 조용한 장애가 발생할 수 있습니다.
팀 프로젝트에서 두 개 서비스가 공유 자원에 순서대로 접근해야 하는 구조를 구현했는데, 한 서비스가 락을 획득한 채로 응답이 느려지자 다른 서비스가 계속 대기하는 상황이 발생했습니다. 락 획득 후 일정 시간이 지나면 자동으로 해제되는 TTL 방식을 적용하고 나서야 대기가 해소되었습니다. 실패는 TTL을 너무 짧게 설정하여 정상 처리 중에도 락이 풀리는 경우가 발생한 것이었는데, 실제 처리 시간 분포를 측정하고 여유 있게 설정하였습니다.
잠금 설계는 획득보다 해제 조건이 더 중요합니다. 언제 어떻게 락이 풀릴지를 먼저 설계해야 장애를 막을 수 있습니다.