동시성 문제를 락으로 해결한 경험과 그 한계를 이야기한다
비동기 환경에서 동시성 문제를 처음 경험한 건 토이 프로젝트에서였습니다. 공유 자원을 여러 비동기 작업이 동시에 읽고 쓰는 구조였는데, 데이터가 간헐적으로 이상한 값이 되는 현상이 생겼습니다. 처음엔 원인을 찾는 데 이틀이 걸렸습니다. 로그를 봐도 특정 조건에서만 재현됐고, 비결정론적 동작이라 반복 재현도 어려웠습니다. 결국 뮤텍스를 사용해서 공유 자원 접근을 직렬화하는 방식으로 해결했습니다. 하지만 그 과정에서 락을 잘못 걸면 데드락이 생긴다는 걸 직접 경험했습니다. 두 작업이 서로의 락을 기다리면서 멈춰버린 상황이었는데, 타임아웃을 추가해서 임시 해결했습니다. 아직 실무 수준의 최적화는 모르지만, 동시성 문제는 재현이 어려우니 설계 단계에서 접근 패턴을 먼저 정하는 것이 중요하다는 걸 배웠습니다.