같은 옵션에 경쟁을 붙이면 어떻게 될까?

정리하며

커스텀 플러그인을 많이 제작하면서 옵션 테이블을 많이 쓰게 됩니다. 보통은 플러그인 설정을 기록하는데 많이 쓰고, 보통의 테이터 관리는 주로 메타 테이블을 활용하는 편입니다. 그러나 이따금씩 이도저도 아닌 때가 있습니다. 그럴 때는 옵션 테이블을 쓰곤 합니다.

그런데 이 옵션 테이블에 업데이트가 빈번하게 일어날 때 업데이트된 데이터가 올바르지 않는 경우가 자주 일어나는 것을 실제로 목격하게 되었습니다. 그래서 실험을 해 보게 된 거죠.

원인은 race condition이고 여기에 워드프레스의 캐싱이 더해져 문제가 더 커지는 것으로 결론은 내렸습니다. 그리고 PHP의 세마포어나 MySQL의 락을 이용해서 해결을 해 봤습니다.

나중에 비슷한 문제를 포착했을 때 쉽게 해결하기 위해 미리 알아본 결과를 포스팅하였습니다. 이 문제는 주로 옵션 테이블에서 잘 일어나지만, 옵션 테이블과 메타 테이블은 유사하고 메타 테이블도 캐싱이 일어나므로 유사한 문제가 발생할 것 같습니다. 그에 관헤서는 나중에 포스팅해보도록 하겠습니다.

댓글 남기기