Transaction์ด๋
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํ๋์ ๋ ผ๋ฆฌ์ ๊ธฐ๋ฅ์ ์ํํ๊ธฐ ์ํ ์์ ์ ๋จ์ ์ฆ, ์ฌ๋ฌ ๊ฐ์ ์ฟผ๋ฆฌ๋ค์ ํ๋๋ก ๋ฌถ๋ ๋จ์๋ฅผ ๋งํฉ๋๋ค ๐โ๏ธ
๋ ผ๋ฆฌ์ ์ธ ์ด์ ๋ก ์ฌ๋ฌ SQL๋ฌธ๋ค์ ๋จ์ผ ์์ ์ผ๋ก ๋ฌถ์ด์ ๋๋ ์ง ์ ์๊ฒ ๋ง๋ ๊ฒ์ ๋๋ค.
- database ์ฟผ๋ฆฌ๋ฌธ ๋ ๊ฐ๊ฐ ์ ์ ์ฒ๋ฆฌ๋์ด์ผ๋ง ์ฑ๊ณตํ๋ ๋จ์ผ ์์
- transaction์ SQL๋ฌธ๋ค ์ค์ ์ผ๋ถ๋ง ์ฑ๊ณตํด์ DB์ ๋ฐ์๋๋ ์ผ์ ์ผ์ด๋์ง ์์ต๋๋ค.
์ผ๋ฐ์ ์ธ transaction ์ฌ์ฉ ํจํด
- transaction์ ์์(begin)
- ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฑฐ๋ ์ฐ๋ ๋ฑ์ SQL๋ฌธ๋ค์ ํฌํจํด์ ๋ก์ง์ ์ํ
- ์ผ๋ จ์ ๊ณผ์ ๋ค์ ๋ฌธ์ ์์ด ๋์ํ๋ค๋ฉด transaction์ commit
- ์ค๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค๋ฉด transaction์ rollback
์ปค๋ฐ(commit)
์ฌ๋ฌ ์ฟผ๋ฆฌ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌ๋์๋ค๊ณ ํ์ ํ๋ ๋ช ๋ น์ด
- ํธ๋์ญ์ ๋จ์๋ก ์ํ
- ๋ณ๊ฒฝ๋ ๋ด์ฉ์ด ๋ชจ๋ ์๊ตฌ์ ์ผ๋ก ์ ์ฅ๋ฉ๋๋ค.
- "์ปค๋ฐ์ด ์ํ๋์๋ค." == "ํ๋์ ํธ๋์ญ์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์ํ๋์๋ค."
- update, insert, delete์ ์ฟผ๋ฆฌ๊ฐ ํ๋์ ํธ๋์ญ์ ๋จ์๋ก ์ํ๋๊ณ , ์ดํ์ DB์ ์๊ตฌ ์ ์ฅ๋ฉ๋๋ค.
๋กค๋ฐฑ(rollback)
ํธ๋์ญ์ ์ผ๋ก ์ฒ๋ฆฌํ ํ๋์ ๋ฌถ์ ๊ณผ์ ์ ์ผ์ด๋๊ธฐ ์ ์ผ๋ก ๋๋ฆฌ๋ ์ผ
- ์ง๊ธ๊น์ง ์์ ๋ค์ ๋ชจ๋ ์ทจ์ํ๊ณ transaction ์ด์ ์ํ๋ก ๋๋๋ฆฝ๋๋ค. ์ฆ ์ทจ์!
- ์๋ฌ๋ ์ฌ๋ฌ ์ด์ ๋๋ฌธ์ ํธ๋์ญ์ ์ ์ผ๋ก ๋๋ ค์ผ ํ ๋ ์ฌ์ฉ
๐ก ์ปค๋ฐ๊ณผ ๋กค๋ฐฑ ๋์ ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ด ๋ณด์ฅ๋ฉ๋๋ค. ๋ํ ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์ ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ฝ๊ฒ ํ์ธํ ์ ์๊ณ ํด๋น ์์ ์ ๊ทธ๋ฃนํํ ์ ์์ต๋๋ค.
ํธ๋์ญ์ ์ ํ
ํธ๋์ญ์ ๋จ์๋ก ์ฌ๋ฌ ๋ก์ง๋ค์ ๋ฌถ์ ๋ ์ธ๋ถ API๋ฅผ ํธ์ถํ๋ ๊ฒ์ด ์์ผ๋ฉด ์ ๋ฉ๋๋ค. ๋ง์ฝ ์๋ค๋ฉด ๋กค๋ฐฑ์ด ์ผ์ด๋ฌ์ ๋ ์ด๋ป๊ฒ ํด์ผ ํ ๊ฒ์ธ์ง์ ๋ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ด์ผ ํ๊ณ ํธ๋์ญ์ ์ ํ๋ฅผ ์ ๊ฒฝ ์จ์ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค.
ํธ๋์ญ์ ์ ์ํํ ๋ ์ปค๋ฅ์ ๋จ์๋ก ์ํํ๊ธฐ ๋๋ฌธ์ ์ปค๋ฅ์ ๊ฐ์ฒด๋ฅผ ๋๊ฒจ์ ์ํํด์ผ ํฉ๋๋ค. ํ์ง๋ง ์ด๋ฅผ ๋งค๋ฒ ๋๊ฒจ์ฃผ๊ธฐ๊ฐ ์ด๋ ต๊ณ ๋ฒ๊ฑฐ๋กญ์ต๋๋ค. ์ด๋ฅผ ๋๊ฒจ์ ์ํํ์ง ์๊ณ ์ฌ๋ฌ ํธ๋์ญ์ ๊ด๋ จ ๋ฉ์๋์ ํธ์ถ์ ํ๋์ ํธ๋์ญ์ ์ ๋ฌถ์ด๋๋ก ํ๋ ๊ฒ
@Service
@Transactional(readOnly = true)
public class MemberService {
private final MemberRepository memberRepository;
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
}
- @Transactional ์ ๋ํ ์ด์ ์ ํตํด ์ฌ๋ฌ ์ฟผ๋ฆฌ ๊ด๋ จ๋ค์ ํ๋์ ํธ๋์ญ์ ์ผ๋ก ์ฒ๋ฆฌ
- commit(), rollback() ๋ฑ์ ์ฐ์ง ์๊ณ ์ฒ๋ฆฌํ๋ ๋ก์ง๋ง ์์ฑ
ACID
ํธ๋์ญ์ ์ด ์ด๋ ํ ๊ธฐ๋ฅ์ ์ง๋ ์ผํ๋์ง ๋ํ๋ด๋ ํน์ฑ์ผ๋ก ์์์ฑ, ์ผ๊ด์ฑ, ๋ ๋ฆฝ์ฑ, ์ง์์ฑ์ด ์์ต๋๋ค.
1. ์์์ฑ(atomicity)
"all or nothing" ํธ๋์ญ์ ๊ณผ ๊ด๋ จ๋ ์ผ์ด ๋ชจ๋ ์ํ๋์๊ฑฐ๋ ์์ ๋์ง ์์๊ฑฐ๋๋ฅผ ๋ณด์ฅํ๋ ํน์ง
์๋ฅผ ๋ค์ด ํธ๋์ญ์ ์ ์ปค๋ฐํ๋๋ฐ, ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ฌ ๋กค๋ฐฑํ๋ ๊ฒฝ์ฐ ๊ทธ ์ดํ์ ๋ชจ๋ ์ํ๋์ง ์์์ ๋ณด์ฅํ๋ ๊ฒ
- ํธ๋์ญ์ ์ ๋ ผ๋ฆฌ์ ์ผ๋ก ์ชผ๊ฐ์ง ์ ์๋ ์์ ๋จ์์ด๊ธฐ ๋๋ฌธ์ ๋ด๋ถ์ SQL๋ฌธ๋ค์ด ๋ชจ๋ ์ฑ๊ณตํด์ผ ํฉ๋๋ค.
- ์ค๊ฐ์ SQL๋ฌธ์ด ์คํจํ๋ฉด ์ง๊ธ๊น์ง์ ์์ ์ ๋ชจ๋ ์ทจ์ํ์ฌ ์๋ฌด ์ผ๋ ์์๋ ๊ฒ์ฒ๋ผ rollback ํฉ๋๋ค.
- ๊ฐ๋ฐ์๋ ์ธ์ commitํ๊ฑฐ๋ rollbackํ ์ง๋ฅผ ์ฑ๊ฒจ์ผ ํฉ๋๋ค.
2. ์ผ๊ด์ฑ(consistency)
'ํ์ฉ๋ ๋ฐฉ์'์ผ๋ก๋ง ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ ๊ฒ
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ธฐ๋ก๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ ์ฌ๋ฌ ๊ฐ์ง ์กฐ๊ฑด, ๊ท์น์ ๋ฐ๋ผ ์ ํจํจ์ ๊ฐ์ ธ์ผ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด A๋ 1000๋ง ์์ด ์๊ณ B๋ 0์์ด ์๋ค๊ณ ํ ๋, B๊ฐ A์๊ฒ 500๋ง์์ ์ ๊ธํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ์ฃ . 0์์ผ๋ก๋ถํฐ 500๋ง์์ด ๋์ค๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
- ํธ๋์ญ์ ์ DB ์ํ๋ฅผ consistent ์ํ์์ ๋ ๋ค๋ฅธ consistent ์ํ๋ก ๋ฐ๊ฟ์ค์ผ ํฉ๋๋ค.
- constraint, trigger ๋ฑ์ ํตํด DB์ ์ ์๋ ๋ฃฐ์ ํธ๋์ญ์ ์ด ์๋ฐํ๋ค๋ฉด rollback ํด์ผ ํฉ๋๋ค.
- ํธ๋์ญ์ ์ด DB์ ์ ์๋ ๋ฃฐ์ ์๋ฐํ๋์ง๋ DBMS๊ฐ ์ปค๋ฐ ์ ์ ํ์ธํ๊ณ ์๋ ค์ค๋๋ค.
- ๊ฐ๋ฐ์๋ ํธ๋์ญ์ ์ด consistentํ๊ฒ ๋์ํ๋์ง๋ฅผ ์ฑ๊ฒจ์ผ ํฉ๋๋ค.
3. ๊ฒฉ๋ฆฌ์ฑ(isolation)
ํธ๋์ญ์ ์ํ ์ ์๋ก ๋ผ์ด๋ค์ง ๋ชปํ๋ ๊ฒ
- ์ฌ๋ฌ ํธ๋์ญ์ ๋ค์ด ๋์์ ์คํ๋์ด๋ ๋ง์น ๊ฐ๊ฐ์ด ๊ฒฉ๋ฆฌ๋์ด ์คํ๋๋ ๊ฒ์ฒ๋ผ ๋ค๋ฅธ ํธ๋์ญ์ ๋ค๋ก๋ถํฐ ์ํฅ์ ๋ฐ์ง ์๊ณ ํผ์ ๋์ํ๋ ๊ฒ
- ๋ณต์์ ๋ณ๋ ฌ ํธ๋์ญ์ ์ ์๋ก ๊ฒฉ๋ฆฌ๋์ด ๋ง์น ์์ฐจ์ ์ผ๋ก ์คํ๋๋ ๊ฒ์ฒ๋ผ ์๋๋์ด์ผ ํฉ๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๊ฐ์ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์์ด์ผ ํ๋ค. ์์ฐจ์ ์ผ๋ก ํ๋ฉด ์ฝ๊ฒ ๋๊ฒ ์ง๋ง ์ฑ๋ฅ์ด ๋๋น ์ง๋๋ค.
4. ์ง์์ฑ(durabilitiy)
์ฑ๊ณต์ ์ผ๋ก ์ํ๋ ํธ๋์ญ์ ์ ์์ํ ๋ฐ์๋์ด์ผ ํ๋ ๊ฒ์ ์๋ฏธ ์ปค๋ฐ๋ ํธ๋์ญ์ ์ DB์ ์๊ตฌ์ ์ผ๋ก ์ ์ฅ๋์ด์ผ ํฉ๋๋ค.
- DB ์์คํ ์ ๋ฌธ์ ๊ฐ ์๊ฒจ๋ ์ปค๋ฐ๋ ํธ๋์ญ์ ์ DB์ ๋จ์ ์์ต๋๋ค.
- ‘์๊ตฌ์ ์ผ๋ก ์ ์ฅํ๋ค’๋ ์ผ๋ฐ์ ์ผ๋ก ‘๋นํ๋ฐ์ฑ ๋ฉ๋ชจ๋ฆฌ(ํ๋๋์คํฌ, SSD, …)์ ์ ์ฅํจ’์ ์๋ฏธํฉ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์คํ ์ฅ์ ๊ฐ ๋ฐ์ํด๋ ์๋ ์ํ๋ก ๋ณต๊ตฌํ๋ ํ๋ณต ๊ธฐ๋ฅ์ด ์์ด์ผ ํฉ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ด๋ฅผ ์ํด ์ฒดํฌ์ฌ, ์ ๋๋ง, ๋กค๋ฐฑ ๋ฑ์ ๊ธฐ๋ฅ ์ ๊ณตํฉ๋๋ค.
- ์ฒดํฌ์ฌ : ์ค๋ณต ๊ฒ์ฌ์ ํ ํํ๋ก, ์ค๋ฅ ์ ์ ์ ํตํด ์ก์ ๋ ์๋ฃ์ ๋ฌด๊ฒฐ์ฑ์ ๋ณดํธํ๋ ๋จ์ํ ๋ฐฉ๋ฒ
- ์ ๋๋ง : ํ์ผ ์์คํ ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์(commit)ํ๊ธฐ ์ ์ ๋ก๊น ํ๋ ๊ฒ, ํธ๋์ญ์ ๋ฑ ๋ณ๊ฒฝ ์ฌํญ์ ๋ํ ๋ก๊ทธ๋ฅผ ๋จ๊ธฐ๋ ๊ฒ
'๐ช CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
CPU Scheduling์ด ๋ญ๊ฐ์? (0) | 2023.04.20 |
---|---|
CPU์ ๋ฉ๋ชจ๋ฆฌ (0) | 2023.03.30 |
HTTP๊ฐ ๋ญ๊ฐ์? - ์น์ ์๋ต ๊ณผ์ (0) | 2023.03.17 |
๋ด๊ฐ ๋ง๋ ์ฟ ํค ๋๋ฅผ ์ํด ๊ตฌ์ ์ง (0) | 2023.03.16 |
ํธ๋์ญ์ ๊ณผ ๋ฌด๊ฒฐ์ฑ (1) | 2023.03.14 |