• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

안녕하세요 분산환경 질문이있습니다

24.01.16 12:47 작성 24.01.16 13:26 수정 조회수 171

0

스프링서버 3대가 scale-out 되어있는 상황이고 DB는 하나를 쓰고있습니다.
3대의 스프링서버에서 5분에 한번 실행되는 스케줄링 서비스로, DB에서 좋아요 많은순으로 5개씩 가져옵니다
이때 3대의 서버가 동일한 게시글을 가져와야해서, 락의 필요성을 느꼈는데 저는 redis 분산락 말고는 해결방법이 잘 떠오르질 않더라구요.

서버1 select -> 그 사이에 좋아요 update -> 서버2 select -> 서버3 select
위같은 상황이 발생해 서버 1과 2,3이 다른 결과를 select 할수도 있을것 같은데 비관,낙관적 락과 네임드락으로 해결할수 없다고 판단했는데 생각이 맞을까요?

답변 1

답변을 작성해보세요.

1

scan 님 안녕하세요.
말씀하신 상황에 대해 정확하게 인지를 하지는 못하였으나 강의에서 나온 락으로는 해결할 수 없을 것 같습니다.
테이블 단위의 락을 획득함으로써 해결할수는 있겠으나 이는 권장되지 않는 방법입니다.

다른 방법으로 해결을 해보시는 것이 좋을 것 같습니다.

예를들어 배치프로그램을 사용하여 주기적으로 select 하여 5개의 게시물의 id 를 데이터베이스 (또는 레디스) 에 일시적으로 저장을 한 후 스케줄링 서비스에서는 저장된 5개의 게시물의 id 를 사용한다.

정확한 상황은 잘 모르겠으나 위와 같은 방법으로 해결할 수 있지않을까 생각해봅니다.