๐ FLAB์์ GOOGLE ๋ นํ ์์ฑ์ ํตํ ์คํฌ๋ฆฝํธ์ ์ง๋ฌธ์ฌํญ์ ๋ฐ๋ก ์ ๋ฆฌํ์์ต๋๋ค.
ArrayList๋ ๋ด๋ถ๊ฐ ๋ฐฐ์ด์ด๋ผ ์ธ๋ฑ์ค๋ก ๋ฐ๋ก ์ ๊ทผํ ์ ์์ด์ ํน์ ์์ ์กฐํ๋ O(1)์ด์ง๋ง, ์ค๊ฐ์ด๋ ์์์ ์ฝ์ ยท์ญ์ ๋ฅผ ํ๋ฉด ๋ค์ ์์๋ค์ ์ ๋ถ ๋ฐ์ด์ผ ํ๋ฏ๋ก O(N)์ด ๊ฑธ๋ฆฐ๋ค.LinkedList๋ ๋ ธ๋๋ค์ด ํฌ์ธํฐ๋ก ์ฐ๊ฒฐ๋ ๊ตฌ์กฐ๋ผ ์ธ๋ฑ์ค๋ก ๋ฐ๋ก ์ ๊ทผํ ์ ์์ด์ ์กฐํ๋ ๋ ธ๋๋ฅผ ํ๋์ฉ ๋ฐ๋ผ๊ฐ์ผ ํ๋ฏ๋ก O(N)์ด๊ณ , ๋์ ๋งจ ์์ด๋ ๋งจ ๋ค์์์ ์ฝ์ ยท์ญ์ ๋ ํฌ์ธํฐ๋ง ๋ฐ๊พธ๋ฉด ๋์ด O(1)์ด๋ค(๋จ, ๋งจ ๋ค O(1)์ tail ํฌ์ธํฐ๊ฐ ์์ ๋ ๊ธฐ์ค์ด๋ค).- ์ด๋ฐ ํน์ฑ ๋๋ฌธ์ ์คํ์ฒ๋ผ ๋ค์์๋ง ๋ฃ๊ณ ๋นผ๋ ๊ตฌ์กฐ๋ ArrayList๋ก ๊ตฌํํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ณ , ํ๋ ๋ฑ์ฒ๋ผ ์๊ณผ ๋ค์์ ์์ฃผ ์ฝ์ ยท์ญ์ ๊ฐ ์ผ์ด๋๋ ๊ตฌ์กฐ๋ LinkedList๋ก ๊ตฌํํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
JVM์ OS(์ด์์ฒด์ ) ์์์ ๋์ํ๋ค.
์๋์ฐ, ๋ฆฌ๋
์ค, ๋งฅ์ฉ JVM์ด ๊ฐ๊ฐ ๋ฐ๋ก ์์ผ๋ฉฐ,
์ด ๊ตฌ์กฐ ๋๋ถ์ ๊ฐ๋ฐ์๋ "Write Once, Run Anywhere"๋ผ๋ ๋ง์ฒ๋ผ
OS์ ์๊ด์์ด ๋์ผํ ์๋ฐ ์ฝ๋๋ฅผ ์คํํ ์ ์๋ค.
- ํด๋์ค ๋ก๋ (Class Loader)
- ์์ฑํ
.classํ์ผ๋ค์ ์ฝ์ด์ JVM ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ฐฐ์นํ๋ค. (๋ฐฐ๋ฌ์ ์ญํ )
- ์์ฑํ
- ๋ฐํ์ ๋ฐ์ดํฐ ์์ญ (Runtime Data Areas):
- ํ๋ก๊ทธ๋จ์ ์คํํ๊ธฐ ์ํด
OS๋ก๋ถํฐ ํ ๋น๋ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด๋ค. - ์ฐ๋ฆฌ๊ฐ ์์ ์ด์ผ๊ธฐํ
Stack๊ณผHeap์ด ๋ฐ๋ก ์ด ์์ ํฌํจ๋๋ค.
- ํ๋ก๊ทธ๋จ์ ์คํํ๊ธฐ ์ํด
- ์คํ ์์ง (Execution Engine):
- ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ์จ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์ค์ ๋ก ์คํํ๋ค.
- ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์๊ณผ ์ฑ๋ฅ์ ๋์ฌ์ฃผ๋ JIT ์ปดํ์ผ๋ฌ ๋ฐฉ์์ ์์ด์ ์ฌ์ฉํ๋ค.
- ๊ฐ๋น์ง ์ปฌ๋ ํฐ (Garbage Collector):
- ํ ์์ญ์์ ์ฐธ์กฐ๋์ง ์๋ ๊ฐ์ฒด๋ค์ ์ฐพ์ ๋ฉ๋ชจ๋ฆฌ์์ ์ ๊ฑฐํ๋ค.
- ์ฝ๋๋ฅผ ํ ์ค์ฉ ์ฝ์ผ๋ฉด์ ๊ธฐ๊ณ์ด๋ก ์ฆ์ ๋ฒ์ญ(ํด์)ํ๊ณ ๋ฐ๋ก ์คํํ๋
์ธํฐํ๋ฆฌํฐ๋ฐฉ์๊ณผ, ์คํ ์ ์ ์ฝ๋ ์ ์ฒด๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ฏธ๋ฆฌ ๋ฒ์ญํ๋์ปดํ์ผ๋ฌ๋ฐฉ์์ ์์ด์ ์ฌ์ฉํ๋ค. - ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ผ๋ก ์คํํ๋ค๊ฐ, ์ด๋ค ๋ฉ์๋๊ฐ ๋ฐ๋ณต์ ์ผ๋ก ํธ์ถํ๋์ง ํ๋กํ์ผ๋งํ๊ณ , ํน์ ์ฝ๋๊ฐ ๋ง์ด ์คํ๋๋ ๋ถ๋ถ์ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํด์ ์บ์๋ก ์ ์ฅํด์ ๊ทธ๊ฑธ ์คํํจ.
๊ฐ์ฒด๋ ์ฐ๋ฆฌ ์ฃผ๋ณ์์ ์กด์ฌํ๋ ์ค์ฒด๋ฅผ ์ํํธ์จ์ด ๊ฐ๋ ์๋ค ์ฎ๊ธด ๊ฒ์ผ๋ก,์ํ์ ํ์๋ฅผ ๊ฐ์ง ํ๋์ ๋จ์์ด๋ค.- ์ํ: ์ด๋ฆ, ๋์ด, ํค, ๋ชธ๋ฌด๊ฒ
- ํ์: ๊ฑท๊ธฐ, ๋ฐ๊ธฐ, ๋งํ๊ธฐ
- ๋ฌผ๋ฆฌ์ ์ธ๊ฒ ์๋๋ผ ์๊ฐ๊ณผ ๊ฐ์ ๋
ผ๋ฆฌ์ ์ธ ์กด์ฌ๋ ๋
๋ฆฝ์ ์ธ ๊ฐ์ฒด๋ก์ ์กด์ฌํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์
LocalTimeํด๋์ค์ ๊ฐ์ด ์ถ์์ ์ธ ์๊ฐ์ ๊ฐ๋ ์ ๊ฐ์ฒด๋ก ๋ง๋ค์ด ๋ณต์กํ ๋ก์ง์ ๊ด๋ฆฌํ ์ ์๋ค. ๊ฐ์ฒด์งํฅ์ ํ๋ก๊ทธ๋จ ์คํ์ด ๋จ์ํ ์์์ ์๋๋ก ์งํํ๋ ์์๊ฐ ์ค์ํ ์ ์ฐจ์งํฅ๊ณผ ๋ฌ๋ฆฌ ๊ฐ์ฒด๊ฐ ์๊ฐ์ ํ๋ฆ์ ๋ฐ๋ผ์ ์์ ์ ์ํ๋ฅผ ์ ์งํ๋ฉด์ ๊ฐ์ฒด๋ผ๋ฆฌ ์ํธ์์ฉํ๋ฉฐ ๋ณํํ๋ ๊ณผ์
- ์ญํ (์ธํฐํ์ด์ค)
- ๋ฐฐ๋ฌ์์ด ๋จ์๋ ์ฌ์๋ ์์ธ ์ถ์ ์ด๋ ์๋๋ , ๋ฐฐ๋ฌ๋ง ์ ํด์ฃผ๋ฉด ๋๋ค๋ ํ๋ง ์์ผ๋ฉด ๋จ
- ์ฑ
์(๊ตฌํ)
- ์คํ ๋ฐ์ด๋ฅผ ํ๋ , ์์ ๊ฑฐ๋ฅผ ํ๋ ์ด๋ค ๋ฐฉ์์ผ๋ก ์ํํ ์ง์ ๋ํ ๊ตฌํ
- ํ๋ ฅ(ํด๋์ค๊ฐ์ ํธ์ถ)
- ์๋์ ์ฃผ๋ฌธ์ ํ๊ณ , ์๋น์ ์๋ฆฌํ๊ณ ๋ฐฐ๋ฌ์์ ํธ์ถํ๊ณ , ๋ฐฐ๋ฌ์์ ์์์ ์๋์๊ฒ ์ ๋ฌํ๋ฉด ๋จ.
- ๋จ์ผ ์ฑ ์์ ์์น์ผ๋ก ํ๋์ ํด๋์ค๋ ๋ฑ ํ ๊ฐ์ง ์ญํ ๋ง ๋งก์์ผ ํ๋ค๋ ๋ป์ด๋ค.
- ์ฌ๋ฌ๊ธฐ๋ฅ์ด ์์ด๋ฉด ์์ ํ ๋๋ง๋ค ๋ถํ์ํ ์ถฉ๋๊ณผ ์ฌ์ด๋ ์ดํํธ(์๋ํ์ง ์์ ๊ฒฐ๊ณผ)๊ฐ ๋ฐ์ํด์ ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ง๋ค.
- SRP๋ฅผ ์ด๊ธฐ๋ฉด ๋ฉ์๋๊ฐ ๋ฉค๋ฒ๋ณ์๋ฅผ ๋ถ๋ถ์ ์ผ๋ก๋ง ์ฌ์ฉํ๊ฒ ๋์ด์ ์์ง๋๊ฐ ๋จ์ด์ง๊ฒ ๋๋ค.
- ์์ง๋: ํด๋์ค ๋ด๋ถ์ ์์(๋ณ์, ๋ฉ์๋)๋ค์ด ์ผ๋ง๋ ๋ฐ์ ํ๊ฒ ์๋ก ์ฐ๊ด๋์ด ์๋๊ฐ
- ์ฐ๊ด์ด ๋์ผ๋ฉด ๋ณ๊ฒฝ๋ง๋ค ๋งค๋ฒ ๋๊ณต์ฌ๋ฅผ ๊ฑฐ์น๊ฒ ๋๋ค.
- ์ฑ
์์ด๋, '๋์ผํ ๋น์ฆ๋์ค ๋ชฉ์ ์ ๊ฐ์ง ๊ธฐ๋ฅ๋ค์ ์งํฉ' ์
๋๋ค.
ex) ๊ณ์ฐ๊ธฐ ํด๋์ค์๋ง์ (),๋บ์ (),๊ณฑ์ ()์นดํ ๊ณ ๋ฆฌ
- "๊ธฐ์กด ์ฝ๋๋ ๊ฑด๋๋ฆฌ์ง ๋ง๊ณ (Closed), ์๋ก์ด ๊ธฐ๋ฅ๋ง ์ถ๊ฐ(Open)ํ ์ ์์ด์ผ ํ๋ค๋ ๋ป์ด๋ค."
- ์๋ฅผ๋ค๋ฉด ์๋ํ์ ๋ง์ถฐ์ ์ฝ๋ฉ์ ํ์ ๋ ์ฐจ๋ฅผ ํฌ๋ฅด์๋ก ๋ฐ๊ฟ๋ ์ ์ ๋์ํด์ผํ๋ค.
- ์ด๊ฑธ ์ํํ๊ธฐ ์ํด์ DI๋ผ๋ ๊ธฐ์ ์ด ์๋๋ฐ
DI๋ ๋ด๊ฐ ์ฌ์ฉํ ๋ฌผ๊ฑด์ ์ง์ ์์ฑํ์ง ์๊ณ ์ธ๋ถ์์ ์ฃผ์ ํด์ฃผ๋ ๊ฒ์ด๋ค.- ๋ฐ๋ผ์ ์ด์ ์๋ Car๋ผ๋ ์ธํฐํ์ด์ค๋ง ์๊ณ , ์ธ๋ถ์์ ์๋ํ๋ , ๋ถ๊ฐํฐ๋ ํฌ๋ฅด์๋ฅผ ๋ฃ์ด์ค๋ค. ๊ทธ๋ฌ๋ฉด ๊ฒฐํฉ๋๊ฐ ๋ฎ์์ง๊ฒ ๋๋ค.
- ๊ฒฐํฉ๋: ํ์ชฝ์ด ๋ณ๊ฒฝ๋ ๋ ๋ค๋ฅธ ์ชฝ์ด ์ผ๋ง๋ ์ํฅ์ ๋ฐ๋๊ฐ
- ๊ฒฐ๊ตญ ๊ฒฐํฉ๋๊ฐ ๋์ผ๋ฉด ์๋ํ์์ ๋ถ๊ฐํฐ๋ก ๋ณ๊ฒฝํ๋ฉด ์ด์ ์๊ฐ ์ผ์ ๋ชปํ๊ฒ ๋๋ค.
- ์์๋ฐ์ ์์ ํด๋์ค๊ฐ ๋ถ๋ชจ์ ์๋๋ฅผ ๋ง๊ฐ๋จ๋ฆฌ๋ฉด ์๋๋ค.
- ์์: List ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ArrayList๋ฅผ ์ฐ๋ค๊ฐ LinkedList๋ก ๋ฐ๊ฟ๋ ์ฝ๋๊ฐ ์ ์ ์๋ํด์ผ ํฉ๋๋ค. ๋ง์ฝ LinkedList๋ก ๋ฐ๊ฟจ๋๋ ๊ฐ์๊ธฐ ์๋ฌ๊ฐ ํฐ์ง๋ค๋ฉด LSP ์๋ฐ์ด๋ค.
- ๋ฒ์ฉ ์ธํฐํ์ด์ค ํ๋๋ณด๋ค ๊ตฌ์ฒด์ ์ธ ์ฌ๋ฌ ๊ฐ๊ฐ ๋ซ๋ค.
- ์์: ํ๋ฆฐํธ, ํฉ์ค, ์ค์บ ๊ธฐ๋ฅ์ ๋ฃ์ ํ๋ฆฐํฐ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค๋ฉด, ์ต์ ๊ธฐ๊ณ๋ ์๊ด ์์ง๋ง, ์๋ ๊ธฐ๊ณ๋ฅผ ๊ตฌํํ ๋ ์๋๋ ํฉ์ค, ์ค์บ๊น์ง ๋ชจ๋ ๊ตฌํํด์ผํ๋ ๋ฌธ์ ๊ฐ ์๊ธด๋ค.
- ์๋ฏธ: ๊ตฌํ ํด๋์ค(Concrete Class)๋ฅผ ์ง์ ๋ฐ๋ผ๋ณด์ง ๋ง๊ณ , ์ธํฐํ์ด์ค(Interface)๋ฅผ ๋ฐ๋ผ๋ด์ผํ๋ค.
- Spring์ DI(Dependency Injection)๊ฐ ์ด ์์น์ ๋ฐ๋ฆ
IoC๋ ํ๋ฆ์ ์ฃผ๋๊ถ์ด ์ค์ํ๋ฐ, ๋ด๊ฐ ์ฐ๊ณ ์ถ์ ๋ ํธ์ถํด์ ์ฐ๋๊ฒ ์๋๋ผ, ํ๋ ์์ํฌ๊ฐ ํ์ํ ๋ ๋ด๊ฐ ์ง ์ฝ๋๋ฅผ ํธ์ถํ๋ค๋ ์ค๊ณ ์์น์ด๋ค.DI๋ ํด๋์ค ๋ด๋ถ์์new๋ก ์ง์ ์์ฑํ๋๊ฒ ์๋๋ผ, ์์ฑ์ ๋ฑ์ ํตํด ์ธ๋ถ์์ ์ฃผ์ ๋ฐ๋IoC๋ฅผ ๊ตฌํํ ๋ฐฉ๋ฒ
AOP๋ ๊ด์ ์งํฅ ํ๋ก๊ทธ๋จ์ด๋ผ๊ณ ํ์ง๋ง, ๊ปด๋ฃ๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ด๋ผ๊ณ ๋ ํ๋ค.- ๋งค ํด๋์ค์ ๋งค ๋งค์๋์ ์๊ฐ์ธก์ ์ ํ๋ค๊ณ ๊ฐ์ ํ์ ๋, ํ์ผ์ด ๋์ด๋๊ณ , ๋ฉ์๋๊ฐ ๋์ด๋๋ฉด ์ฝ๋๊ฐ ์ง์ ๋ถํด์ง๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ๋ค.
CGLIB์ ์๋ณธ ํด๋์ค๋ฅผ ์์ํด์ ๊ฐ์ง ํ๋ก์๋ฅผ ๋ง๋ค์ด์, final ํด๋์ค๋ ์์์ด ์๋์ด AOP๋ฅผ ๋ชปํ๊ณ , ๋ด๋ถ ํธ์ถ์ด ์์ผ๋ฉด ์ค์ ๊ฐ์ฒด๊ฐ ํธ์ถ๋์ด ๋ฌด์๋๋ ๊ฒฝํฅ์ด ์๋ค- ๋ฐ๋ฉด์
JDK ๋ค์ด๋๋ฏน ํ๋ก์๋ ๋ฆฌํ๋ ์ ์ ์ฌ์ฉํ์ฌ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํ๋ก์ ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ค. ์ธํฐํ์ด์ค๊ฐ ํ์๊ณ , ์ธํฐํ์ด์ค์ ์ ์๋ ๋ฉ์๋๋ง ํ๋ก์๋ก ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
ํธ๋์ญ์ ๋ AOP๊ฐ ๋ฌด์์ด๊ณ , ํธ๋์ญ์ ๋ ์ด๋ ธํ ์ด์ ์ด ๋ด๋ถ์ ์ผ๋ก ์ด๋ป๊ฒ ๋์ํ๋์ง ์ค๋ช ํด ์ฃผ์ธ์.
- ํธ๋์ญ์
์ ์ฒ๋ฆฌํ ๋ AOP๊ฐ ์์ผ๋ฉด, ๋ชจ๋ ์๋น์ค ๋ฉ์๋๋ง๋ค
try-catch๋ฌธ์ ์์์DB ์ปค๋ฅ์ ์ ๊ฐ์ ธ์commit()์ด๋rollback()์ ํธ์ถํด์ผ ํฉ๋๋ค. - Spring์ด
@Transactional์ด ๋ถ์๋น(Bean)์ ๋ฐ๊ฒฌํ๋ฉด, ์ค์ ๊ฐ์ฒด ๋์ ์ด๋ฅผ ๊ฐ์ธ๋ํ๋ก์ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ๋น ์ปจํ ์ด๋์ ๋ฑ๋กํฉ๋๋ค.- ํด๋น ๋ฉ์๋ ์คํํ๋ฉด ํ๋ก์๊ฐ ๊ฐ๋ก์ฑ์
Transaction Advisor์ผ๋ก ํธ๋์ญ์ ์์ - ๋ด๋ถ์ ์ผ๋ก๋
TransactionManager๊ฐTransactionSynchronizationManager(์ค๋ ๋๋ก์ปฌ)๋ผ๋ ํด๋์ค๋ฅผ ํตํด ์ปค๋ฅ์ ์ ๊ฐ์ ธ์จ๋ค - ์คํ ์ปค๋ฐ์ false๋ก ํ๋ค.
- ๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌํ๋ค.
- ์ฑ๊ณต์ ์ปค๋ฐ, ์คํจ์ ๋กค๋ฐฑ
- ์์๋ฐ๋ฉ
- ํด๋น ๋ฉ์๋ ์คํํ๋ฉด ํ๋ก์๊ฐ ๊ฐ๋ก์ฑ์
- ํ๋ก์ธ์ค๋ ์คํ์ค์ธ ํ๋ก๊ทธ๋จ์ด๊ณ , ์ฐ๋ ๋๋ ํ๋ก์ธ์ค ๋ด์์ ์ค์ ์ฝ๋๋ฅผ ์คํํ๋ ํ๋ฆ์ด๋ค.
- ํ๋ก์ธ์ค๋ ํ๋ก์ธ์ค ๋ณ๋ก ๋ ๋ฆฝ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ(Code, Data, Stack, Heap)์ ๊ฐ์ง๊ณ , ํ๋ก์ธ์ค๊ฐ ํต์ ์ ์ํด์๋ IPC๋ผ๋๊ฒ ํ์ํ๋ค.
- ๊ทธ์ ๋นํด ์ฐ๋ ๋๋ Code, Data, Heap ์์ญ์ ๊ณต์ ํด์ ์ฌ๋ฌ ์์ ์ ๋ฒ๊ฐ์ ์คํํ๋ ๋์์ฑ๊ณผ, ํ๋ฒ์ ์ฌ๋ฌ ์์ ์ ์ฒ๋ฆฌํ๋ ๋ณ๋ ฌ์ฑ์ ๋ณด์ฅํด์ ์ฑ๋ฅ์ ๋์ธ๋ค.
- ์๋ก๋ค๋ฅธ ํ๋ก์ธ์ค๋ค์ด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํด ์ฌ์ฉํ๋ ํต๋ก์ด๋ค.
- OS๊ฐ ๋ณด์๊ณผ ์์ ์ฑ์ ์ํด ๊ฐ ํ๋ก์ธ์ค๋ง๋ค ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํด์ ์นจ๋ฒ์ด ๋ถ๊ฐ๋ฅํ์ง๋ง, ๊ฐ๋ฐํ ๋๋ ํ์ํด์ ๋ง๋ฆ
- ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํตํด ๋ ํ๋ก์ธ์ค์ ๊ณต์ฉ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ง๋ค์ด ์ค๋ค๋์ง, OS๊ฐ ๋ ํ๋ก์ธ์ค ์ฌ์ด์์ ํธ์ง๋ฅผ ๋์ ์ ๋ฌํด์ฃผ๋ ๋ฉ์์ง ํจ์ฑ๋ฐฉ๋ฒ๋ฑ์ด ์๋ค.
- ๊ฐ๊ธฐ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ ์ธ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ์ฒด๊ณ๋ ์์น๋ฑ์ด ๋ค ๋ค๋ฅธ๋ฐ, ์ด๊ฑธ ์ง์ ์ ์ผ๋ก ์ํตํ ์ ์์ด์
์ธํฐํ์ด์ค๋ก ์ด๋ฐ ๊ท์น์ผ๋ก ๋ํํ์๊ณ ์ ํด๋
- ์ฌ๋ฌ ์ค๋ ๋๊ฐ Heap ์์ญ์ด๋ ๋ฐ์ดํฐ ์์ญ์ ๊ณต์ ์์(์๊ณ์์ญ)์ ๋์์ ์ ๊ทผํด์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ ๋, ๊ฐ์ด ๊ผฌ์ผ ์ ์๋ค.
- ๋ฎคํ
์ค์ ์ธ๋งํฌ์ด
- ์ด์์ฒด์ ์์ ์์์ ์ ๊ทผํ ์ ์๋ ์ด์ ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐฉ์
- ๋ฎคํ ์ค: Mutual Exclusion(์ํธ ๋ฐฐ์ )์ ์ค์๋ง๋ก 1๋ช ์ด ์ด์ ๋ฅผ ๋ค๊ณ ๋ค์ด๊ฐ์ ๋ฌธ์ ์ ๊ทธ๊ณ , ๋์ฌ๋ ์ด์ ๋ฅผ ๋ฐ๋ฉํ๋ค.
- ์ธ๋งํฌ์ด: ์ ๋์ ์ด(Read)์ฉ
- volatile: CPU ์บ์๊ฐ ์๋๋ผ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์์ ์ง์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ฐ๋๋ก ๊ฐ์ ํ๋ ํค์๋
- CAS(=๋๊ด์ ๋ฝ, ์ํ ๋ฏน): ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ธฐ ์ ๋ถํฐ ๋๊ฐ ๊ฑด๋๋ฆด ์๋ ์์ผ๋ ์ผ๋จ ๋ฌธ๋ถํฐ ์ ๊ทธ๋ ์ผ๋ฐ์ ์ธ ๋ฝ(๋น๊ด์ ๋ฝ)๊ณผ ๋ค๋ฅด๊ฒ, ๊ฑด๋๋ฆฌ์ง ์์ ๊ฒ์ด๋ผ ์๊ฐํ๊ณ ๋ฌธ์ ์ ๊ทธ์ง์๊ณ ๊ณ์ฐํ ํ์, ๋ง์ง๋ง ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ ์ ๋ณ๊ฒฝ๋์ง ์์๋์ง ํ์ธํ๋ ๋ฐฉ๋ฒ( ๋ง์ฝ์ ๋๊ฐ ๊ฑด๋๋ ธ์ผ๋ฉด ์์ ์ทจ์๋จ )
- ConcurrentHashMap: ์ผ๋ฐ์ ์ธ Hashtable์ ์ฑํฌ๋ก๋์ด์ฆ๋ฅผ ๋ถ์ฌ์ ๋ฎคํ ์ค๋ฝ์ ์ฌ์ฉํ๋ ๋๊ฐ ๋ฐ์ดํฐ๋ฅผ ํ๋๋ง ๊ณ ์ณ๋, ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ๋ค ์ ๊ถ๋ฒ๋ฆฌ์ง๋ง, ์๋ ๊ตฌ์ญ๋ณ๋ก ๋๋ ์ ๋ง์ง๋ ๋ถ๋ถ๋ง ์ ๊ทผ๋ค. ํด์๋งต์ ์๊ฒ๋ ์์จ์ ๋ฉํฐ์ค๋ ๋์์ ์ฌ์ฉํ์ง ๋ชปํจ
- ์ฉ๋: ํจ์ ํธ์ถ ์ ์ฌ์ฉ๋๋ ์ง์ญ ๋ณ์, ๋งค๊ฐ๋ณ์ ๋ฑ์ด ์ ์ฅ๋๋ค.
- ๊ตฌ์กฐ:
LIFO(Last In, First Out)๊ตฌ์กฐ๋ก, ํจ์๊ฐ ๋๋๋ฉด ๋ฐ๋ก ๋ฉ๋ชจ๋ฆฌ์์ ์ฌ๋ผ์ง๋ค. - ์ปดํ์ผ ์์ ์ ํฌ๊ธฐ๊ฐ ๊ฒฐ์ ๋๋ค.
- ์ฉ๋:
newํค์๋๋ก ์์ฑ๋๋ ๊ฐ์ฒด๋ ๋ฐฐ์ด ๊ฐ์ ์ฐธ์กฐํ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ค. - ๊ตฌ์กฐ: ๊ฐ๋ฐ์๊ฐ ์ง์ ์ฐธ์กฐ๋ฅผ ๋์ด์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ๋ณดํ๊ฑฐ๋, ๊ฐ๋น์ง ์ปฌ๋ ํฐ(GC)๊ฐ ๊ด๋ฆฌํ๋ค.
- ๋ฐํ์(ํ๋ก๊ทธ๋จ ์คํ ์ค)์ ํฌ๊ธฐ๊ฐ ๊ฒฐ์ ๋๋ค.
- TCP/IP๋ ์ธํฐ๋ท์์ ๋ฐ์ดํฐ๋ฅผ ์์ ์ ์ผ๋ก ๋ณด๋ด๊ธฐ ์ํ ์ ์ฒด์ ์ธ ๊ท์น์ ๋ชจ์์ ๋๋ค. ๋จ์ํ ์ฐ๊ฒฐ๋ฟ๋ง ์๋๋ผ ๋ฐ์ดํฐ๋ฅผ ์ชผ๊ฐ๊ณ , ๋ณด๋ด๊ณ , ํ์ธํ๋ ์ ๊ณผ์ ์ ํฌ๊ดํฉ๋๋ค.
- ์ปค๋ฅ์
์๋ณ (5-Tuple): ์ฐ๊ฒฐ์ ๊ณ ์ ํ๊ฒ ์๋ณํ๊ธฐ ์ํด ๋ค์ 5๊ฐ์ง ์ ๋ณด๊ฐ ์ผ์นํด์ผ ํฉ๋๋ค.
- ์ถ๋ฐ์ง IP / ์ถ๋ฐ์ง ํฌํธ ๋ฒํธ / ๋ชฉ์ ์ง IP / ๋ชฉ์ ์ง ํฌํธ ๋ฒํธ /ํ๋กํ ์ฝ (TCP)
- ์ฃผ์ ์ฅ์ :
- ์ ๋ขฐ์ฑ(Reliable): ๋ฐ์ดํฐ ์ ์ค ์ ์ฌ์ ์ก์ ์์ฒญํฉ๋๋ค.
- ์์ ๋ณด์ฅ: ๋ฐ์ดํฐ๊ฐ ๋ค์์ฌ ๋์ฐฉํด๋ ์๋ ์์๋๋ก ์ ๋ ฌํฉ๋๋ค.
- ์ ์ด ๊ธฐ๋ฅ: ํ๋ฆ ์ ์ด(๋ฐ๋ ์ชฝ ์๋์ ๋ง์ถค), ํผ์ก ์ ์ด(๋คํธ์ํฌ ์ํ์ ๋ง์ถค)๋ฅผ ์ํํฉ๋๋ค.
- ์๋ฐฉํฅ ํต์ : ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ๋์์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์์ต๋๋ค.
- TCP์ ํน์ง์ธ '์ ๋ขฐ์ฑ'์ ํ๋ณดํ๊ธฐ ์ํด, ์ค์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ธฐ ์ ์๋๋ฐฉ๊ณผ ํต์ ์ค๋น๊ฐ ๋์๋์ง ์ธ ๋ฒ ์ฃผ๊ณ ๋ฐ์ผ๋ฉฐ ํ์ธํ๋ ๊ตฌ์ฒด์ ์ธ ๋จ๊ณ์ ๋๋ค.
- [SYN] ๋จ๊ณ: ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์๊ฒ "ํต์ ์์ํ ๊น? ๋ด ๋ฒํธ๋ ์ด๊ฑฐ์ผ(Sequence Number)"๋ผ๊ณ ์์ฒญ์ ๋ณด๋ ๋๋ค.
- [SYN + ACK] ๋จ๊ณ: ์๋ฒ๊ฐ ์์ฒญ์ ํ์ธํ๊ณ "์, ๋๋ ์ค๋น๋์ด! ๋ด ๋ฒํธ๋ ์ด๊ฑฐ๊ณ , ๋ค ๋ฒํธ ์ ๋ฐ์์ด(Acknowledgment Number)"๋ผ๊ณ ๋ตํฉ๋๋ค.
- [ACK] ๋จ๊ณ: ํด๋ผ์ด์ธํธ๊ฐ ๋ง์ง๋ง์ผ๋ก "ํ์ธ ์๋ฃ! ์ด์ ์ง์ง ๋ฐ์ดํฐ ๋ณด๋ผ๊ฒ"๋ผ๊ณ ๋ตํ๋ฉฐ ์ฐ๊ฒฐ์ด ์ต์ข ์ฑ๋ฆฝ๋ฉ๋๋ค.
- ์ง์ฐ ์๊ฐ(Latency): ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ธฐ๋ ์ ์ ์ต์ 3๋ฒ์ ์๋ณต์ด ํ์ํ์ฌ ๋ฌผ๋ฆฌ์ ์ธ ์๊ฐ์ด ์์๋ฉ๋๋ค.
- ๋ณด์ ์ทจ์ฝ์ (SYN Flooding): ๊ณต๊ฒฉ์๊ฐ SYN๋ง ๊ณ์ ๋ณด๋ด๊ณ ๋ง์ง๋ง ACK๋ฅผ ๋ณด๋ด์ง ์์ ์๋ฒ์ ์ฐ๊ฒฐ ๋ฆฌ์์ค๋ฅผ ๊ฝ ์ฑ์๋ฒ๋ฆฌ๋ ๊ณต๊ฒฉ์ ๋ ธ์ถ๋ ์ ์์ต๋๋ค.
ํฌ์จ์ด ํธ๋์ ฐ์ดํน์ ์ธ์ ์ฌ์ฉ๋๋ฉฐ, ๊ทธ ๊ณผ์ ์์ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ์ ์ ๋ฌด์์ธ๊ฐ์?
- 4-way-handshake์ ์ฐ๊ฒฐ์ข ๋ฃ์์ ์ฌ์ฉ๋๋ค.
FIN: ํด๋ผ์ด์ธํธ๊ฐ ์ด์ ๋ณด๋ผ๊ฑฐ ๋ค ๋ณด๋ACK: ์๋ฒ๊ฐ ์ผ๋จ ํ์ธํ๊ณ , ์ด์ ๋ณด๋ผ ๊ฒ ๋จ์์ผ๋ ์กฐ๊ธ ๊ธฐ๋ค๋ฆฌ๋ผ๋ Half-Close์ํ๊ฐ ๋จFIN: ์๋ฒ๊ฐ ๋จ์ ๋ฐ์ดํฐ๋ฅผ ๋ค ๋ณด๋ด๊ณ ๋์๋ ์๋ฏธ๋ก ๋ณด๋ACK: ํด๋ผ์ด์ธํธ๋ ํ์ธํจ
TIME_WAIT์ด๋ผ๊ณ ํด๋ผ์ด์ธํธ๊ฐ ๋ง์ง๋ง ACK์ ๋ณด๋ด๊ณ ์ง์ฐํจํท์ด ์ฌ ์ ์์ผ๋ฏ๋ก ๊ธฐ๋ค๋ฆฌ๊ฒ ๋๋ฉด์ ์ ๊น ์ ์ ํ๊ฒ ๋๋ค. (์์๋ญ๋น)- ๋ณดํต 2๋ถ ์ ๋ ๊ธฐ๋ค๋ฆผ
- ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์๊ฒ
ACK์ ๋ณด๋์ง๋ง ์ค๊ฐ์ ์ ์ค๋๋ฉด ์๋ฒ๋ ๊ณ์FIN์ ๋ณด๋ด๊ฒ ๋๋ค.TIME_WAIT์ํ ๋๋ถ์ACK์ด ์๊ฐ๋ค๋ ์ฌ์ค์ ์ ์ ์๊ฒ๋๋ค. ACK์ ๋ณด๋ด๊ณ ๋ซ์๋ค๊ฐ ๋์ค์ ์ ์ฐ๊ฒฐ์ ํ ๋ ๋ ๋๋ ํจํท์ด ๊ฐ์๊ธฐ ๋์ฐฉํด๋ฒ๋ ค์ ๋ฐ์ดํฐ๊ฐ ์ค์ผ๋จ
UDP๋ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฅ ๋์ง๊ณ , ํ์ธํ์ง ์์ ๋น ๋ฅด๋ค.(๊ฒ์, ์คํธ๋ฆฌ๋ฐ๋ฑ)TCP๋ 3way-handshake์ฐ๊ฒฐ์ ํตํด ์์ ํ ์ฐ๊ฒฐ์ ํ๊ณ , ์์๊ฐ ๋ฐ๋๊ฑฐ๋ ๋๋ฝ๋๋ฉด ๋ค์ ๋ณด๋ด๊ฒ๋๋ค. (์ด๋ฉ์ผ, ํ์ผ์ ์ก ๋ฑ)
HTTP 1.0์Keep-Alive๋ ๋นํ์ค ๊ธฐ๋ฅ์ด๋ผ์๋ฉ์ฒญํ ํ๋ก์๊ฐ ํค๋๋ฅผ ์๋ฒ์ ์ ๋ฌ๋ง ํ๊ณ ์์ ์ ์ฐ๊ฒฐ์ ๋์ด์ ํต์ ์ด ์ ๋์ง ์์๋ค.HTTP 1.1์์๋ ์ง์ ์ปค๋ฅ์ ์ ๊ท์ฝ์ผ๋ก ํ์คํํด์ ์ ์ฒด ๊ตฌ๊ฐ์์ ์ง์์ ์ผ๋ก ์ฐ๊ฒฐ์ ์ ์งํ๊ฒ ๋ง๋ค์๋ค.
- ์์์๋ ๋คํธ์ํฌ ํจํท์ด ์ ์ก๋์ง ๋ชปํ๊ณ ์์ด์ ๋ค์ ์๋ ํจํท๋ค ์ ์ฒด์ ์ ์ก์ด ์ง์ฐ๋๋ ๊ฒ
- HTTP/1.1์ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ฒญ ํ๋๋ฅผ ๋ณด๋ด๋ฉด ์๋ต์ด ์ฌ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ์ต๋๋ค. ์ด๋ฅผ ๊ทน๋ณตํ๋ ค๊ณ
ํ์ดํ๋ผ์ด๋(Pipelining)์ ๋์ ํ์ฃ .- ํ์ดํ๋ผ์ด๋: ์๋ต์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ , ์์ฒญ์ ์ฌ๋ฌ๊ฐ ์ฐ์์ผ๋ก ๋ณด๋ด๋ ๊ฒ
- ์์ฒญ์ ํ๋ฒ์ ์ฌ๋ฌ๊ฐ ๋ณด๋ด๋, ์๋ฒ๋ ๋ฐ์ ์์๋๋ก ์๋ตํด์ผ๋๋๊น, ์ฒซ ๋ฒ์งธ ๋ฐ์ดํฐ๊ฐ ๋๋ฌด ํฌ๋ฉด ๋ค์ ๊ฐ๋ฒผ์ด ๋ฐ์ดํฐ๋ค๊น์ง ๋๋ ค์ง๋
HTTP๋ ๋ฒจ์ HOL ๋ฐ์
- HTTP๋ ๋ฒจ์ HOL ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ ์ ๋จ์๋ก ์ชผ๊ฐ์ ๋ฌด์์๋ก ๋ณด๋(๋ฉํฐํ๋ ์ฑ
Multiplexing) - ํ์ง๋ง TCP ํ๋กํ ์ฝ๋ก ์ ์กํ๋ค๋ณด๋, 1๋ฒ์ ์กฐ๊ฐ์ด ๋ชจ๋ ๋ค ์ฌ๋๊น์ง 2๋ฒ์ดํ๋ก๋ถํฐ ๋ค ๊ธฐ๋ค๋ฆฌ๋
TCP ๋ ๋ฒจ์ HOL์ ๊ฑธ๋ฆผ
- ์์
TCP ๋ ๋ฒจ์ HOL์ ํด๊ฒฐํ๊ธฐ ์ํด ๊ตฌ๊ธ์์ QUIC์ด๋ผ๋ UDP๊ธฐ๋ฐ์ผ๋ก ์ฌ๋ฌ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ๋ ๋ ๋ฆฝ์ ์ธ ํต๋ก๋ก ๋ณด๋ด์ ํต๊ณผํ๋ฉด ๋ธ๋ผ์ฐ์ (์ ํ๋ฆฌ์ผ์ด์ )์ผ๋ก ์ฌ๋ฆฌ๊ณ , ๋น ์ง ๋ฐ์ดํฐ๋ ๋ค์ ์์ฒญํ๊ฒ ๋๋ค.
TCP์ ์ฑ๋ฅ๊ณผ ๊ด๋ จ๋ ์ฃผ์ ์ด์์ ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ์๊ณ ๋ฆฌ์ฆ์๋ ์ด๋ค ๊ฒ๋ค์ด ์๋์?
- ์ง์ฐ ์๊ฐ: ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ธฐ ์ ์ 3-way-handshake๋ฅผ ํด์ผํ๋ฏ๋ก ์ฐ๊ฒฐํ๋๋ฐ ์ค๋๊ฑธ๋ฆฐ๋ค.
- ํผ์ก: ๋คํธ์ํฌ ํต๋ก๊ฐ ์ข์์ง๋ฉด ํจํท์ ์์ด๋ฒ๋ฆฌ๊ณ , ์ฌ์ ์กํ๋ฉด์ ์๋๊ฐ ๋๋ ค์ง๋ค.
- HOL Blocking: ํจํท ํ๋๊ฐ ์ ์ค๋๋ฉด ๊ทธ ๋ค์ ํจํท๋ค์ด ์ ๋์ฐฉํด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ฌ๋์ง ๋ชปํ๊ณ ๊ธฐ๋ค๋ ค์ผํ๋ค.
- ๋คํธ์ํฌ ๋ด์ ์ ์กํ๋ ํจํท์ ์๊ฐ ๋๋ฌด ๋ง์์ ธ์ ์ ์ก์๋๊ฐ ๋ฆ์ด์ง๋๊ฑธ ๋ง์
- Slow Start: ์ฒ์์๋ ์กฐ๊ธ์ฉ ๋ณด๋ด๋ฉด์ ์ฑ๊ณต์ ์๋ฏธ๋ก ACK์ ๋ฐ์ผ๋ฉด 2๋ฐฐ์ฉ ๋๋ฆฌ๋ฉด์ ๋ณด๋
- ์ก์ ์์ ์์ ์์ ๋ฉ๋ชจ๋ฆฌ๋ ๋ฒํผ์ ์ฌ์ด์ฆ๋ฅผ ๋ณด๊ณ ์ฌ์ ๊ฐ ์๋์ง ์๋์ง๋ฅผ ๋ณด๊ณ ์๋์ฐ ์ฌ์ด์ฆ๋ฅผ ์กฐ์ ํ๊ฑฐ๋, ack์ด ์ฌ๋๊น์ง ๋ฌด์กฐ๊ฑด ๋ฉ์ถฐ์ ๊ธฐ๋ค๋ฆผ
- ํ ๋ฒ์ ๋ง์ด ๋ณด๋ด์ ๋คํธ์ํฌ๊ฐ ํฐ์ง๋, ๋คํธ์ํฌ ํผ์ก ๋ฐฉ์ง๋ฅผ ๋ชฉ์ ์ผ๋ก ํ๋ค.
- ์ด๊ธฐ ์ ์ก์๋๊ฐ ๋๋ฆฌ๋ค.
- ์์ ํจํท์ ๋๋ฌด ๋ง์ด ๋ณด๋ด์ ๋์ญํญ์ด ๋ญ๋น๋๋, ๋คํธ์ํฌ ๋์ญํญ ๋ญ๋น๋ฅผ ๋ฐฉ์งํ๋ ๋ชฉ์ ์ผ๋ก ํ๋ค.
- ACK์ ๊ธฐ๋ค๋ฆฌ๋๋ฐ ์ง์ฐ์๊ฐ์ด ๋ฐ์ํ๋ค.
DispatcherServlet(์์ฒญ ๋ฐ์) > HandlerMapping(์ฒ๋ฆฌํ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฐพ์) > HandlerAdapter(์ปจํธ๋กค๋ฌ ์คํ ๋๊ตฌ๋ฅผ ์ฐพ์) > Controller(๋น์ฆ๋์ค ๋ก์ง ์ํ) > ViewResolver(ํ๋ฉด ์ค๋น) > DispatcherServlet(๊ฒฐ๊ณผ๋ฌผ ๋ฐ์) > HTTP ์๋ต
์ฌ๋ฌ ๊ฐ์ง ์ผ์ 'ํ๋์ ๋ฉ์ด๋ฆฌ'๋ก ๋ฌถ๋ ๊ฒ์ผ๋ก, ๋ฌด์กฐ๊ฑด ๋ค ๊ฐ์ด ์ฑ๊ณตํ๊ฑฐ๋ ๋ค ๊ฐ์ด ์ทจ์๋์ด์ผ ํฉ๋๋ค.
- ๊ณผ๊ฑฐ์๋ DB ์์
์ ์ํด Connection ๊ฐ์ฒด๋ฅผ ๋ชจ๋ ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌํด์ผ ํ๋๋ฐ, ์ฝ๋๊ฐ ๋๋ฌด ์ง์ ๋ถํด์ง๋ฏ๋ก, ์ปค๋ฅ์
๊ฐ์ฒด๋ฅผ
ThreadLocal์ ๋ฃ์ด๋๊ณ , ์ปค๋ฅ์ ์ด ํ์ํ ๋๋ง๋ค ๊บผ๋ด์ฐ๋๋ก ๋ง๋ ๊ฒ
- ํธ๋์ญ์ ๋ด์ ์์ ์ ๋ชจ๋ ์ฑ๊ณตํ๊ฑฐ๋, ์๋๋ฉด ์์ ์๋ ์ผ์ฒ๋ผ ์คํจํด์ผํ๋ค.
- A์ ์๊ณ ์์ 1๋ง ์์ ๋บ๋๋ฐ, B์ ๊ณ์ข์ ๋ฃ๋ ๊ณผ์ ์์ ์๋ฌ๊ฐ ๋ฌ์ผ๋ฉด A์ ๋๋ ์์๋ณต๊ตฌ ๋์ด์ผํ๋ค.
- '์๊ณ ๋ 0์ ๋ฏธ๋ง์ด ๋ ์ ์๋ค'๋ ์ ์ฝ์กฐ๊ฑด์ด ์๋ค๋ฉด, ์๊ณ ๊ฐ ๋ถ์กฑํ ์ฌ๋์ ์ก๊ธ ํธ๋์ญ์ ์ ์์ ๊ฑฐ๋ถ๋์ด์ผ ํ๋ค.
- ํธ๋์ญ์ ์ด ์ฑ๊ณต์ ์ผ๋ก ๋๋๋ฉด, ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ธ์ ๋ ์ผ๊ด๋ ์ํ(๊ท์น์ด ์ง์ผ์ง ์ํ)์ฌ์ผ ํ๋ค.
- ์ฌ๋ฌ ํธ๋์ญ์ ์ด ๋์์ ์คํ๋ ๋, ์๋ก์ ์์ ์ ๊ฐ์ญํ๋ฉด ์๋๋ค. ๋ง์น ํผ์ ์คํ๋๋ ๊ฒ์ฒ๋ผ ๊ฒฉ๋ฆฌ๋์ด์ผ ํ๋ค.
- A๊ฐ ํต์ฅ ์๊ณ ๋ฅผ ์กฐํํ๊ณ ์๋ ๋์ค์, B๊ฐ ๊ทธ ํต์ฅ์ ๋์ ์ถ๊ธํด๋ฒ๋ ค์ A๊ฐ ์๋ฑํ ์์ก์ ๋ณด๊ฒ ๋ง๋ค๋ฉด ์๋๋ค.
- ํธ๋์ญ์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ(Commit)๋์๋ค๋ฉด, ๊ทธ ๊ฒฐ๊ณผ๋ ์๊ตฌ์ ์ผ๋ก ๋ฐ์๋์ด์ผ ํ๋ค.
- ์ด์ ์๋ ๋ฝ์ด ๊ฑธ๋ ค์์ผ๋ฉด ์ฐ๋ ์ค์ ์ฝ๋๊ฒ ๋ถ๊ฐ๋ฅํด ์ง์ฐ์ด ๋ง์ด ๋ฐ์ํ๋ค. ๋ฐ๋ผ์
MVCC๋Undo ๋ก๊ทธ๋ฅผ ์ด์ฉํด ์ฐ๊ธฐ ์ค์๋ ์ฝ๊ธฐ๋ฅผ ํ์ฉํจ์ผ๋ก์จ, ๋ฝ(Lock) ์์ด ๋ฐ์ดํฐ์ ๊ณผ๊ฑฐ ๋ฒ์ ์ ์กฐํํ๊ฒ ๋ง๋๋ ๊ธฐ์ ์ด๋ค.
- ์คํ ์ทจ์์: ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ์ด์ ๊ฐ์ ์ธ๋๋ก๊ทธ์ ๊ธฐ๋กํ๊ธฐ ๋๋ฌธ์, ์ฟผ๋ฆฌ ์คํ ์ค ์๋ฌ๊ฐ ๋ฐ์ํ๊ฑฐ๋,
Rollback์ ์ฌ์ฉ๋๋ค. - MVCC์์ ๊ณผ๊ฑฐ ๋ฒ์ ๋ณด์ฌ์ค ๋: ํธ๋์ญ์ ์ด ๋ฐ์ดํฐ๋ฅผ ์์ ์ค์ผ ๋, ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ฉด ์์ ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ค
- ์ฅ์ ๋ณต๊ตฌ์: ์์คํ
์ด
COMMIT์ด์ ์ ์ข ๋ฃ๋๋ฉด ๋ค์ ์์๋ ๋, Redo๋ฅผ ํตํด ๋ง์ง๋ง ์ํ๋ฅผ ๋ง๋ค๊ณ , ์ปค๋ฐ๋์ง ์์ ์ธ๋ ๋ก๊ทธ๋ฅผ ์ฐธ์กฐํ์ฌ ๋ชจ๋ ๋กค๋ฐฑ์ํจ๋ค.
ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ๋ ๋ฒจ 4๊ฐ์ง๋ฅผ ์ค๋ช ํ๊ณ ๊ฐ ๋ ๋ฒจ์์ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ๋ฅผ ๋ง์ํด ์ฃผ์ธ์.
READ UNCOMMITTED(์ปค๋ฐ๋์ง ์์ ์ฝ๊ธฐ)- ๋ค๋ฅธ ํธ๋์ญ์ ์ด ์์ ํ ํ ์์ง ์ปค๋ฐํ์ง ์์ ๋ฐ์ดํฐ๋ ์ฝ์ ์ ์๋ค.
Dirty Read๊ฐ ๋ฐ์ํ ์ ์๋ค.- A๊ฐ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ณ ์ปค๋ฐํ์ง ์์๋๋ฐ B๊ฐ ๊ทธ ๊ฐ์ ์ฝ์. ๋ง์ฝ A๊ฐ ๋กค๋ฐฑํ๋ฉด B๋ ์กด์ฌํ์ง๋ ์๋ ๊ฐ์ง ๋ฐ์ดํฐ๋ฅผ ๋ค๊ณ ์๊ฒ ๋จ.
READ COMMITTED(์ปค๋ฐ๋ ์ฝ๊ธฐ)- ์ปค๋ฐ์ด ์๋ฃ๋ ๋ฐ์ดํฐ๋ง ์ฝ์ ์ ์์ต๋๋ค. Oracle์ ๊ธฐ๋ณธ๊ฐ์ด๋ฉฐ,
MVCC(Undo ๋ก๊ทธ)๋ฅผ ์ฌ์ฉํด ์ปค๋ฐ ์ ์๋ ์ด์ ๊ฐ์ ๋ณด์ฌ์ค๋ค. Non-Repeatable Read๊ฐ ๋ฐ์ํ ์ ์๋ค.- ํ ํธ๋์ญ์ ๋ด์์ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ฒ ์คํํ๋๋ฐ, ๊ทธ ์ฌ์ด์ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ๊ฐ์ ์์ /์ปค๋ฐํ๋ฉด ๋ ๋ฒ์ ์กฐํ ๊ฒฐ๊ณผ๊ฐ ๋ค๋ฅด๊ฒ ๋ํ๋จ.
- ์ปค๋ฐ์ด ์๋ฃ๋ ๋ฐ์ดํฐ๋ง ์ฝ์ ์ ์์ต๋๋ค. Oracle์ ๊ธฐ๋ณธ๊ฐ์ด๋ฉฐ,
REPEATABLE READ(์ผ๊ด๋ ์ฝ๊ธฐ)- ์์ ์ ํธ๋์ญ์ ์ด ์์๋๊ธฐ ์ ์ ์ปค๋ฐ๋ ๋ด์ฉ๋ง ์ฝ์ต๋๋ค. InnoDB์ ๊ธฐ๋ณธ๊ฐ์ ๋๋ค.
- InnoDB๊ฐ ์์ฐจ์ ์ผ๋ก ์ฆ๊ฐํ๋ ํธ๋์ญ์ ๊ณ ์ ๋ฒํธ๋ฅผ ๋น๊ตํด ์์ ๋ณด๋ค ๋ฆ์ ๋ฒํธ์ ๋ฐ์ดํฐ๋ Undo ๋ก๊ทธ๋ฅผ ํตํด ๋ด ๋ฒํธ๋ณด๋ค ์ด์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ค.
Phantom Read๊ฐ ๋ฐ์ํ ์ ์๋ค.- InnoDB์ ๋ก์ฐ ๋ฝ์ ์ค์กดํ๋ ํ๋ง ์ ๊ถ '๋น ๊ณต๊ฐ'์ ๋ฐฉ์ดํ์ง ๋ชปํ๋ฉฐ, ์๋ก ์ฝ์ ๋ ํ์ '์ด์ ๊ธฐ๋ก(Undo)'์ด ์กด์ฌํ์ง ์์ ํํฐ๋ง๋์ง ์๊ณ ์ ๋ น์ฒ๋ผ ๋ํ๋๋ค.
- ๊ทธ๋์ ๊ฐญ๋ฝ(๋น ๊ณต๊ฐ์ ์ ๊ธ), ๋ฅ์คํธ ํค ๋ฝ(๋ ์ฝ๋+๊ฐญ ๋ฝ)์ ์ฌ์ฉํด์ ๋น ๊ณต๊ฐ์ ๋ค ์ ๊ถ ๊ฑฐ์ ๋ฐ์ํ์ง ์๋๋ค.
SERIALIZABLE(์ง๋ ฌํ ๊ฐ๋ฅ)- ์ ์ผ ๊ฐํ ๊ฒฉ๋ฆฌ ์์ค์ ๋๋ค. ์ฝ๊ธฐ ์์ ์๋ ๊ณต์ ์ ๊ธ(Shared Lock)์ ๊ฑธ์ด, ๋ค๋ฅธ ํธ๋์ญ์ ์ด ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ ๋ ์์ ํ๊ฑฐ๋ ์ฝ์ ํ ์ ์๊ฒ ๋ง๋ญ๋๋ค.
- ๋๋ฆฌ๋ค.
- ์ธ๋ฑ์ค๊ฐ ์์ผ๋ฉด ํ ์ด๋ธ ํ ์ค์บ์ ๋๋ฆฌ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๊ฐ ๋์ด๋ ์๋ก ์กฐํ๊ฐ ๋๋ ค์ง๋ค.
- ๊ทธ๋์ B(Balanced)-Tree๋ฅผ ๋์ ํด์ ํญ์ ์ ๋ ฌ๋ ์ํ๋ก ์ ์งํด์ ๊ฐ์ ์ฐพ์๋ ํ์ค์บ(O(N)์ ํ๋ ๋์ ์, O(logN)์ ์๋๋ก ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ์ ์๋ค.
- ๊ธฐ์์ฑ(์นด๋๋๋ฆฌํฐ)์ด ๋์ ๊ฐ์ ์ฐพ์์ผ ํ๋ค. (๊ธฐ์์ฑ์ด ๋์ผ๋ฉด ๊ฐ์ ์ข ๋ฅ๊ฐ ๋ง๊ณ ์ค๋ณต์ด ์ ์) ex) ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ, ID, email๋ฑ
- CUD๋ ๋งค๋ฒ ์ ๋ ฌ์ ํด์ผํด์ R์ ์ํด ํฌ์์ํค๋ ๊ตฌ์กฐ์
- ์ธ๋ฑ์ค๊ฐ ๋๋ฌด ๋ง์ผ๋ฉด ์ตํฐ๋ง์ด์ ๊ฐ ์ด๋ค ์ธ๋ฑ์ค๋ฅผ ์ธ์ง ๊ณ ๋ฏผํ๊ณ , ์คํ๊ณํ์ ์ธ์ฐ๋๋ผ ์๊ฐ์ด ๋ง์ด๊ฑธ๋ฆฐ๋ค.
- ๋ฐ๋ผ์ ์กฐ๊ฑด์ ์ ์์ฃผ ๋ฑ์ฅํ๊ฑฐ๋, ๋ฐ์ดํฐ ์์ ๋ณด๋ค ์กฐํ๊ฐ ๋ง๊ณ , ๋ฐ์ดํฐ ๊ท๋ชจ๊ฐ ํด ๋ ์ฌ์ฉํด์ผํ๋ค.
- ์กฐ๊ฑด์ ๋ก ์กฐํํ๋ฉด DB๋ ํ ์ด๋ธ ๋์ B-Tree ์ธ๋ฑ์ค๋ฅผ ๋จผ์ ๋ณด๊ณ , ๋ฃจํธ ๋ ธ๋์์ ํด๋น ์์น์ ๋ฆฌํ ๋ ธ๋ ์ฃผ์๋ฅผ ์ฐพ์๊ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํจ
์ด์งํธ๋ฆฌ๋ ์์ ๋ ธ๋๊ฐ ์ต๋ 2๊ฐ,B-Tree๋ M๊ฐ์ด์งํธ๋ฆฌ๋ ์์ ๋ ธ๋๊ฐ ์ถ๊ฐ๋๋ฉด ์ ์๋๋ก ๊ธธ์ด์ง๊ณ (๋ฐ์ดํฐ๊ฐ ,B-Tree๋ ์์์ผ๋ก ๋ฑ๋ฑํด์ง
- ํด๋ฌ์คํฐ๋ ์ธ๋ฑ์ค๋ ํ๋ผ์ด๋จธ๋ฆฌ ํค(PK)๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฐ์ด ๊ฐ๊น์ด ๋ ์ฝ๋๋ค์ ๊ฐ์ ๋ฐ์ดํฐ ํ์ด์ง์ ๋ฌถ์ด ์ ์ฅํ๊ณ , ์ธ๋ฑ์ค์ ๋ฆฌํ ๋
ธ๋์ ์ค์ ๋ ์ฝ๋๊ฐ ๋ค์ด ์๋ ๊ตฌ์กฐ์
- InnoDB๋ ๋ฐ์ดํฐ ํ์ด์ง ์ฃผ์ ๋์ ๋ ์ฝ๋ ์์ฒด๋ฅผ ํด๋ฌ์คํฐ๋ ์ธ๋ฑ์ค ๋ฆฌํ์ ์ ์ฅํจ์ผ๋ก์จ ๋ถํ์ํ ์ถ๊ฐ I/O๋ฅผ ์ค์ธ๋ค.
- ํด๋ฌ์คํฐ๋ ์ธ๋ฑ์ค์์ PK ๋ณ๊ฒฝ์ ๋จ์ ์ ๋ฐ์ดํธ๊ฐ ์๋๋ผ ๋ฐ์ดํฐ ์ฌ๋ฐฐ์น์ ์ ์ฒด ์ธ๋ฑ์ค ๊ฐฑ์ ์ ๋๋ฐํ๋ ๊ณ ๋น์ฉ ์์ ์ด๋ค.
- PK๊ฐ ์์ผ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋ผ์ด๋จธ๋ฆฌ ํค ๊ธฐ์ค
- Not Null ์ต์ ์ ์ ๋ํฌ ์ธ๋ฑ์ค ์ค ์ฒซ๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ ํด๋ฌ์คํฐ๋ง ํค๋ก ์ ํ
- ๊ทธ๊ฑฐ ๋ง์ ์์ผ๋ฉด ์๋์ผ๋ก ์ ๋ํฌํ ๊ฐ์ ๊ฐ์ง๋๋ก ์ฆ๊ฐํ๋ ์นผ๋ผ์ ๋ด๋ถ์ ์ผ๋ก ์ถ๊ฐํจ
์ฅ์ - PK๋ก ๊ฒ์ํ ๋ ์ฒ๋ฆฌ ์ฑ๋ฅ์ด ๋น ๋ฅด๋ค. (ํนํ ๋ฒ์ ๊ฒ์์ด ๋น ๋ฆ)
- ์ปค๋ฒ๋ง ์ธ๋ฑ์ค๋ก ๋ฐ๋ก ์ฒ๋ฆฌ๊ฐ๋ฅ
๋จ์ - ํด๋ฌ์คํฐ๋ง ํค ๊ฐ์ด ํด์๋ก ์ ์ฒด์ ์ผ๋ก ์ธ๋ฑ์ค๊ฐ ์ปค์ง(์ธ์ปจ๋๋ฆฌ, ํ๋ผ์ด๋จธ๋ฆฌํค)
- ์ธ์ปจ๋๋ฆฌ๋ฅผ ํตํด PK๋ฅผ ํ ๋ฒ ๋ ์กฐํํด์ผํด์ ์ฑ๋ฅ์ด ๋๋ฆผ
- Insert์์ ํ๋ผ์ด๋จธ๋ฆฌ ํค์ ์ํด ๋ ์ฝ๋ ์ ์ฅ ์์น๊ฐ ๊ฒฐ์ ๋์ด์ ๋๋ฆผ(์์ ์์๋ ์ญ์ ์ฝ์ ์ด๋ผ ๋๋ฆผ)
- ์ฝ์
์ด์: ๋ฐ์ดํฐ๋ฅผ ์ฝ์
ํ๊ธฐ ์ํด ๋ถํ์ํ ์ ๋ณด๊น์ง ํจ๊ป ์
๋ ฅํด์ผ ํ๋ ์ํฉ
- ํ์์ด ์๊ฐ ์ ์ฒญ์ ์ ํ๋ฉด ํ์ ์ ๋ณด ์์ฒด๋ฅผ ๋ฑ๋กํ์ง ๋ชปํจ.
- ๊ฐฑ์ ์ด์: ์ค๋ณต๋ ๋ฐ์ดํฐ ์ค ์ผ๋ถ๋ง ์์ ๋์ ๋ฐ์ดํฐ ๊ฐ ๋ถ์ผ์น๊ฐ ๋ฐ์ํ๋ ์ํฉ
- ์ฌ์ฉ์์ ์ฃผ์๊ฐ ๋ฐ๋์๋๋ฐ, 10๊ฐ์ ์ฃผ๋ฌธ ๊ธฐ๋ก ์ค 5๊ฐ๋ง ์์ ๋จ.
- ์ญ์ ์ด์: ์ ๋ณด๋ฅผ ์ญ์ ํ ๋ ์ ์ง๋์ด์ผ ํ ๋ค๋ฅธ ์ ๋ณด๊น์ง ์ฐ์์ ์ผ๋ก ์ญ์ ๋๋ ์ํฉ.
- ๊ฐ์ ์๊ฐ ๊ธฐ๋ก์ ์ง์ ๋๋ฐ ํ์์ ๊ฐ์ธ์ ๋ณด๊น์ง ๊ฐ์ด ๋ ์๊ฐ.
- ์ 1์ ๊ทํ: ๋ชจ๋ ์นธ์๋ ํ๋์ ๊ฐ๋ง ๋ค์ด๊ฐ์ผํ๋ค.
- ์ 2์ ๊ทํ: ๊ธฐ๋ณธํค์ ์ผ๋ถ๋ถ์๋ง ์์กดํ๋ ์ด์ด ์์ด์ผํ๋ค.(๋ถ๋ถ ํจ์ ์ข ์ ์ ๊ฑฐ)
- ์ 3์ ๊ทํ: ๊ธฐ๋ณธํค๊ฐ ์๋ ์ด๋ผ๋ฆฌ ์์กดํ๋ ๊ด๊ณ๊ฐ ์์ด์๋ ์๋๋ค.(A->B, B->C๋ผ๋ ์ดํ ์ข ์์ ์ ๊ฑฐํด์ผํ๋ค.)
ํธ๋์ญ์ ์ด๋ ธํ ์ด์ ์ด JPA, MyBatis ๋ฑ์์ ๋ณ๊ฒฝ ์์ด ๋์ ๊ฐ๋ฅํ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์?
- ์คํ๋ง์ด ํธ๋์ญ์ ์ถ์ํ๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ด๋ค.
- ์ด๋ค DB๊ฐ ๋ค์ด์ค๋
PlatformTransactionManager๋ผ๋ ์ฝ์์ด ์๋ค. - ์ด๋ค ๊ธฐ์ ์ด๋ ํธ๋์ญ์
์์์
getTransaction(), ์ปค๋ฐ์commit(), ๋กค๋ฐฑ์rollback() - ๊ทธ๋ฌ๋ฉด JPA๋ ์ํฐํฐ๋งค๋์ ์ฐ๊ณ , ๋ง์ด๋ฐํฐ์ค๋ ์ปค๋ฅ์ ์
- ์๋ฆฌ์ฌ A์ B๊ฐ ์๊ณ , ์ฃผ๋ฐฉ์๋
์นผ๊ณผ๋๋ง๊ฐ ๋ฑ ํ๋์ฉ๋ง ์์
- ์๋ฆฌ์ฌ A๊ฐ ์นผ์ ๋จผ์ ์ง์์ต๋๋ค. (Lock 1)
- ๊ทธ์ฌ์ด ์๋ฆฌ์ฌ B๊ฐ ๋๋ง๋ฅผ ์ง์์ต๋๋ค. (Lock 2)
- ์๋ฆฌ์ฌ A๋ ์ด์ ๋๋ง๊ฐ ํ์ํ๋ฐ, B๊ฐ ๋ค๊ณ ์์ด์ ๊ธฐ๋ค๋ฆฝ๋๋ค.
- ์๋ฆฌ์ฌ B๋ ์ด์ ์นผ์ด ํ์ํ๋ฐ, A๊ฐ ๋ค๊ณ ์์ด์ ๊ธฐ๋ค๋ฆฝ๋๋ค.
- ๊ฒฐ๊ณผ: ๋ ์๋ฆฌ์ฌ๋ ์๋ก์ ๋๊ตฌ๋ฅผ ์์ํ ๊ธฐ๋ค๋ฆฌ๋๋ฐ ์ด๊ฒ ๊ต์ฐฉ์ํ์ด๋ค.
- ์๋์ 4๊ฐ๊ฐ ๋์์ ๋ง์กฑ๋์ด์ผํจ
- ์ํธ ๋ฐฐ์ : ์์์ ํ ๋ฒ์ ํ ํ๋ก์ธ์ค๋ง ์ด์ฉํ ์ ์๋ค. ( ์นผ ํ๋๋ฅผ ๋๋ช ์ด์ ์ก๊ณ ์ฐ ์ ์์ )
- ์ ์ ์ ๋๊ธฐ: ์์์ ๊ฐ์ง ์ํ์์ ๋ค๋ฅธ ์์์ ๊ธฐ๋ค๋ฆฐ๋ค. ( A๋ ์นผ๋ ์ฑ๋ก ๋๋ง๊ฐ ๋์ค๊ธธ ๊ธฐ๋ค๋ฆฐ๋ค. )
- ๋น์ ์ : ๋จ์ด ๊ฐ์ง ์์์ ๊ฐ์ ๋ก ๋บ์ ์ ์๋ค. ( A๊ฐ B์ ๋๋ง๋ฅผ ๋บ์ง๋ชปํจ )
- ํํ๋๊ธฐ: ๋๊ธฐ ๊ด๊ณ๊ฐ ์์ ์ด๋ฃฌ๋ค. ( A๋ B๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ B๋ A๋ฅผ ๊ธฐ๋ค๋ฆผ )
- ๋ฆฌ๋๋ฝ: ๋ด๊ฐ ์ฝ์ ๋, ๋จ์ด์์ ์ฝ๋๊ฑด ๋์ง๋ง ์ฐ๋๊ฑด ์๋๋ค.
- ์ฐ๊ธฐ๋ฝ: ๋ด๊ฐ ์์ ํ๊ฑฐ๋ ์ฐ๊ณ ์์ ๋, ๋จ์ ์ฝ๊ฑฐ๋ ์ฐ๋๊ฒ ๋ถ๊ฐ๋ฅํ๋ค.
-
๋ง์คํฐ(Master): ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์ฌํญ์ ์์ ์ Binlog์ ๊ธฐ๋ก
-
์ฌ๋ ์ด๋ธ(Slave)์ I/O ์ค๋ ๋: ๋ง์คํฐ์ Binlog๋ฅผ ์ฝ์ด์์ ์ฌ๋ ์ด๋ธ ์๋ฒ์ Relay Log์ ์ ์ฅ
-
์ฌ๋ ์ด๋ธ(Slave)์ SQL ์ค๋ ๋: Relay Log์ ๊ธฐ๋ก๋ ์ฝ์ด ์ค์ DB์์ง์ ์ฟผ๋ฆฌ๋ฅผ ์คํํจ
-
์ฌ๋ ์ด๋ธ๊ฐ ๊ณผ๋ถํ๊ฐ ์ค๋ฉด ๋ง์คํฐ๊ฐ ๊ณ์ ๋ฐ์ดํฐ๋ฅผ pushํ๋ฉด ํฐ์ง ์๋ ์์ด์ ํด๋ง์ผ๋ก ์ฌ์ฉํจ
EnumType.ORDINAL์ ์ฐ์ง ๋ง๊ฒ: ๊ธฐ๋ณธ๊ฐ์ผ๋กEnum์ ์์(0, 1, 2...)๋ฅผ DB์ ์ ์ฅํฉ๋๋ค. ๋์ค์ Enum ์ฌ์ด์ ์๋ก์ด ๊ฐ์ด ์ถ๊ฐ๋๋ฉด ๊ธฐ์กด ๋ฐ์ดํฐ์ ์๋ฏธ๊ฐ ์์ ํ ๋ค์์ฌ๋ฒ๋ฆฌ๋ ๋์ฐธ์ฌ๊ฐ ์ผ์ด๋ฉ๋๋ค.EnumType.STRING์ ์จ์ผํจ:Enum์ ์ด๋ฆ์ ๋ฌธ์์ด ๊ทธ๋๋ก ์ ์ฅํฉ๋๋ค. ๋ฐ์ดํฐ ํฌ๊ธฐ๋ ์กฐ๊ธ ๋ ์ปค์ง์ง๋ง, ๋ณ๊ฒฝ์ ์์ ํ๊ณ ๊ฐ๋ ์ฑ์ด ํจ์ฌ ์ข์ต๋๋ค.
- ๊ธ๋ฐฉ ์ฃฝ์ ๊ฐ์ฒด(Young)๋ ์์ ๊ตฌ์ญ์์ ์์ฃผ ๋นจ๋ฆฌ ์น์ฐ๊ณ , ์ค๋ ๋ฒํฐ๋ ๊ฐ์ฒด(Old)๋ ํฐ ๊ตฌ์ญ์ผ๋ก ๋ณด๋ด์ ๊ฐ๋ ๊ผผ๊ผผํ ์น์ฐ๋ ์ ๋ต์ ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์ญ์ ๊ตฌ๋ถ๊ณผ GC์ ์ผ๋ฐ์ ์ธ ๋์ํ๋ฆ์ผ๋ก Eden -> Minor GC -> ์๋ฐ์ด๋ฒ -> ์์ข ๊ฒฝ์ํ ์น๊ฒฉ -> ๋ฉ์ด์ GC์ ๊ณผ์ ๊ณต๋ถ
- ๋ฒ์ ๋ณ๋ก ๋ค๋ฅด์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ์ค๋ช
์ด ๊ฐ๋ฅํ ๊ฒ๋ค๋ก ๊ณต๋ถ
- Parallel GC, G1 GC, ZGC๋ฑ