Bibi's DevLog ๐ค๐
[Spring] @Transactional, ํธ๋์ญ์ ๋ณธ๋ฌธ
[Spring] @Transactional, ํธ๋์ญ์
๋น๋น bibi 2021. 4. 30. 20:01@Transactional
, ํธ๋์ญ์
@Transactional
public void create(CardDto cardDto) {
Card card = new Card(cardDto);
cardRepository.save(card);
}
@Transactional
, ํธ๋์ญ์
์ฐธ๊ณ
์ฌ๋ฌ ์ฟผ๋ฆฌ๋ฅผ ๋ ผ๋ฆฌ์ ์ผ๋ก ํ๋์ ์์ ์ผ๋ก ๋ฌถ์ด ์ฃผ๋ ๊ฒ.
์์ (1000์ ์ก๊ธํ๊ธฐ)
A ๊ณ์ข์์ -1000์, B๊ณ์ข์์ +1000์์ด ๋์ด์ผ ํ๋ค.
์คํ ์ฟผ๋ฆฌ๋ UPDATE๋ฌธ์ผ๋ก ๊ฐ๊ฐ A๊ณ์ข-1000, B๊ณ์ข +1000์์ด ๋๋ค.
๊ทธ๋ฐ๋ฐ ๋ง์ฝ ๋ ์ฟผ๋ฆฌ๋ฌธ ์ฌ์ด์์ ์๋ฒ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค๋ฉด?
์ถ๊ธ(-1000)์ ๋์๋๋ฐ ์ ๊ธ(+1000)์ ๋์ง ์๋ ํฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ UPDATE ์ฟผ๋ฆฌ๋ฅผ ํ ์์ ์ผ๋ก ๋ฌถ์ด, '๋ชจ๋ ์์ ์ด ์คํ๋๊ฑฐ๋' or '์๋ฌด ์์ ๋ ์คํ๋์ง ์๊ฑฐ๋' ์ ๋ ์ํฉ๋ง ๋ฐ์ํ๋๋ก ํ๋ ๊ฒ์ด ํธ๋์ญ์ ์ด๋ผ๋ ๊ฐ๋ ์ด๋ค.
ํธ๋์ญ์ ์..
- ์ฌ์ฉ์ ๋ฐ ์์คํ ์ ์ค๋ฅ๊ฐ ์๋๋ผ๋, DB์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ๋ณด์ฅํด ์ฃผ๋ ์ญํ ์ ํ๋ค.
''์ปค๋ฐ ํน์ ๋กค๋ฐฑ''
- ๊ฐ๊ฐ '๋ชจ๋ ์์ ์ด ์คํ๋๊ฑฐ๋' or '์๋ฌด ์์ ๋ ์คํ๋์ง ์๊ฑฐ๋' ์ ๋์ํ๋ค.
- ์ปค๋ฐ : ํธ๋์ญ์ ์ผ๋ก ๋ฌถ์ธ ๋ชจ๋ ์ฟผ๋ฆฌ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์คํ๋์ด, ๊ทธ ๊ฒฐ๊ณผ๊ฐ DB์ ๋ฐ์๋๋ ๊ฒ
- ๋กค๋ฐฑ : ํธ๋์ญ์ ์ ๋ชจ๋ ์ฟผ๋ฆฌ ์คํ ๊ฒฐ๊ณผ๋ฅผ ์ทจ์ํ๊ณ , DB๋ฅผ ํธ๋์ญ์ ์ด์ ์ํ๋ก ๋๋๋ฆฌ๋ ๊ฒ
ํธ๋์ญ์ ์ ์ฑ์ง, ACID
- ํธ๋์ญ์ ์ด ์์ ํ๊ฒ ์ํ๋๋ค๋ ๊ฒ์ ๋ณด์ฅํ๊ธฐ ์ํ ์ฑ์ง
- A - Atomicity(์์์ฑ)
- ํธ๋์ญ์ ์ DB์ ๋ชจ๋ ๋ฐ์๋๊ฑฐ๋ ์ ํ ๋ฐ์๋์ง ์์์ผ ํ๋ค. (ํธ๋์ญ์ ์ ์ค๊ฐ ์ํ๋ฅผ DB์ ๋ฐ์ํด์๋ ์ ๋๋ค)
- C - Consistency(์ผ๊ด์ฑ)
- ํธ๋์ญ์ ์์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ ํญ์ ์ผ๊ด์ฑ ์์ด์ผ ํ๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํญ์ ์ผ๊ด๋ ์ํ๋ก ์ ์ง๋์ด์ผ ํ๋ค.
- ํธ๋์ญ์ ์ ์คํ ๊ฒฐ๊ณผ๊ฐ DB์ ์กฐ๊ฑด์ ์๋ฐฐํ๋ค๋ฉด ํด๋น ํธ๋์ญ์ ์ ์ข ๋ฃ๋์ด์ผ ํ๋ค.
- I - Isolation(๋
๋ฆฝ์ฑ)
- ํธ๋์ญ์ ๊ฐ์๋ ๋ ๋ฆฝ์ฑ์ด ๋ณด์ฅ๋์ด์ผ ํ๋ค.
- ๋์ ์คํ ๋๋ ํธ๋์ญ์ ๋ค์์, ์ด๋ค ํธ๋์ญ์ ๋ ๋ค๋ฅธ ํธ๋์ญ์ ์ ์ฐ์ฐ์ ๋ผ์ด๋ค ์ ์๋ค
- D - Durrability(์ง์์ฑ)
- ํธ๋์ญ์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋์์ผ๋ฉด ๊ฒฐ๊ณผ๋ ์๊ตฌํ ๋ฐ์๋์ด์ผ ํ๋ค.
'๐ฅ BE ๋ฐฑ์๋ > Spring ์คํ๋ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java Spring] DB์ ๋ ์ง ์ ์ฅํ๊ธฐ, JSON์ผ๋ก ๋ ์ง ๋ฐ๊ธฐ (0) | 2021.05.28 |
---|---|
[Spring] Spring JdbcTemplate ๊ฐ์ด๋ (๊ณต์๋ฌธ์, Baeldung) (0) | 2021.05.23 |
[Spring] @Query (0) | 2021.04.30 |
[Spring] ResponseEntity, @RestController, @RequestBody, @ResponseBody (0) | 2021.04.30 |
Path Variable๊ณผ Query Parameter (์คํ๋ง์ @RequestParam๊ณผ @PathVariable) (0) | 2021.04.30 |