🐢 λ°μ΄ν„°λ² μ΄μŠ€ κ²©λ¦¬μˆ˜μ€€

μœ μ‚¬κ°œλ°œμžΒ·2024λ…„ 6μ›” 12일
0
post-thumbnail

πŸ“Œκ°œμš”

λ°μ΄ν„°λ² μ΄μŠ€μ˜ νŠΈλžœμž­μ…˜ κ²©λ¦¬μˆ˜μ€€μ΄λž€ λ™μ‹œμ— μ—¬λŸ¬ νŠΈλžœμž­μ…˜μ΄ μˆ˜ν–‰λ  λ•Œ, νŠΈλžœμž­μ…˜ κ°„μ˜ 간섭을 μ–΄λ–»κ²Œ μ œμ–΄ν• μ§€λ₯Ό μ •μ˜ν•˜λŠ” 섀정이닀.

데이터 일관성을 μœ μ§€ν•˜λ©΄μ„œ λ™μ‹œμ— λ‹€μˆ˜μ˜ νŠΈλžœμž­μ…˜μ„ 효율적으둜 μ²˜λ¦¬ν•˜λŠ” 데 μ€‘μš”ν•œ 역할을 ν•œλ‹€.

νŠΈλžœμž­μ…˜ 격리 μˆ˜μ€€μ€ λ„€ 가지 μ£Όμš” μˆ˜μ€€μ΄ μžˆλ‹€.

πŸ“–Serializable

κ°€μž₯ μ—„κ²©ν•œ 격리 μˆ˜μ€€μœΌλ‘œ 이름 κ·ΈλŒ€λ‘œ νŠΈλžœμž­μ…˜μ„ 순차적으둜 μ§„ν–‰μ‹œν‚¨λ‹€.

μ—¬λŸ¬ νŠΈλžœμž­μ…˜μ΄ λ™μΌν•œ λ ˆμ½”λ“œμ— λ™μ‹œ μ ‘κ·Όν•  수 μ—†μœΌλ―€λ‘œ, μ–΄λ– ν•œ 데이터 λΆ€μ •ν•© λ¬Έμ œλ„ λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€.

ν•˜μ§€λ§Œ νŠΈλžœμž­μ…˜μ΄ 순차적으둜 μ²˜λ¦¬λ˜μ–΄μ•Ό ν•˜λ―€λ‘œ λ™μ‹œ 처리 μ„±λŠ₯이 맀우 떨어진닀.

즉, κ°€μž₯ μ•ˆμ „ν•˜μ§€λ§Œ κ°€μž₯ μ„±λŠ₯이 λ–¨μ–΄μ§€λ―€λ‘œ κ·Ήλ‹¨μ μœΌλ‘œ μ•ˆμ „ν•œ μž‘μ—…μ΄ ν•„μš”ν•œ κ²½μš°μ—λ§Œ μ‚¬μš©λœλ‹€.

πŸ“–Repeatable Read

πŸ“–Read Committed

Read CommittedλŠ” μ»€λ°‹λœ λ°μ΄ν„°λ§Œ 쑰회 ν•  수 μžˆλ‹€. Read CommittedλŠ” Repeatable Readμ—μ„œ λ°œμƒν•˜λŠ” Phantom Read에 더해 Non-Repeatable Read(반볡 읽기 λΆˆκ°€λŠ₯) λ¬Έμ œκΉŒμ§€ λ°œμƒν•œλ‹€.

예λ₯Ό λ“€μ–΄ μ‚¬μš©μž Aκ°€ νŠΈλžœμž­μ…˜μ„ μ‹œμž‘ν•˜μ—¬ μ–΄λ–€ 데이터λ₯Ό λ³€κ²½ν•˜μ˜€κ³ , 아직 컀밋은 ν•˜μ§€ μ•Šμ€ μƒνƒœλΌκ³  ν•  λ•Œ, ν…Œμ΄λΈ”μ€ λ¨Όμ € κ°±μ‹ λ˜κ³  언두 둜그둜 λ³€κ²½ μ „μ˜ 데이터가 λ°±μ—…λœλ‹€.

μ΄λ•Œ μ‚¬μš©μž Bκ°€ 데이터λ₯Ό μ‘°νšŒν•˜λ €κ³  ν•˜λ©΄ Read Committedμ—μ„œλŠ” μ»€λ°‹λœ λ°μ΄ν„°λ§Œ μ‘°νšŒν•  수 μžˆμœΌλ―€λ‘œ, Repeatable Read와 λ§ˆμ°¬κ°€μ§€λ‘œ 언두 λ‘œκ·Έμ—μ„œ λ³€κ²½ μ „μ˜ 데이터λ₯Ό μ°Ύμ•„μ„œ λ°˜ν™˜ν•˜κ²Œ λœλ‹€.

