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
Was this helpful?