728x90
์ค๋ ๊ณต๋ถํ ๋ด์ฉ
- ์ฝ๋ฉ
- DB ๊ณต๋ถ
- ๋ฐ์ดํฐ ์กฐ์ฌ
- jpa OneToMany ๊ณต๋ถ
๐ญ ๋๋ ์ & ๋ฐฐ์ด ์
์ ธ๋ ๊ธ ๋ณด๋ค ์ฒ์ ์์๋๋ฐ, OneToMany์์ updatable=false, nullable=false ์ฃผ๋ฉด insert ์์ update ์ฟผ๋ฆฌ๊ฐ ๋ฐ์ํ์ง ์๋๋ค๋ ๊ฒ์ ๋ฐฐ์ ๋ค.
์ง์ง ๋๋ฐ์ฐ..
๊ทธ๋ฆฌ๊ณ Lock ๊ด๋ จํด์, ๋๋์จ์๊ฒ ์ง๋ฌธํ๊ณ ๋ต๋ณ๋ฐ์ผ๋ฉฐ ์ข ๋ฐฐ์ ๋ค.
๋ชจ์ ์๋น์ค๋ฅผ ๋ง๋ค ๋, ๋ง๊ฐ๋ ๋ชจ์์๋ ์ ์ฒญํ ์ ์๋ ๊ธฐ๋ฅ์ ๋ง๋ค๊ณ ์ถ์๋ฐ ์ด๊ฒ ๋ชจ์์ ๊ฐ์ ์ ์ฒญํ๋ ์๊ฐ ๋ชจ์์ด ๋ง๊ฐ๋๋ฉด ๋ง๊ฐ๋ ๋ชจ์์ ์ ์ฒญํด๋ฒ๋ฆฌ๋ ์ํฉ์ด ๋ฐ์ํ ์๋ ์์ง์๋..?
์ด๊ฑฐ Lock์ผ๋ก ๋ง๊ณ ์ถ์๋ฐ ์ด๋ค ์์ผ๋ก ํด์ผํ ์ง..?
๋๋: ๋ง๊ฐ ๋ฒํผ์ ๋๋ฅด๋๊ฑฐ์ผ?
์
๋๋: ๋ ์ค๋ฅด๋๊ฑด 2๊ฐ์ง์ธ๋ฐ ๋ชจ์์ ๋ํ ์ ๋ฐ์ดํธ๋ฅผ ํ๊ธฐ ์ ์ ๊ทธ ๋ชจ์ id ์ ๋น๊ด์ ๋ฝ ๊ฑธ๊ณ ์์ํ๋ค๋ฉด ๋ฌด์กฐ๊ฑด ์ฑ๊ณตํ ๊ฑฐ๊ณ , ๋ญ๋ง์?
๊ทธ, ์ ๋ง ๊ทผ๋ฐ ๊ฐ์ ์ ์ฒญ์ insert๊ฐ ๋ ๋ผ๊ฐ๊ฑฐ๋ ?
๋๋: Insert ์์ง. ๊ทธ๋ฅ ์์ํ๊ธฐ ์ ์ ๋ฝ ๊ฑธ๊ณ ์์ํด. ๊ทธ๋ฅ select ํด๋ฒ๋ ค
select * from group where id = 1 for update; ํ๊ณ
๋๋: Insert into apply. ๊ทธ์น
์. apply Insert ํ ๋, select * from group where id = 1 for update;์ด๊ฑธ ํด๋ผ?
๋๋: ์ ๋จผ์ ๋๋ ค๋ฒ๋ ค
๊ทธ๋ฆฌ๊ณ ๋ชจ์ ๋ง๊ฐ์ํฌ๋๋ select * from group where id = 1 for update; ์ด๊ฑฐ ํ๊ณ
๋๋: ์, ์ ๊ฒ ์๊ณ ์ ๋ถ๋ถ์ ๋ ๊ฐ์ ํ๋ค๋ฉด Redis ๋ถ์ฐ๋ฝ ๊ฐ๋ฅํ๋ฐ ๊ทธ๊ฑด ๋์ค์ด๊ณ ๋๊ด์ ๋ฝ์์.
์ ๋ง. ๋ถ์ฐ๋ฝ์ด ์ ํํ ๋ญ์
๋๋:์ฌ๋ฌ ์๋ฒ์์ ๋์ผํ ๋ฌด์ธ๊ฐ์ ์ ๊ธ์ ํ ํ์๊ฐ ์๋ค๋ฉด...
๊ทผ๋ฐ ์๋ฒ ์ฌ๋ฌ๊ฐ์ฌ๋, DB ํ๋์ด๋ค์์ ๋น๊ด์ ๋ฝ๊ฑธ๋ฉด ๊ทธ๊ฒ๋ ๋ถ์ฐ๋ฝ์ธ๊ฑฐ์ผ?
๋๋: ์ ๊ทธ๋ ๊ฒ ๋ณผ ์ ์์ง
์ ๊ณ ๋ง์ !!! ๋๋๋ ์งฑ ์ฒ์ ๋ค
๋๋: ๊ทธ๋ฆฌ๊ณ ๋๋จธ์ง ๋ฐฉ์ 1๊ฐ. One to many ๋ก Cascade all ํธํ๊ฒ ํ๋ค๊ณ ์๊ฐํ ๊ฒ. ๋๊ด์ ๋ฝ Force increment ๋ณด๋ฉด
์ ๊ทธ many ๋ฐ๋๋ฉด ๋ฒ์ ์ฌ๋ผ๊ฐ๋๊น
๋๋: ์์
์์ฐ ๋๋๋ ์ฒ์ฌ๋ค์ง์ง
Force incremen ์ํ๋ฉด ์์ฌ๋ผ๊ฐ๋?
๋๋: ๊ทธ์น
๊ทธ๋ฆฌ๊ณ named lock๋ ๊ฐ๋ฅํ ๊ฑฐ ๊ฐ์๋ฐ ๋ฐฉ๋ฒ ์ค๋ช ์ข. ์๋๋
๋๋: Named lock ์ฐ๋ฉด ๋ชจ์ id๋ฅผ ๊ฑธ๊ณ ์์ํ๋ ๋ถ์ฐ๋ฝํ๊ณ ๋๊ฐ์ด ๊ฐ๋ฅ
๐ฅ ๋ด์ผ ๊ณต๋ถํ ๋ด์ฉ
- ๋ฐฑ์ค
- DB ๊ณต๋ถ
- CI/CD ์ค์
- ํ๋ก์ ํธ ๊ฐ๋ฐ
์ค๋ ๊ณต๋ถํ ๋ด์ฉ ํฌ์คํ
728x90
'๐ณ TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] 2023-07-19 (0) | 2023.07.20 |
---|---|
[TIL] 2023-07-18 (0) | 2023.07.19 |
[TIL] 2023-07-16 (0) | 2023.07.16 |
[TIL] 2023-07-15 (0) | 2023.07.15 |
[TIL] 2023-07-14 (0) | 2023.07.15 |