20210217(수)

2021-02-17

1. 학습 날짜

  • 2021-02-17

2. 학습 시간

  • 12:00 ~ 23:00

3. 학습 범위 및 주제

  • 백본 view, model, collection

  • 루비온레일즈

4. 학습 목표

  • 레일즈 DB 학습

5. 학습 정리

  • x

6. 상세 학습 내용

  • 레일즈의 DB관련해서 문제가 생겼다.

  • 동시 다발적으로 여러 유저가 게임시작을 하면, 하나의 게임에 여러 유저가 들어오는 문제가 발생했다.

  • 이 문제는 DB에 lock이 걸려있지 않아서 생기는 문제였다.

  • 따라서 트랜잭션을 이용해서 DB을 보호하려고 시도했다.

  • 하지만 트랜잭션은 여러 쿼리를 모았다가 한번에 처리하는 기능이지 막는 기능은 아니다.

  • 따라서 트랜잭션으로 여러 쿼리를 모았다가, 한번에 처리하면서 특정 모델에는 lock 을 걸어서 동시 접근을 막으면 된다.

  • 트랜잭션을 사용하는 방법은 아래와같다.

    Game.transaction do
    ...
    end
  • 중복으로 트랜잭션을 사용하려면 아래처럼 하자

    Game.transaction do
    Rule.transaction do
    ...
    end
    ...
    end
  • 위처럼 동작 하긴 하지만 안좋은 방법 아래가 좋은 방법

ActionRecord::Base.transaction do
...
end
  • 이제 여기서 락을 걸려면 아래처럼 하자

ActionRecord::Base.transaction do
  @matches.with_lock do
  ...
  end

end

7. 오늘 학습 내용에 대한 개인적인 총평

  • 빨리 끝내고 싶다

8. 다음 학습 계획

  • guild index 뷰 만들기

Last updated