μ΅œμ’…μ μœΌλ‘œ μ‚¬μš©μž Aκ°€ νŠΈλžœμž­μ…˜μ„ μ»€λ°‹ν•˜λ©΄ κ·Έλ•ŒλΆ€ν„° λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ—μ„œλ„ μƒˆλ‘­κ²Œ λ³€κ²½λœ 값을 μ°Έμ‘°ν•  수 있게 λœλ‹€.

Read Committedμ—μ„œ 반볡 읽기λ₯Ό μˆ˜ν–‰ν•˜λ©΄ λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ˜ 컀밋 여뢀에 따라 쑰회 κ²°κ³Όκ°€ λ‹¬λΌμ§ˆ 수 μžˆλ‹€. μ΄λŸ¬ν•œ 데이터 λΆ€μ •ν•© 문제λ₯Ό Non-Repeatable Read(반볡 읽기 λΆˆκ°€λŠ₯)라고 ν•œλ‹€.

μΌλ°˜μ μœΌλ‘œλŠ” 크게 λ¬Έμ œκ°€ λ˜μ§€ μ•Šμ§€λ§Œ, 예λ₯Ό λ“€μ–΄ μ–΄λ–€ νŠΈλžœμž­μ…˜μ—μ„œ 였늘 μž…κΈˆλœ 총 합을 κ³„μ‚°ν•˜κ³  μžˆλŠ” 도쀑 λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ—μ„œ κ³„μ†ν•΄μ„œ μž…κΈˆ 내역을 μ»€λ°‹ν•˜λŠ” 상황이라면 Read Committedμ—μ„œλŠ” 같은 νŠΈλžœμž­μ…˜ 일지라도 μ‘°νšŒν•  λ•Œ λ§ˆλ‹€ μž…κΈˆλœ 내역이 λ‹¬λΌμ§€λ―€λ‘œ λ¬Έμ œκ°€ 생길 수 μžˆλ‹€.

πŸ“–Read Uncommitted

Read UncommittedλŠ” μ»€λ°‹ν•˜μ§€ μ•ŠλŠ” 데이터 쑰차도 μ ‘κ·Όν•  수 μžˆλŠ” 격리 μˆ˜μ€€μ΄λ‹€.
즉, λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ˜ μž‘μ—…μ΄ 컀밋 λ˜λŠ” λ‘€λ°±λ˜μ§€ μ•Šμ•„λ„ μ¦‰μ‹œ 보이게 λœλ‹€.

예λ₯Ό λ“€μ–΄ μ‚¬μš©μž A의 νŠΈλžœμž­μ…˜μ—μ„œ INSERTλ₯Ό 톡해 데이터λ₯Ό μΆ”κ°€ν–ˆλ‹€κ³  κ°€μ •ν•˜μž.
아직 컀밋 λ˜λŠ” 둀백이 λ˜μ§€ μ•ŠλŠ” μƒνƒœμž„μ—λ„ λΆˆκ΅¬ν•˜κ³  READ UncommittedλŠ” λ³€κ²½λœ 데이터에 μ ‘κ·Όν•  수 μžˆλ‹€.

이 경우 μ‚¬μš©μž B νŠΈλžœμž­μ…˜μ—μ„œ μ»€λ°‹λ˜μ§€ μ•Šμ€ μ‚¬μš©μž A의 데이터λ₯Ό μ½μ—ˆλ‹€κ°€ μ‚¬μš©μž A νŠΈλžœμž­μ…˜μ—μ„œ κ°‘μžκΈ° ν•΄λ‹Ή 데이터λ₯Ό μ§€μ›Œλ²„λ¦°λ‹€λ©΄ μ‚¬μš©μž B νŠΈλžœμž­μ…˜μ—μ„œλŠ” 데이터λ₯Ό 계속 μ²˜λ¦¬ν•˜κ³  μžˆμ„ν…λ°, λ‹€μ‹œ 데이터λ₯Ό μ‘°νšŒν•˜λ‹ˆ κ²°κ³Όκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” 상황이 생긴닀.

이λ₯Ό Dirty Read라고 ν•˜λ©°, 정합성에 λ¬Έμ œκ°€ λ§Žμ€ 격리 μˆ˜μ€€μ΄λ‹€.

좜처 : https://mangkyu.tistory.com/299

profile
κ°œλ°œμžμ™€ μœ μ‚¬ν•œ κ°œλ°œμžμž…λ‹ˆλ‹€

0개의 λŒ“κΈ€