week2_sangyun - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki
์๋ฐ์์ ์ฐ๋ ๋๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ๊ณผ ๋๊ธฐํ๋๋ ๊ณผ์ ์ ์ค๋ช ํ์์ค.
์ฐ๋ ๋?
- ์๋ฐ์์ ์ฐ๋ ๋๋ฅผ ์ด๋ป๊ฒ ๊ตฌํํ๋์ง ์์๋ณด๊ธฐ ์ ์ ์ฐ๋ ๋์ ๋ํด์ ๊ฐ๋จํ ์ ๋ฆฌํ๊ณ ๋์ด๊ฐ์.
- ์ฐ๋ ๋๋ ํ๋ก๊ทธ๋จ(ํ๋ก์ธ์ค)์ ์คํ ํ๋ฆ ์ ๋๋ก ํํํ ์ ์๋ค.
- ํ๋์ ํ๋ก์ธ์ค์์ ์ฌ๋๊ฐ์ ์ฐ๋ ๋๊ฐ ์คํ๋ ์ ์๋ค.
- ์๋ฐ์์ ์ฐ๋ ๋๋ ํ๋ก์ธ์ค์ heap ์์ญ์ ๊ณต์ ํ๋ค.
- ์๋ฐ์์ ์คํ์์ญ์ ์ฐ๋ ๋๋ณ๋ก ๋ ๋ฆฝ์ ์ผ๋ก ํ ๋น๋๋ค.
JVM ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์ ์ผ๋ฐ ํ๋ก๊ทธ๋จ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์ ์ฐจ์ด์ ์?
- ์ผ๋ฐ์ ์ผ๋ก ์ค๋ ๋๋ ํ๋ก์ธ์ค์ ์ฝ๋,ํ,๋ฐ์ดํฐ ์์ญ์ ๊ณต์ ํ
- ์๋ฐ ํ๋ก๊ทธ๋จ์ ํ, ๋ฉ์๋ ์์ญ, ๋ฐํ์ ์์ํ์ ๋ชจ๋ ์ฐ๋ ๋๊ฐ ๊ณต์ ํ๋ค.
- ์ผ๋ฐ ํ๋ก๊ทธ๋จ์ ์คํ๋๊ธฐ ์ํด์๋ OS์ ์ ์ด์๋์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ดํ์ฌ ์คํ
- ์๋ฐ ํ๋ก๊ทธ๋จ์ JVM์ด ์ด์์ฒด์ ๋ก๋ถํฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น ๋ฐ์ ํ๋ก๊ทธ๋จ์ ์คํํ๋ ๊ตฌ์กฐ์ด๋ค.
์ฐ๋ ๋์์ ์คํ์์ญ์ ๋ ๋ฆฝ์ ์ผ๋ก ํ ๋นํ๋ ์ด์ ๋?
- ๋ฉ๋ชจ๋ฆฌ์์ ์คํ์์ญ์ ํจ์ ํธ์ถ์ ์ ๋ฌ๋๋์ธ์, ๋๋์๊ฐ ์ฃผ์๊ฐ ๋ฐ ํจ์ ๋ด์์ ์ ์ธํ๋ ๋ณ์๋ฑ์ ์์์ ์ฅํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
- ์คํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ๋ ๋ฆฝ์ ์ด๋ผ๋ ๊ฒ์ ๋ ๋ฆฝ์ ์ธ ํจ์ํธ์ถ์ด ๊ฐ๋ฅํ๋ค.
- ์ค๋ ๋๋
๋ ๋ฆฝ์ ์ธ ์คํํ๋ฆ
์ ๋ณด์ฅํ๋๋ฐ ์ด๋ฅผ ์ํด์์คํ
์ ๊ฐ ์ค๋ ๋๋ณ๋ก ํ ๋นํ๋๊ฒ์ด๋ค.
์๋ฐ์์ ์ฐ๋ ๋๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ?
- Thread ํด๋์ค๋ฅผ ์์๋ฐ๋ ๋ฐฉ๋ฒ
- Runnable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ(๋ค์ค ์์๊ฐ๋ฅํด์ ์ผ๋ฐ์ ์ผ๋ก ๋ง์ด ์ฌ์ฉ)
๋ฉํฐ ์ฐ๋ ๋ ๋๊ธฐํ ๊ธฐ๋ฒ?
์์์ Lock
- ๊ฐ์ฅ ๊ฐ๋จํ๋ฉด์ ์ฌ์ด ๋ฐฉ๋ฒ์ผ๋ก Lock์ ๊ฑธ์ด๋ฒ๋ฆฌ๋ ๊ฒ์ด๋ค.
- Lock์ ์ ์ฉํ๋ฉด ํ๋์ ์ค๋ ๋๊ฐ ํด๋น ๋ฉ์๋๋ฅผ ์คํํ๊ณ ์์ ๋ ๋ค๋ฅธ ๋ฉ์๋๊ฐ ํด๋น ๋ฉ์๋๋ฅผ ์คํํ์ง ๋ชปํ๊ณ ๋๊ธฐ
- ํ ๋ฒ์ ํ๋์ ์ค๋ ๋๋๋ง ์ ๊ทผํ๋ฏ๋ก ๋ณ๋ น์ฑ์ ๋งค์ฐ ๋ฎ์์ง๋ค.
๋ช ์์ Lock
- synchronized ํค์๋ ์์ด ์ฌ์ฉํ๋ Lock
- ์ง์ ์ ์ผ๋ก Lock๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
- lock()๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ํด๋น lock()๋ฉ์๋ ์์์ ์ ์ ๊ทผํ์ง ๋ชปํ๊ณ ๋๊ธฐ
- unlock()๋ฉ์๋๋ฅผ ์คํํด์ผ ๋ค๋ฅธ ๋ฉ์๋๊ฐ lockํ๋ ๊ฐ๋ฅ
์ค๋ ๋ ์ธ์ดํํ ๊ฐ์ฒด ์ฌ์ฉ
- Concurrent ํจํค์ง
- AtomicInteger์ ๊ฐ์ ํด๋์ค๋ i++์ ๊ฐ์ ์ฐ์ฐ์ ๋จ์ผ์ฐ์ฐ์ผ๋ก ๋ง๋ ๋ฉ์๋๋ฅผ ์ ๊ณต
- ๋ด๋ถ์ ์ผ๋ก ์ค๋ ๋ ์ธ์ดํํ๊ฒ ๊ตฌ์กฐํ๋์ด ์์ด ์ค๋ ๋ ์ธ์ดํํ ํ๋ก๊ทธ๋จ์ ๋ง๋๋๋ฐ ๋์์ ์ค๋ค.
๋ถ๋ณ๊ฐ์ฒด
- ์ค๋ ๋ ์ธ์ดํ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ ๋ฐฉ๋ฒ์ค ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ
- ์คํ๋ง ๊ฐ์ฒด์ฒ๋ผ ํ ๋ฒ ๋ง๋ค๋ฉด ๊ทธ ์ํ๊ฐ ๋ณํ์ง ์๋ ๊ฐ์ฒด๋ฅผ ๋ถ๋ณ๊ฐ์ฒด๋ผ๊ณ ํ๋ค.
- ๋ด๋ถ์ ์ผ๋ก ์ํ๊ฐ ์์ผ๋ฏ๋ก ์ฌ๋ฌ ์ค๋ ๋์์ ๋์์ ์ฐธ์กฐํด๋ ๋์์ฑ ์ด์๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
- ๋ถ๋ณ ๊ฐ์ฒด๋ ์์ฑ์๋ก ๋ชจ๋ ์ํ ๊ฐ์นใน ์์ฑํ ๋ ์ธํ ํ๊ณ , ๊ฐ์ฒด์ ์ํ๋ฅผ ๋ณํ ์ํฌ ์ ์๋ ๋ถ๋ถ์ ๋ชจ๋ ์ ๊ฑฐํด์ผ ํ๋ค.(setter๋ฅผ ๋ง๋ค์ง ์๊ณ ๋ด๋ถ ์ํ๊ฐ ๋ณํ์ง ์๋๋ก final ์ ์ธ)
hashCode() ๊ฐ์ด ๋ชจ๋ ๊ฐ๋ค๋ฉด ์ด๋ค ์ผ์ด ๋ฒ์ด์ง๋์? hashcode()์ equls()๋ ์ธ์ ์ฌ์ฉํ๊ณ ์ ์ฌ์ฉํ๋์ง?
hashCode()?
- ์๋ฐ์ hashCode()๋ Object.hashCode()๋ก ๋ถํฐ ์์๋ฐ๋๋ค.
- int ํ์ด๊ธฐ ๋๋ฌธ์ 2^32 ๊น์ง ์๋ฃ๋ฅผ ํํํ๋ค.
- ์ธ์ ๋ ์ถฉ๋์ด ๋ฐ์ํ ์ ์๋ค.
- ํด์์ฝ๋๋ ๊ฐ์ฒด๋ฅผ ๊ตฌ๋ถํ๊ธฐ์ํ ์ ์๊ฐ
- ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ๊ณผ ๋ค๋ฅด๋ค.
์ ๊ฐ์ฒด๋ฅผ ๊ตฌ๋ถํ๋๊ฐ?
- ํด์ฌ๋งต, ํด์ฌํ ์ด๋ธ์ ์ ์ฅํ๊ธฐ์ํด์ hashCode()๊ฐ ํ์ํ๋ค.
- ํด์ฌ ์๋ฃ๊ตฌ์กฐ์๋ key,value๋ก ์๋ฃ๋ฅผ ์ ์ฅํ๋๋ฐ ์ด๋ key๊ฐ์ด ํ์ํ๋ค(๊ณ ์ ํ ์๋ณ๋ฒํธ)
equals() vs hashCode()
- equals() : ๋ ๊ฐ์ฒด์ ๋ด์ฉ์ด ๊ฐ์์ง ํ์ธ
- hashCode() : ๋ ๊ฐ์ฒด๊ฐ ๊ฐ์ ๊ฐ์ฒด์ธ์ง ํ์ธ
- ์ผ๋ฐ์ ์ผ๋ก hash๊ฐ ์ถฉ๋์ด ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์, ๊ฐ์ฒด๊ฐ ๊ฐ์ ๊ฐ์ฒด์ธ์ง๋ ํ์ธํด์ผํ๊ณ equals๋ฅผ ํตํด์ ๋ด์ฉ๋ ๊ฐ์์ง ํ์ธํด์ผ ํ๋ค.
๊ฒฐ๋ก
๊ฐ์ฒด A, ๊ฐ์ฒด B๊ฐ ๋ง์ฝ ๊ฐ์ hashcode๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ์ด๋, hash ์๋ฃ๊ตฌ์กฐ์ ์ ์ฅํ๋๊ฒฝ์ฐ ์ด๋ค์ผ์ด ๋ฐ์ํ ๊น? ๋ ๊ฐ์ฒด๋ ์๋ก ๊ฐ์ hashcode๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก ๊ฐ์ bucket์ ์ ์ฅ๋๊ณ equals()๋ฅผ ํตํด์ ๋๊ฐ๋ฅผ ๊ตฌ๋ถํ๋ค. hash์๋ฃ๊ตฌ์กฐ์์ ๊ฐ๊ฐ์ ๋ฒํท์ ์ฐ๊ฒฐ๋ฆฌ์คํธ ํํ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ์ ํด์์ฝ๋๋ฅผ ๊ฐ์ง๋ ์ฌ๋ฌ๊ฐ์ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ ์ ์๋ค.
๊ฐ์ ํด์์ฝ๋๋ฅผ ๊ฐ์ง๋ ๊ฐ์ฒด๋ค์ด ๋ง์์ง๊ฒ๋๋ฉด ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ๊ธธ์ด๊ฐ ๊ธธ์ด์ง๊ฒ ๋๋ค. ์ด๋ ๊ฒ ๋๋ฉด hash์๋ฃ๊ตฌ์กฐ์ ์ฅ์ ์ธ ๊ฒ์์๋๊ฐ ๋จ์ด์ง๊ธฐ๋๋ฌธ์ ์ถฉ๋์ ์ต์ํ ์์ผ์ผํ๋ค.
ํจ๋ฌ๋ดGC, G1GC์ ์ฐจ์ด์ ์ค๋ช ํด์ฃผ์ธ์
ํจ๋ฌ๋ด GC๋ old์์ญ์์ ์ด์ ๋จ์ ๊ฐ์ฒด๋ฅผ ์๋ณํ๊ณ heap์ ์ ๋ถ๋ถ๋ถํฐ ํ์ธํ์ฌ ์ด์์๋ ๊ฒ๋ง ๋จ๊ธด๋ค(sweep) ๊ทธ๋ฆฌ๊ณ ๊ฐ ๊ฐ์ฒด๋ค์ด ์ฐ์๋๊ฒ ์์ด๋๋ก ํ์ ๊ฐ์ฅ ์๋ถ๋ถ๋ถํฐ ์ฑ์์ ๊ฐ์ฒด๊ฐ ์กด์ฌํ๋ ๋ถ๋ถ๊ณผ ์กด์ฌํ์ง ์๋ ์์ญ์ผ๋ก ๊ตฌ๋ถํ๋ค(compaction) Serial GC์ ๊ฐ์ ๋ฐฉ์์ด์ง๋ง GC๋ฅผ ์ฒ๋ฆฌํ๋ ์ค๋ ๋๊ฐ ์ฌ๋ฌ๊ฐ์ฌ์ ๋ฉ๋ชจ๋ฆฌ์ CPU ์ฝ์ด๊ฐ ๋ง์๋ ์ ๋ฆฌํ๋ค.
CMS GC๋ ๊ธฐ์กด GC๋ณด๋ค JVM์ด ๋ฉ์ถ๋ ์๊ฐ์ ์ค๊ธฐ์ด ์ํด ๊ณ ์๋์๋ค. ๋จ์ ์ผ๋ก๋ compaction์ ์งํํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ํํธํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
G1GC๋ heap์์ญ์ 2048๊ฐ region ์์ญ์ผ๋ก ์ชผ๊ฐ๊ณ Eden,Survivor, Old, Permanent, Humongous, Available/Unused ์ํ๋ก ์ง์ ์ด ๊ฐ๋ฅํ๊ณ . ๋ฐ์ดํฐ๊ฐ ๊ฐ์ฅ ๋ง์ด ์ฐฌ region์์ GC๊ฐ ๋ฐ์ํ๋ค.
Spring์ AOP์ ํน์ง๊ณผ ์ด๋๋ฐ์ด์ค ์ข ๋ฅ์ ์ฌ์ฉ๋ proxy ํจํด์ ๋ํด ์ค๋ช ํด๋ณด์ธ์.
AOP๋ ํก๋จ ๊ด์ฌ์ฌ(Cross Cutting Concern)์ ํ ๊ณณ์์ ๋ชจ์์ ์ฒ๋ฆฌํ๋ ๊ธฐ์ ์ด๋ค.
์ด๋, ํก๋จ๊ด์์ฌ๋ฅผ ์ค์ ๋ก ๊ตฌํํด์ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ์ ์ด๋๋ฐ์ด์ค๋ผ๊ณ ํ๋ค.
์คํ๋ง AOP์์ ์ ๊ณต๋๋ ์ด๋๋ฐ์ด์ค์ ์ข ๋ฅ๋ ์๋์ ๊ฐ๋ค.
- Before
- AfterReturning
- AfterThrowing
- After
- Around
์๋ฐ์์ AOP๋ Dynamic Proxy ํน์ CGLIB๋ฅผ ์ด์ฉํ๋๊ฒฝ์ฐ๋ก ๊ตฌ๋ถํ๋ค. Dynamic Proxy๋ ์๋ฐ์์ ๋ฆฌํ๋ ์ ์ ํ์ฉํ Proxyํด๋์ค๋ฅผ ์ฌ์ฉํด์ ๋ฐํ์์์ ๋์ ์ผ๋ก ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ค. ํด๋น ๋ฐฉ์์ ์ ์ฝ์ฌํญ์ ์ธํฐํ์ด์ค๋ฅผ ํตํด์๋ง Proxy๋ฅผ ์์ฑํ ์ ์๋ค๋ ์ ์ด๋ค. CGLIB๋ฅผ ์ด์ฉํ๋ฉด ํด๋์ค์ ํ๋ก์๊ฐ ํ์ํ ๊ฒฝ์ฐ ํ์ฉํ ์ ์๋ค. ๋ฐ๋ฉด finalํด๋์ค๋ ๋ฉ์๋๋ adviseํ ์ ์๋ค.
์คํ๋ง AOP๋ AspectJ ์คํ์ผ๋ก ์ ๊ณตํ๋ค. Pointcut์ ํ์ฑํ๊ณ ๋งค์นญํด์ฃผ๋ ์ ํ์ ์ธ AOP๋ฅผ ์ ๊ณตํ๋ค.
์คํ๋ง์์ @Transactional์ ์ด๋ป๊ฒ ๋์ํ๋ฉฐ ์ด๋ค ์ต์ ์ด ์๋๊ฐ?
์คํ๋ง ํธ๋์ญ์ ๋์์๋ฆฌ
@Transactional ์ด๋ ธํ ์ด์ ์ ๊ธฐ์ค์ผ๋ก ์ค๋ช ํ๋ฉด ํธ๋์ญ์ ์ Sprig AOP๋ฅผ ํตํด ๊ตฌํ๋์ด ์๋ค. ํด๋์ค,๋ฉ์๋์ @Transactional์ด ํ๊น ๋์ด ์์ผ๋ฉด ํด๋น ํด๋์ค์ ํธ๋์ญ์ ์ด ์ ์ฉ๋ ํ๋ก์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค. ํ๋ก์ ๊ฐ์ฒด๋ @Transactional์ด ํฌํจ๋ ๋ฉ์๋๊ฐ ํธ์ถ๋ ๊ฒฝ์ฐ, ํธ๋์ญ์ ์ ์์ํ๊ณ commit or rollback์ ์ํํ๋ค. checkedException์ด๋ ์์ธ๊ฐ ์์ ๋๋ Commit UncheckedException์ด ๋ฐ์ํ๋ฉด RollBack
์ต์
์ ํ
ํธ๋์ญ์ ๋์ ๋์ค ๋ค๋ฅธ ํธ๋์ญ์ ์ ํธ์ถํ๋ ์ํฉ์ ์ ํํ ์ ์๋ ์ต์
Required
๋ํดํธ ์์ฑ, ๋ถ๋ชจ ํธ๋์ญ์ ๋ด์์ ์คํํ๋ฉฐ ๋ถ๋ชจ ํธ๋์ญ์ ์ด ์์ ๊ฒฝ์ฐ ์๋ก์ด ํธ๋์ญ์ ์ ์์ฑํ๋ค.
Supports
์ด๋ฏธ ์์๋ ํธ๋์ญ์ ์ด ์์ผ๋ฉด ์ฐธ์ฌํ๊ณ ๊ทธ๋ ์ง ์์ผ๋ฉด ํธ๋์ญ์ ์์ด ์งํํ๊ฒ ๋ง๋ ๋ค.
Requires_new
๋ถ๋ชจ ํธ๋์ญ์ ์ ๋ฌด์ํ๊ณ ๋ฌด์กฐ๊ฑด ์๋ก์ด ํธ๋์ญ์ ์ด ์์ฑ
Mandatory
REQUIRED์ ๋น์ทํ๊ฒ ์ด๋ฏธ ์์๋ ํธ๋์ญ์ ์ด ์์ผ๋ฉด ์ฐธ์ฌํ๋ค. ๋ฐ๋ฉด์ ํธ๋์ญ์ ์ด ์์๋ ๊ฒ์ด ์์ผ๋ฉด ์๋ก ์์ํ๋ ๋์ ์์ธ๋ฅผ ๋ฐ์์ํจ๋ค. ํผ์์๋ ๋ ๋ฆฝ์ ์ผ๋ก ํธ๋์ญ์ ์ ์งํํ๋ฉด ์๋๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ค.
Not_supported
ํธ๋์ญ์ ์ ์ฌ์ฉํ์ง ์๊ฒ ํ๋ค. ์ด๋ฏธ ์งํ์ค์ธ ํธ๋์ญ์ ์ด ์์ผ๋ฉด ํธ๋์ญ์ ์ ๋ณด๋ฅ์ํจ๋ค.
Never
ํธ๋์ญ์ ์ ์ฌ์ฉํ์ง ์๋๋ก ๊ฐ์ ํ๋ค. ์ด๋ฏธ ์งํ์ค์ธ ํธ๋์ญ์ ๋ ์กด์ฌํ๋ฉด ์๋๋ค ์๋ค๋ฉด ์์ธ๋ฅผ ๋ฐ์์ํจ๋ค.
Nested
์ด๋ฏธ ์งํ์ค์ธ ํธ๋์ญ์ ์ด ์์ผ๋ฉด ์ค์ฒฉ ํธ๋์ญ์ ์ ์์ํ๋ค. ์ค์ฒฉ ํธ๋์ญ์ ์ ํธ๋์ญ์ ์์ ๋ค์ ํธ๋์ญ์ ์ ๋ง๋๋ ๊ฒ์ด๋ค. ํ์ง๋ง ๋ ๋ฆฝ์ ์ธ ํธ๋์ญ์ ์ ๋ง๋๋ REQUIRES_NEW์๋ ๋ค๋ฅด๋ค. REQUIRED์ ๋์ผํ๊ฒ ์๋ํ์ง๋ง ์ค์ํ ์ฐจ์ด์ ์ SAVEPOINT๋ฅผ ์ง์ ํ ์์ ๊น์ง ๋กค๋ฐฑ์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ด๋ค.
readOnly
ํธ๋์ญ์ ์ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ์ค์ ํ ์ ์๋ค. ์ฑ๋ฅ์ ์ต์ ํํ๊ธฐ ์ํด ์ฌ์ฉํ ์๋ ์๊ณ , ํน์ ํธ๋์ญ์ ์์ ์์์ ์ฐ๊ธฐ ์์ ์ด ์ผ์ด๋๋ ๊ฒ์ ์๋์ ์ผ๋ก ๋ฐฉ์งํ๊ธฐ ์ํด ์ฌ์ฉํ ์๋ ์๋ค. ์ผ๋ถ ํธ๋์ญ์ ๋งค๋์ ์ ๊ฒฝ์ฐ ์ฝ๊ธฐ์ ์ฉ ์์ฑ์ ๋ฌด์ํ๊ณ ์ฐ๊ธฐ ์์ ์ ํ์ฉํ ์๋ ์๊ธฐ ๋๋ฌธ์ ์ฃผ์ํด์ผ ํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฝ๊ธฐ ์ ์ฉ ํธ๋์ญ์ ์ด ์์๋ ์ดํ INSERT, UPDATE, DELETE ๊ฐ์ ์ฐ๊ธฐ ์์ ์ด ์งํ๋๋ฉด ์์ธ๊ฐ ๋ฐ์ํ๋ค.
์ฐ์ ์์
@Transactional์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ํด๋์ค ๋ฉ์๋์ ์ ์ธ๋ ํธ๋์ญ์ ์ ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋๊ณ , ์ธํฐํ์ด์ค์ ์ ์ธ๋ ํธ๋์ญ์ ์ ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋ฎ๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ธํฐํ์ด์ค๋ณด๋ค๋ ํด๋์ค์ ์ ์ฉํ๋๊ฒ์ ๊ถ๊ณ ํ๋ค.
ํด๋์ค ๋ฉ์๋ -> ํด๋์ค -> ์ธํฐํ์ด์ค ๋ฉ์๋ -> ์ธํฐํ์ด์ค
๋ชจ๋
Proxy Mode(default)
๋ฐ๋์ public ๋ฉ์๋์ ์ ์ฉ๋์ด์ผ ํ๋ค. @Transactinal์ด ํ๊น ๋์ง ์์ public method์์ @Transactional์ด ํ๊น ๋ ๋ฉ์๋๋ฅผ ํธ์ถํ ๊ฒฝ์ฐ ํธ๋์ญ์ ์ด ๋์ํ์ง ์๋๋ค.
AspectJ Mode
public๋ฉ์๋๊ฐ ์๋์ฌ๋ ๋๋ค.
์คํ๋ง์์ ์ธ์ฆ๊ณผ ์ธ๊ฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ๋ํด ์ค๋ช ํด๋ณด์ธ์.
- ์ธํฐ์ ํฐ, ํํฐ ํ์ฉ
SQL์ HINT๋ฅผ ์ค๋ช ํด์ฃผ์ธ์.
SQL์ ํฌํจ๋์ ์ฐ์ฌ์ง๊ณ Optimizer์ ์คํ ๊ณํ์ ์ํ๋ ๋๋ก ๋ฐ๊ฟ ์ ์๊ฒ ํด์ค๋ค. Optimizer๋ผ๊ณ ํด์ ํญ์ ์ต์ ์ ์คํ ๊ณํ์ ์๋ฆฝํ ์๋ ์์ผ๋ฏ๋ก ํ ์ด๋ธ์ด๋ ์ธ๋ฑ์ค์ ์๋ชป๋ ์คํ ๊ณํ์ ๊ฐ๋ฐ์๊ฐ ์ง์ ๋ฐ๊ฟ ์ ์๋๋ก ๋์์ฃผ๋ ๊ฒ์ด๋ค.
memcached๋ณด๋ค redis์ ๊ณตํต์ ๊ณผ ์ฐจ์ด์ ์?
Memcached๋ ๋ณธ์ง์ ์ผ๋ก ๊ณ ์ฑ๋ฅ ๋ถ์ฐ ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ฒด ์บ์ฑ ์์คํ ์ด๋ค. ๋์ ์น์๋น์ค์ DB ๋ถํ๋ฅผ ๊ฒฝ๊ฐ์ํค๊ธฐ ์ํ๊ฒ์ด ์ฃผ ๋ชฉ์ ์ด๋ค. ๋ฐ๋ฉด, Redis๋ key-value ๊ธฐ๋ฐ์ ๋ค์ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ํฌํจํ๊ณ ์๊ธฐ๋๋ฌธ์ NoSQL ์ญํ ์ ์ํํ๋ค.
Redis๋ CAP์ด๋ก ์์ CA๋ฅผ ๋ง์กฑํ๋ค( ๊ณ ๊ฐ์ฉ์ฑ,์ผ๊ด์ฑ)
Master-Slave, Clustering, Sentinel์ ์ด์ฉํด์ ๊ณ ๊ฐ์ฉ์ฑ๊ณผ ์ผ๊ด์ฑ ์ ๋ณด์ฅํ๋ค.
(CAP์ด๋ก : ๋ถ์ฐ ์ปดํจํ ์์คํ ์์ ์ผ๊ด์ฑ,๊ฐ์ฉ์ฑ,์ง์์ฑ์ผ ๋์์ ์ ๊ณตํ๋๊ฒ์ ๋ถ๊ฐ๋ฅํ๊ณ ๋๊ฐ์ง๋ง ๋ง์กฑํ ์ ์๋ค.)
ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค (Isolation Level) ์ ๋ํด์ ์ค๋ช ํ์ธ์.
ํธ๋์ญ์ ์ ๊ฒฉ๋ฆฌ์ฑ๊ณผ ๋์ ์ฒ๋ฆฌ ์ฑ๋ฅ ์ฌ์ด์ Trade Off์ ๋๊ณ 4 level ๊ฒฉ๋ฆฌ์์ค์ด ์๊ธฐ๊ฒ ๋์๋ค.
Read Uncommitted
- ์ด๋ค ํธ๋์ญ์ ์ด ์ฒ๋ฆฌํ ์์ ์ด ์๋ฃ๋์ง ์์๋๋ฐ๋ ๋ค๋ฅธ ํธ๋์ญ์ ์์ ํ ์ด๋ธ ๋ณผ ์ ์๋ค.
- Dirty ready, Non-repeatable read, Phantom read ํ์ ๋ฐ์
Read Committed
- ์ด๋ค ํธ๋์ญ์ ์์ ์ฒ๋ฆฌํ ์์ ์ด commit์ด ์๋์ด ์๋ค๋ฉด ๋ค๋ฅธ ํธ๋์ญ์ ์ undo ์์ญ์ ์๋ ๊ธฐ์กด ๊ฐ์ ์ฐธ๊ณ ํ์ฌ ๋ณด์ฌ ์ฃผ๊ฒ ๋๋ค.
- Non-Repeatable Read ๋ฌธ์ ๋ฐ์
Repeatable Read
- InnoDB Storage Enging์ ํธ๋์ญ์ ์ด Rollback๋ ๊ฐ๋ฅ์ฑ์ ๋๋นํด ๋ณ๊ฒฝ๋๊ธฐ ์ ๋ ์ฝ๋๋ฅผ Undo ๊ณต๊ฐ์ ๋ฐฑ์ ํด ๋๊ณ ์ค์ ๋ ์ฝ๋ ๊ฐ์ ๋ณ๊ฒฝ(MVCC - Multi Version Concurrency Control)
- MVCC๋ฅผ ์ํด undo ์์ญ์ ๋ฐฑ์ ๋ ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํด ๋์ผ ํธ๋์ญ์ ๋ด์์๋ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค ์ ์๋๋ก ๋ณด์ฅ
- ํฌํ ๋ฆฌ๋
Serializable
- ์ฝ๊ธฐ ์์ ๋ ๊ณต์ ์ ๊ธ์ ํ๋ํด์ผ ํ๋ค.
- ๋์์ฑ์ด ์ค์ํ DB์์๋ ๊ฑฐ์ ์ฌ์ฉ x
- Phantom Read๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์ง๋ง, inno db ์คํ ๋ฆฌ์ง ์์ง์์๋ repeatable read๊ฒฉ๋ฆฌ ์์ค์์๋ ์ด๋ฏธ phantom read๊ฐ ๋ฐ์ํ์ง ์์์ ๊ตณ์ด serializable ์ฌ์ฉํ ํ์ ์๋ค.