DB ๋ฝ - ๊ฐ๋ ์ดํด
์ธ์ 1์ด ํธ๋์ญ์ ์ ์์ํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ ๋์ ์์ง ์ปค๋ฐ์ ์ํํ์ง ์์๋๋ฐ,
์ธ์ 2์์ ๋์์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ๋๋ฉด ์ฌ๋ฌ๊ฐ์ง ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๋ฐ๋ก ํธ๋์ญ์ ์ ์์์ฑ์ด ๊นจ์ง๋ ๊ฒ์ด๋ค.
์ฌ๊ธฐ์ ๋ํด์ ์ธ์ 1์ด ์ค๊ฐ์ ๋กค๋ฐฑ์ ํ๊ฒ ๋๋ฉด ์ธ์ 2๋ ์๋ชป๋ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
์ด๋ฐ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๋ ค๋ฉด, ์ธ์ ์ด ํธ๋์ญ์ ์ ์์ํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ ๋์์๋
์ปค๋ฐ์ด๋ ๋กค๋ฐฑ ์ ๊น์ง ๋ค๋ฅธ ์ธ์ ์์ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์์ ํ ์ ์๊ฒ ๋ง์์ผ ํ๋ค.
DB ๋ฝ - ๋ณ๊ฒฝ
๋ค์ ์์๋ฅผ ํตํด ๋์์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ ๋ฌธ์ ๋ฅผ ๋ฝ์ผ๋ก ์ด๋ป๊ฒ ํด๊ฒฐํ๋์ง ์์ธํ ์์๋ณด์.
1. ์ธ์ 1์ ํธ๋์ญ์ ์ ์์ํ๋ค.
2. ์ธ์
1์ memberA ์ money ๋ฅผ 500์ผ๋ก ๋ณ๊ฒฝ์ ์๋ํ๋ค.
์ด๋ ํด๋น ๋ก์ฐ์ ๋ฝ์ ๋จผ์ ํ๋ํด์ผ ํ๋ค. ๋ฝ์ด ๋จ์ ์์ผ๋ฏ๋ก ์ธ์ 1์ ๋ฝ์ ํ๋ํ๋ค. (์ธ์ 1์ด ์ธ์ 2๋ณด๋ค ์กฐ๊ธ ๋ ๋นจ๋ฆฌ ์์ฒญํ๋ค.)
3. ์ธ์
1์ ๋ฝ์ ํ๋ํ์ผ๋ฏ๋ก ํด๋น ๋ก์ฐ์ update sql์ ์ํํ๋ค
๋ฝ์ ํ๋ํด์ผ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
4. ์ธ์ 2๋ ํธ๋์ญ์ ์ ์์ํ๋ค.
5. ์ธ์
2๋ memberA ์ money ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ค๊ณ ์๋ํ๋ค.
์ด๋ ํด๋น ๋ก์ฐ์ ๋ฝ์ ๋จผ์ ํ๋ํด์ผ ํ๋ค. ๋ฝ์ด ์์ผ๋ฏ๋ก ๋ฝ์ด ๋์์ฌ ๋ ๊น์ง ๋๊ธฐํ๋ค.
์ฐธ๊ณ ๋ก ์ธ์
2๊ฐ ๋ฝ์ ๋ฌดํ์ ๋๊ธฐํ๋ ๊ฒ์ ์๋๋ค. ๋ฝ ๋๊ธฐ ์๊ฐ์ ๋์ด๊ฐ๋ฉด ๋ฝ ํ์์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
๋ฝ ๋๊ธฐ ์๊ฐ์ ์ค์ ํ ์ ์๋ค.
SET LOCK_TIMEOUT <milliseconds> : ๋ฝ ํ์์์ ์๊ฐ์ ์ค์ ํ๋ค.
์) SET LOCK_TIMEOUT 10000 10์ด, ์ธ์ 2์ ์ค์ ํ๋ฉด ์ธ์ 2๊ฐ 10์ด ๋์ ๋๊ธฐํด๋ ๋ฝ์ ์ป์ง ๋ชปํ๋ฉด ๋ฝ ํ์์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
6. ์ธ์ 1์ ์ปค๋ฐ์ ์ํํ๋ค. ์ปค๋ฐ์ผ๋ก ํธ๋์ญ์ ์ด ์ข ๋ฃ๋์์ผ๋ฏ๋ก ๋ฝ๋ ๋ฐ๋ฉํ๋ค.
7. ๋ฝ์ ํ๋ํ๊ธฐ ์ํด ๋๊ธฐํ๋ ์ธ์ 2๊ฐ ๋ฝ์ ํ๋ํ๋ค.
8. ์ธ์ 2๋ update sql์ ์ํํ๋ค.
9. ์ธ์ 2๋ ์ปค๋ฐ์ ์ํํ๊ณ ํธ๋์ญ์ ์ด ์ข ๋ฃ๋์์ผ๋ฏ๋ก ๋ฝ์ ๋ฐ๋ฉํ๋ค.
DB ๋ฝ - ์กฐํ
๋ณดํต ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋๋ ๋ฝ์ ํ๋ํ์ง ์๊ณ ๋ฐ๋ก ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ์ ์๋ค.
์ผ๋ฐ์ ์ธ ์กฐํ๋ ๋ฝ์ ์ฌ์ฉํ์ง ์๋๋ค
์กฐํ ์์ ์ ๋ฝ์ด ํ์ํ ๊ฒฝ์ฐ?
ํธ๋์ญ์ ์ข ๋ฃ ์์ ๊น์ง ํด๋น ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ๊ณณ์์ ๋ณ๊ฒฝํ์ง ๋ชปํ๋๋ก ๊ฐ์ ๋ก ๋ง์์ผ ํ ๋ ์ฌ์ฉํ๋ค.
์๋ฅผ ๋ค์ด์ ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง์์ memberA ์ ๊ธ์ก์ ์กฐํํ ๋ค์์ ์ด ๊ธ์ก ์ ๋ณด๋ก ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ด๋ค ๊ณ์ฐ์ ์ํํ๋ค.
๊ทธ๋ฐ๋ฐ ์ด ๊ณ์ฐ์ด ๋๊ณผ ๊ด๋ จ๋ ๋งค์ฐ ์ค์ํ ๊ณ์ฐ์ด์ด์ ๊ณ์ฐ์ ์๋ฃํ ๋ ๊น์ง memberA ์ ๊ธ์ก์ ๋ค๋ฅธ๊ณณ์์ ๋ณ๊ฒฝํ๋ฉด ์๋๋ค.
์ด๋ด ๋ ์กฐํ ์์ ์ ๋ฝ์ ํ๋ํ๋ฉด ๋๋ค.
set autocommit false;
select * from member where member_id='memberA' for update;
select for update ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ฉด ๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด ์ธ์
1์ด ์กฐํ ์์ ์ ๋ฝ์ ๊ฐ์ ธ๊ฐ๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ์ธ์
์์ ํด๋น ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
๋ฌผ๋ก ์ด ๊ฒฝ์ฐ๋ ํธ๋์ญ์ ์ ์ปค๋ฐํ๋ฉด ๋ฝ์ ๋ฐ๋ฉํ๋ค.
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-1/dashboard
'Spring > Spring DB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์คํ๋ง DB 1ํธ] - 8. ํธ๋์ญ์ ์ถ์ํ (1) | 2023.03.24 |
---|---|
[์คํ๋ง DB 1ํธ] - 7. ์คํ๋ง๊ณผ ๋ฌธ์ ํด๊ฒฐ - ํธ๋์ญ์ (0) | 2023.03.21 |
[์คํ๋ง DB 1ํธ] - 5. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ๊ตฌ์กฐ์ DB ์ธ์ (0) | 2023.03.15 |
[์คํ๋ง DB 1ํธ] - 4. ํธ๋์ญ์ (0) | 2023.03.15 |
[์คํ๋ง DB 1ํธ] - 3. DataSource ์ดํด (0) | 2023.03.14 |