💣 Problem


부하테스트를 진행하는 도중 es에서 조회수 업데이트 과정에서 버전충돌이 발생했습니다. ES에서는, 누군가가 동시에 같은 문서를 수정할 수 있다는 가능성을 염두에 두고 다음과 같은 메커니즘을 사용합니다.

  1. 클라이언트가 문서를 가져옴
  2. 문서를 수정하려고 할 때 이전 정보와 일치해야만 업데이트 가능
  3. 하지만, 이미 다른 트랜잭션에서 업데이트 해버리고 버전 충돌과 함께 서버 응답 500 발생

다음과 같은 조회수 업데이트 문제는 에러가 발생하지는 않았지만 JPA의 엔티티에서도 발생하고 있었습니다. 또한, 별도의 코드를 작성하지 않아서 조회수 이외에도 검색 데이터에 대한 업데이트가 반영되지 않고 있었습니다.

🪜 Solution


문제를 정리하면 다음과 같습니다.

문제해결을 위한 방식은 다음과 같습니다.