2021-02-17(Wed)
ํญ๋ชฉ | ๋ด์ฉ |
ํ์ต ๋ ์ง | 2021-02-17(์) |
ํ์ต ์๊ฐ | 11:00~24:00 |
ํ์ต ๋ฒ์ ๋ฐ ์ฃผ์ | ๋น๊ด์ ๋์์ ์ด |
ํ์ต ๋ชฉํ | Dual ๋ชจ๋์์ ์๊ธด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ChatRoom์ ๋ง๋ฌด๋ฆฌํ๋ค. |
๋๋ฃ ํ์ต ๋ฐฉ๋ฒ | eunhkim, jujeong, sanam, yohlee๋๊ณผ ํ์ด ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค. |
์์ธ ํ์ต ๋ด์ฉ
Q) 3๋ช
์ด์์ ์ ์ ๊ฐ ๋์์ '๋ ๋ ๊ฒ์' ๋งค์นญ ์ ์ฒญ์ ํ๋ฉด ์๋ํ ๊ฒ๊ณผ ๋ค๋ฅธ ํํ์ ํ๋ ์ด์ด ์๊ฐ ๋ค์ด๊ฐ ๊ฒ์์ด ์์ฑ๋๋ค.
๋ฃจ๋น๋ก ์์ฑํ ์ฝ๋ ๋ก์ง์๋ ๋ฌธ์ ๊ฐ ์๋ ๊ฒ์ฒ๋ผ ๋ณด์์ผ๋ ์ด์ํ๊ฒ ์ฌ๋ฌ๋ช ์ ์ ์ ๊ฐ ๋์์ ๊ฒ์ ๋งค์นญ ์ ์ฒญ์ ํ๋ฉด ์ด์ํ์์ด ๋ํ๋ฌ๋ค.
๊ฐ๋ น 3๋ช ์ ํ๋ ์ด์ด๊ฐ ๊ฒ์ ์ ์ฒญ์ ํ๋ฉด ์ ์์ ์ธ ๊ฒ์(2๋ช ์ ํ๋ ์ด์ด๋ง ์กด์ฌํ๋ฉฐ ์ผ์ชฝ ์ค๋ฅธ์ชฝ์ผ๋ก ํ๋ ์ด์ด ์์น๊ฐ ๋๋์ด์ง ํํ)์ด 1๊ฒ์ ๋งค์นญ๋๊ณ ๋๋จธ์ง 1๋ช ์ ๋ค๋ฅธ ํ๋ ์ด์ด๊ฐ ๋ ๋ ๋งค์นญ์ ์ ์ฒญํ๊ธฐ๋ฅผ ๊ธฐ๋ค๋ ค์ผํ๋ค. ๊ทธ๋ฌ๋ ์ง๊ธ์ 3๋ช ์ ํ๋ ์ด์ด๊ฐ ๊ฒ์ ์ ์ฒญ์ ํ๋ฉด ๋น์ ์์ ์ธ ๊ฒ์(3๋ช ์ ํ๋ ์ด์ด๊ฐ ์กด์ฌํ๋ฉฐ ์ผ์ชฝ์ ํ๋ช ์ค๋ฅธ์ชฝ์ ๋๋ช ์ ํ๋ ์ด์ด๊ฐ ๋ฐฐ์น๋ ํํ)์ด 1๊ฐ ์์ฑ๋๋ ๊ฒฝ์ฐ๊ฐ ์ข ์ข ๋ฐ์ํ๋ค.
A)
๋ฃจ๋น๋ก ์์ฑํ ์ฒ๋ฆฌํ๋ฆ ์ฝ๋ ์์ฒด์ ๋ ผ๋ฆฌ์ ์ธ ๋ฌธ์ ๋ ์์๋ค. ์์ธ์ ๋ฐ๋ก DB ๋์์ ๊ทผ์ ๋ฐฉ๋น ํ์ง ์์๋ ๊ฒ์ด์๋ค.
๋จ์ transaction ์ฒ๋ฆฌ๋ฅผ ํตํด์๋ DB ๋์ ์ ๊ทผ์ ๋ง์ ์ ์์๋ค. ์ด ๋ ๋ ์ผ์ฆ์์์ ๋๊ด์ ๋์์ฑ ์ ์ด๋ ์๋ฌ๊ฐ ์์์ ํ์ธํ๋ ๋ฐ๊ฐ ์์ผ๋ฏ๋ก ๋ฐ๋ก ๋น๊ด์ ๋์์ ์ด๋ฅผ ๊ณ ๋ คํ๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก with_lock
๋ฉ์๋๋ฅผ ํ์ฉํด์ ํ ๋จ์๋ก ๋ ์ฝ๋ ์ ๊ทผ์ ๋ง๋ ์์ผ๋ก ํด๊ฒฐํ์๋ค.
๋น๊ด์ ๋์์ฑ ์ ์ด์ ํน์ง์ ์๋์ ๊ฐ๋ค.
์ฌ์ฉ์๋ค์ด ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋์์ ์์ ํ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํ๋ค.
ํ ์ฌ์ฉ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ์์ ์ Lock์ ๊ฑธ๊ณ ์กฐํ ๋๋ ๊ฐฑ์ ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋ ๋๊น์ง ์ด๋ฅผ ์ ์งํ๋ค. ๋ง์น ๋ฎคํ ์ค!
Locking์ ์ฒซ ๋ฒ์งธ ์ฌ์ฉ์๊ฐ ํธ๋์ญ์ ์ ์๋ฃํ๊ธฐ ์ ๊น์ง ๋ค๋ฅธ ์ฌ์ฉ์๋ค์ด ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์์ ํ ์ ์๊ฒ ๋ง๋ค๊ธฐ ๋๋ฌธ์ ๋น๊ด์ ๋์์ฑ ์ ์ด๋ฅผ ์๋ชป ์ฌ์ฉํ๋ฉด ๋์์ฑ์ ์ ํด ๋ฐ๊ฒ ๋๋ค.
์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด lock ๋์ด์๋ DB์ ์ ๊ทผํ ๋ ๋ฌดํ์ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ด ์๋๋ผ ์ผ์ ์๊ฐ ๋์๋ง ๊ธฐ๋ค๋ฆฌ๊ณ Exception์ ๋ง๋๋๋ก ๊ตฌํํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ณ ์ด ๊ฒฝ์ฐ ์คํ๋ ค ๋์์ฑ์ ์ฆ๊ฐ์ํฌ ์ ์๋ค๊ณ ํ๋ค.
์ด ๋ with_lock
์ ์ํด Exception์ด ๋์ ธ์ง๊ณ , ๋ค์ ํธ๋์ญ์
์ ์์ํ ๋๊น์ง์ ์๊ฐ์ฐจ๋ฅผ sleep rand/100
๊ฐ์ ๋ฉ์๋๋ฅผ ํ์ฉํด์ ๊ฐ ์์ฒญ๋ง๋ค ๋ค๋ฅด๊ฒ ์กฐ์ ํ๋ฉด ๋์์ฑ์ ์ฆ๊ฐ์ํฌ ์ ์๋ค!
https://medium.com/@vipulbest1/handling-concurrency-through-database-in-rails-part-1-8619ffe75f2d
https://selleo.com/blog/pessimistic-locking-in-rails
https://www.honeybadger.io/blog/how-to-try-again-when-exceptions-happen-in-ruby/
https://kbs4674.tistory.com/164?category=876767
ํ์ต ๋ด์ฉ์ ๋ํ ๊ฐ์ธ์ ์ธ ์ดํ
ํํ ๋์์ฑ ์ ์ด์ ๋ํด์ ๋๋์ฑ ์๊ฒ ๋์ด ์์ฐผ๋ค. ํ์คํ ์ฌ๋ฌ๋ช ์ด ๋จธ๋ฆฌ๋ฅผ ๋ง๋๋ ๋น ๋ฅด๊ฒ ๋ฌธ์ ๊ฐ ํ๋ฆฌ๋๊ตฌ๋ ์ถ๋ค.
๋ค์ ํ์ต ๊ณํ
chat message ํ๋กํ์ ๊ด๋ฆฌํ๋ ๋ฐฉ์ ๊ฐ์
Last updated