๐ ํธ๋์ญ์
โ๏ธ ACID
- [A] Atomicity ์์์ฑ
- [C] Consistency ์ผ๊ด์ฑ
- [I] Isolation ๋ ๋ฆฝ์ฑ
- [D] Durability ์ง์์ฑ
โ๏ธ Transactional
- ๋ฉ์๋ or ํด๋์ค์ ์ค์ ์ ๋ฉ์๋์ ์์๊ณผ ๋์ด ํธ๋์ญ์ ์ ์๋ช ์ฃผ๊ธฐ๊ฐ ๋๋ค.
- ๋ฉ์๋ ๋ด DML๋ช ๋ น ํธ์ถ ๋ฉ์๋๋ค์ ํ ๊ฐ ํธ๋์ญ์ ์ผ๋ก ๋ฌถ์ด์ค๋ค.
โ๏ธ CheckedException, UncheckedException
CheckedException (์ปดํ์ผ์๋ฌ)
- Exception, IOException, FileNotFoundException ...
- ํธ๋์ญ์ ์ค ์์ธ๊ฐ ๋ฐ์ํ์ฌ๋ ๋กค๋ฐฑํ์ง ์์ (์ปค๋ฐ๊น์ง ๋ชจ๋ ์ํ)
- ๋ฐ๋์ ์์ธ์ ๋ํ ์ฒ๋ฆฌ๊ฐ ๋ช
์์ ์ผ๋ก ํ์
(try-catch or throw or throws)
UncheckedException (๋ฐํ์์๋ฌ)
- RunTimeException, NullPointerException, IndexOutOf~
- ํธ๋์ญ์ ์ค ์์ธ ๋ฐ์์ ๋กค๋ฐฑ ์ํ
โ๏ธ CheckedException์ ๋ํด ๋ช ์์ Rollback ์ํ
@Transactional - rollbackFor()
ex)
@Transactional(rollbackFor = Exception.class)
- ๋ช ์์ ์ผ๋ก CheckException์ธ Exception์ ๋ํด ๋กค๋ฐฑ์ ์ํํ๋๋ก ์ค์
โ๏ธ private ๋ฉ์๋์์ @Transactional ์ฌ์ฉ
private์ผ๋ก ์ง์ ๋ ๋ฉ์๋์์ @Transactional ์ฌ์ฉ์ UncheckedException์ด ๋ฐ์ํ์ฌ๋ ๋กค๋ฐฑ์ด ์ํ๋์ง ์๋๋ค.
(๋ง์น @Transactional์ด ์ ์ฉ๋์ง ์์ ๊ฒ ๊ฐ์)
public void call() {
this.realMethod();
}
@Transactional
private void realMethod() {
// ...ํธ๋์ญ์
์ํ ... //
throw new RuntimeException();
}
- ๋ช ์์ ์ผ๋ก UncheckedException์ ๋ฐฉ์์์ผฐ์ง๋ง ๋กค๋ฐฑ ์ํ๋์ง ์์
- call()์์ ํธ์ถํ ๋ฉ์๋์ ์ด๋ ธํ ์ด์ ์ ๋ฌด์๋จ
- public์ด์ฌ๋ ๋ฌด์๋จ
- ์ค์์ ์ฌ์ง๊ฐ ์์ผ๋ฏ๋ก ์กฐ์ฌ
- @Transactional ์ด๋ ธํ ์ด์ ๋ฟ๋ง ์๋๋ผ ๋ชจ๋ ์ด๋ ธํ ์ด์ ์ ์ ์ฉ๋จ
โ๏ธ @Transactional - isiolation
- ํธ๋์ญ์ ๊ฒฉ๋ฆฌ์์ค
- default: DEFAULT (DB์ ๊ธฐ๋ณธ ๊ฒฉ๋ฆฌ์์ค์ ๋ฐ๋ผ๊ฐ)
MySQL์ ๊ฒฝ์ฐ default: REPEATABLE_READ
READ_UNCOMMITTED (Level 1)
- ์ปค๋ฐ๋์ง ์์ ๋ฐ์ดํฐ์ ์ ๊ทผ์ ํ์ฉ
- ํ ํธ๋์ญ์ ์์ ์ ๋ฐ์ดํธ ํ ๋ฐ์ดํฐ๊ฐ ์ปค๋ฐ ์ ์ด์ด๋ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ์ ๋ฐ์ดํธ ๋ ๋ฐ์ดํฐ์ ์ ๊ทผ ๊ฐ๋ฅ
- ์ปค๋ฐ์ ์ ๋ฐ์ดํฐ ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์์ง๋ง ํด๋น ์ ๋ฐ์ดํธ ํธ๋์ญ์ ์ด ๋กค๋ฐธ๋๋ค๋ฉด ์ ๋ฐ์ดํธ ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํธ๋์ญ์ ์ ๋กค๋ฐฑ ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง (update์ค๋ฅ)
- insert์์๋ ๋์ผํ ์ค๋ฅ ๋ฐ์ ๊ฐ๋ฅ
๐ฟ Dirty Read
READ_COMMITTED (Level 2)
- ์ปค๋ฐ๋ ๋ฐ์ดํฐ์ ๋ํด์๋ง ์กฐํ๋ฅผ ํ์ฉ
- Aํธ๋์ญ์
์ ์ปค๋ฐ ์ฌ๋ถ์ ๋ฐ๋ผ Bํธ๋์ญ์
์ด ์ฝ๋ ๊ฐ์ด ๋ค๋ฅผ ์ ์์
์ฆ, Bํธ๋์ญ์ ๋์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ์ง๋ง ๊ฒฐ๊ณผ๊ฐ ๋ค๋ฅผ ์ ์
๐ฟ Non-repeatable Read ๋ฐ์ ๊ฐ๋ฅ
REPEATABLE_READ (Level 3)
- ํธ๋์ญ์
์ํ ํ ํ ๋ฒ ์กฐํ๋ ๊ฐ์ด ํธ๋์ญ์
์ด ์ข
๋ฃ๋ ๋๊น์ง ์กฐํ๋๋ค.
์ฆ, ํธ๋์ญ์ ์ํ ์ ์ปค๋ฐ๋ ๋ฐ์ดํฐ๋ง ์กฐํ ๊ฐ๋ฅ - ํธ๋์ญ์
์์ ์ ๋ฐ์ดํฐ์ ์ค๋
์ท์ ์ ์ฅํ๊ณ ํธ๋์ญ์
๋์์ ์ค๋
์ท๋ง์ ์ฌ์ฉ
๐ฟ Phantom Read ๋ฐ์ ๊ฐ๋ฅ
SERIALIZABLE (Level 4)
- ํ ํธ๋์ญ์ ์ด ์กฐํ๋ฅผ ์์ํ๋ฉด ํด๋น ํ ์ด๋ธ์ ๋ค๋ฅธ ํธ๋์ญ์ ์ ์ํ ์์ /์ญ์ /์ฝ์ ์ ๋ถ๊ฐ๋ฅํ๋ค.
- ๋ ๋ฒจ์ด ๋์์ง์๋ก ๋ฐ์ดํฐ ์ ํฉ์ฑ ๐, ๋์์ฑ ๐
โ๏ธ @Transactional - propagation
- ํธ๋์ญ์ ์ ์ ํ
REQUIRED (default)
- ๊ธฐ์กด ํธ๋์ญ์
์ด ์๋ค๋ฉด ๊ทธ๋๋ก ๊ธฐ์กด ํธ๋์ญ์
์ ์ฌ์ฉ
๊ธฐ์กด ํธ๋์ญ์ ์ด ์๋ค๋ฉด ์๋ก์ด ํธ๋์ญ์ ์ ์์ฑ
REQUIRES_NEW
- ๊ฐ๊ฐ ์์ ์ ํธ๋์ญ์ ์ ์ฌ์ฉ. ๊ธฐ์กด ํธ๋์ญ์ ์ด ์์ด๋ ์๋ก์ด ํธ๋์ญ์ ์ ์์ฑ
NESTED
- ๊ธฐ์กด ํธ๋์ญ์
์ด ์๋ ์ํ์์ ๋ค๋ฅธ ๋ฉ์๋ ํธ์ถ ๋ฑ์ผ๋ก ํธ๋์ญ์
์ด ํ์ํ ๊ฒฝ์ฐ
๊ธฐ์กด ํธ๋์ญ์ ์ ์ฌ์ฉ - but, ํธ์ถ๋ ๋ฉ์๋๊ฐ ๋กค๋ฐฑ๋๋ ๊ฒฝ์ฐ ๊ธฐ์กด ํธ๋์ญ์
์ ๊ทธ๋๋ก ์ปค๋ฐ๋จ
๊ธฐ์กด ํธ๋์ญ์ ์ด ๋กค๋ฐฑ๋๋ ๊ฒฝ์ฐ ํธ์ถ๋ ๋ฉ์๋๊น์ง ๋กค๋ฐฑ๋จ
SUPPORTS
- ํธ์ถํ๋ ์ชฝ์ ํธ๋์ญ์ ์ด ์๋ค๋ฉด ๊ทธ๋๋ก ์ฌ์ฉ (์ฌํ์ฉ)
- ํธ๋์ญ์ ์ด ์๋ค๋ฉด ํธ๋์ญ์ ์ ์์ฑํ์ง ์๊ณ ๊ทธ๋ฅ ์ํ
NOT_SUPPORTED
- ํธ์ถํ๋ ์ชฝ์ ํธ๋์ญ์
์ด ์๋ค๋ฉด ํด๋น ํธ๋์ญ์
์ ๋ฉ์ถ๊ณ ํธ์ถ๋
๋ฉ์๋๋ฅผ ์ํ (ํธ๋์ญ์ ์์ด ์ํ)
MANDATORY
- ํธ๋์ญ์ ์ ํ์๋ก ์๊ตฌ
- ํธ๋์ญ์ ์ด ์๋ค๋ฉด ์ค๋ฅ (ํธ๋์ญ์ ์ ์์ฑํ์ง ์์)
NEVER
- ํธ๋์ญ์ ์ด ์์ผ๋ฉด ์๋จ
- ํธ๋์ญ์ ์ด ์๋ค๋ฉด ์ค๋ฅ
๐ ์๊ฐ์ธ์ฆ

ํจ์คํธ์บ ํผ์ค [์ง์ฅ์ธ ์ค๋ฌด๊ต์ก]
ํ๋ก๊ทธ๋๋ฐ, ์์ํธ์ง, UX/UI, ๋ง์ผํ , ๋ฐ์ดํฐ ๋ถ์, ์์ ๊ฐ์, The RED, ๊ตญ๋น์ง์, ๊ธฐ์ ๊ต์ก, ์๋น์ค ์ ๊ณต.
fastcampus.co.kr