์ต๊ทผ ํ๋ก์ ํธ์์ ๋ถ๋ฆฌ๋์ด ์๋ ์ฌ๋ฌ DB์ ๋ํด 2 Phase Commit์ ์ ์ฉํด์ผ ํ๋ ์ผ์ด ์๊ฒจ ์ ๋ฆฌํ๊ฒ ๋์๋ค.
์ค๋ช ์ ์์ํ๊ธฐ์ ์์, ๊ฐ๋จํ๊ฒ ๋ถ์ฐ ํธ๋์ญ์ ์ ๋ํด ์๊ธฐํ๊ณ ๋์ด๊ฐ๊ฒ ๋ค.
๋ถ์ฐ ํธ๋์ญ์ ์ ๊ธ๋ก๋ฒ ํธ๋์ญ์ ์ด๋ผ๊ณ ๋ ํ๋ฉฐ, ํตํฉ๋์ด ๊ด๋ฆฌ๋๋ ์ฌ๋ฌ ๊ฐ์ ํธ๋์ญ์ ๋ฌถ์์ ์๋ฏธํ๋ค.
์ด๋, 1๏ธโฃ ๋ถ์ฐ ํธ๋์ญ์ ์ ํฌํจ๋๋ ํธ๋์ญ์ ์ ์๋ก ๋์ผํ DB์ ์กด์ฌํ ์๋ ์๊ณ , 2๏ธโฃ ์๋ก ๋ค๋ฅธ DB์ ์กด์ฌํ ์๋ ์๋ค.
XA Datasource์ 2 Phase Commit ์ด๋?
XA๋ 2 Phase Commit์ ํตํ ๋ถ์ฐ ํธ๋์ญ์ ์ฒ๋ฆฌ๋ฅผ ์ํด X/Open์์ ์ ์ํ ํ์ค์ด๋ค.
๋ถ์ฐ ํธ๋์ญ์ ์์ ์ฌ์ฉ๋๋ ๊ฐ๊ฐ์ DB์๋ ํ๋์ XA Datasource๊ฐ ์กด์ฌํ๊ณ , ์ด XA Datasource๊ฐ XA Connection์ ์์ฑํ๋ค.
๋ํ, ๋ถ์ฐ ํธ๋์ญ์ ์ ๊ฐ๋ณ ํธ๋์ญ์ ์ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ธ๋ถ์ Transaction Manager๊ฐ ํ์ํ๋ค. Java ์ง์์์๋ ์ฌ๋ฌ ๋ฒค๋์ฌ์์ Java Transaction API ํ์ค์ ๊ตฌํํ Object๋ฅผ XA ํธํ JTA ๋ชจ๋๋ก ์ ๊ณตํ๋ค.
๋์ ๊ฒฝ์ฐ์๋ ๋ฐฑ์คํผ์ค ์๋น์ค์์ ๋ถ์ฐ๋ ์ฌ๋ฌ Oracle DB ํ๊ฒฝ์ 2 Phase Commit์ ์งํํด์ผ ํ๋ ๊ฒฝ์ฐ์ด๊ธฐ์ XA Datasource๋ฅผ ์ฌ์ฉํ๊ฒ ๋์๋ค.
๋ค์์ผ๋ก, 2 Phase Commit์ด๋ ๋ฌด์์ผ๊น? ๋ง ๊ทธ๋๋ก 2 ๋จ๊ณ์ ๊ฑธ์น ์ปค๋ฐ์ด๋ผ๋ ์๋ฏธ์ด๋ค.
2PC๋ ์ฑ๊ธ ๋ ธ๋์ธ ๊ฒฝ์ฐ์๋ ์ฌ์ฉํ์ง ์๋, Coordinator(ํธ๋์ญ์ ๋งค๋์ )๋ฅผ ์ฌ์ฉํ์ฌ ๋ถ์ฐ๋ ์ฌ๋ฌ ๊ฐ์ ํธ๋์ญ์ ์ ๊ด๋ฆฌํ๋ค.
๋จผ์ , ๊ทธ๋ฆผ์ ํตํด ๊ฐ๋จํ๊ฒ 2PC ์์๋ฅผ ์ค๋ช ํ๊ฒ ๋ค.
- ๊ฐ ํธ๋์ญ์ ์ DB ๋ ธ๋์ ๋ฐ์ดํฐ๋ฅผ Write ํ๊ณ ์ฑ๊ณต ๊ฒฐ๊ณผ๋ฅผ ์๋ต๋ฐ๋๋ค.
- (Phase1) 1๋ฒ ๊ณผ์ ์์ ๋ชจ๋ ํธ๋์ญ์ ์ด OK ์๋ต์ ๋ฐ๊ฒ ๋๋ฉด, ๊ฐ ํธ๋์ญ์ ์ DB ๋ ธ๋์ Prepare ์์ฒญ์ ๋ณด๋ด์ด Commit์ด ๊ฐ๋ฅํ์ง ํ์ธํ๋ค. ๋ง์ฝ NO ์๋ต์ ๋ฐ๊ฒ ๋๋ฉด, ๋ชจ๋ ๋กค๋ฐฑ ์ฒ๋ฆฌํ๊ฒ ๋๋ค.
- (Phase2) 2๋ฒ ๊ณผ์ ์์ ๋ชจ๋ ํธ๋์ญ์ ์ด Commit์ด ๊ฐ๋ฅํ๋ค๋ YES ์๋ต์ ๋ฐ๊ฒ ๋๋ฉด, ํธ๋์ญ์ ๋งค๋์ ๋ ๊ฐ DB ๋ ธ๋์ Commit ์์ฒญ์ ๋ณด๋ด๊ณ ์ํ๋๋ค.
์ด๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ ๊ธฐ์ ์ค ํ๋๋ ๊ธ๋ก๋ฒํ๊ฒ Uniqueํ ํธ๋์ญ์
ID์ด๋ค.
Coordinator๊ฐ Prepare ์์ฒญ ๋จ๊ณ์์ ๋ชจ๋ ํธ๋์ญ์
์ฐธ์ฌ์์๊ฒ ๊ธ๋ก๋ฒ ํธ๋์ญ์
ID๋ฅผ ํจ๊ป ๋ณด๋ด๊ณ , ์ด๋ฌํ ์์ฒญ ์ค ํ๋๋ผ๋ ์คํจํ๊ฒ ๋๋ฉด Coordinator๋ ๋ชจ๋ ํธ๋์ญ์
์ฐธ์ฌ์๋ค์๊ฒ ํด๋น ํธ๋์ญ์
ID์ ํธ๋์ญ์
์ ๋ํด Abort ์์ฒญ์ ๋ณด๋ด๊ฒ ๋๋ค.
์ด๋ฌํ ๊ธฐ์ ์ด ์์ธํ๊ฒ๋ ์ ์ฉ๋๊ณ ์๋ค๋ ์ ์ ์ธ๊ธํ๊ณ ์ถ์๋ค.
์ค์ ๋ถ๋ถ์ ์ ๋ฆฌํ์๋ฉด, ์ฑ๊ธ ๋
ธ๋์ธ ๊ฒฝ์ฐ์๋ DB๊ฐ Atomicity ํ ํธ๋์ญ์
์ ํตํด ์์
์ ์ฑ๊ณต๊ณผ ์คํจ๋ฅผ ๋ณด์ฅํ ์ ์๋ค. ํ์ง๋ง, ๋ถ์ฐ๋ ๋ฉํฐ ๋
ธ๋์ธ ๊ฒฝ์ฐ๋ ๋ค๋ฅด๋ค.
๋ฉํฐ๋ ธ๋์ผ ๋, 2PC์์ ์ค์ํ ๊ฐ๋ ์ "๋ชจ๋ ํธ๋์ญ์ ์์ ์ด ์ฑ๊ณตํ์ ๋ ์ ์ฒด TR์ด Commit๋์ด์ผ ํ๋ฉฐ, ํ๋๋ผ๋ Rollback์ด ๋๋ค๋ฉด ๋ชจ๋ TR์ด ํจ๊ป Rollback ๋์ด์ผ ํ๋ค"๋ ๊ฒ์ด๋ค.
2PC์ ์ทจ์ฝ์
์์์ ์ค๋ช ํ Coordinator ์ฆ, ํธ๋์ญ์ ๋งค๋์ ๊ฐ ๋ค์ด๋๋ ๊ฒฝ์ฐ 2PC์ ์ทจ์ฝ์ ์ด ๋๋ฌ๋๊ฒ ๋๋ค.
๋ง์ฝ, Prepare ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ ์ด๋ผ๋ฉด ํธ๋์ญ์ ์ฐธ์ฌ์๋ค์ ์์ ํ๊ฒ Abort๊ฐ ๊ฐ๋ฅํ๋ค.
ํ์ง๋ง, Prepare ์์ฒญ์ ๋ณด๋ด๊ณ YES๋ฅผ ๋ฐ๊ณ ๋ ํ๋ผ๋ฉด ์ํฉ์ด ๋ค๋ฅด๋ค. ์ด ๊ฒฝ์ฐ์๋ ํธ๋์ญ์ ์ฐธ์ฌ์๊ฐ ํธ๋์ญ์ ๋งค๋์ ์ ๋์ ์์ด ์ค์ค๋ก ์ปค๋ฐ๋์๋์ง Abort ๋์๋์ง ์ ์๊ฐ ์๋ค.
๊ฒฐ๊ตญ์๋, Coordinator๊ฐ Recovery๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ ค์ผ ํ๊ณ , Coordinator๊ฐ ํ๋ณต๋ ๋ Coordinator๊ฐ ๊ธฐ๋กํด๋ ํธ๋์ญ์ ๋ก๊ทธ๋ฅผ ์ฝ์ด์ ์ํ๋ฅผ ํ๋ณตํ๊ฒ ๋๋ค.
'๐ข๏ธDatabase' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ตํฐ๋ง์ด์ ํํธ์ ๋ํด์ (0) | 2025.01.09 |
---|---|
DB ์ ํ๋์ ์นด๋๋๋ฆฌํฐ (+์ตํฐ๋ง์ด์ ํต๊ณ ์ ๋ณด) (0) | 2025.01.09 |
MySQL์ ๊ฒฉ๋ฆฌ ์์ค(Isolation Level) (0) | 2023.09.11 |
[Real MySQL 8.0] ์ฟผ๋ฆฌ ์์ฑ ๋ฐ ์ต์ ํ - JOIN (0) | 2023.08.22 |
Redis ์๊ณ ์ฌ์ฉํ์! (0) | 2023.08.20 |