week 2 incheol - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki
์๊ณ ๋ฆฌ์ฆ
๊ธฐ์ ๋ฌธ์
JAVA (์ฅ์ง์)
-
์๋ฐ์์ ์ฐ๋ ๋๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ๊ณผ ๋๊ธฐํ๋๋ ๊ณผ์ ์ ์ค๋ช ํ์์ค.
-
์ฐ๋ ๋ ๊ตฌํ ๋ฐฉ๋ฒ
-
Runnable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค๋ฅผ ๋ง๋ ๋ค. (run() ๋ฉ์๋๋ก ๊ตฌํํ๋ค)
Runnable์ย run( ) ์ด๋ผ๋ย ๋จ ํ๋์ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค Runnable ์ธํฐํ์ด์ค๋ก ๊ตฌํํ ํด๋์ค๋ฅผ ์ฐ๋ ๋๋ก ๋ฐ๋ก ์์ํ ์๋ ์๋ค.ย Thread ํด๋์ค์ ์์ฑ์์ ํด๋น ๊ฐ์ฒด๋ฅผ ์ถ๊ฐํ์ฌ ์์ํด์ฃผ์ด์ผ๋ง ํ๋ค.ย
-
Thread ํด๋์ค๋ฅผ ์์๋ฐ์ ์ฌ์ฉํ๋ค.
Thread ํด๋์ค๋ ๋ง์ ๋ฉ์๋๋ฅผ ํฌํจํ๊ณ ์๋ค. Thread ํด๋์ค๋ฅผ ์์ํ์ฌ ๋ง๋ ํด๋์ค๋ start()๋ฉ์๋๋ฅผ ๋ฐ๋ก ํธ์ถํ ์ ์๋ค.ย ์ฐ๋ ๋๋ฅผ ์์ํ๋ ๋ฉ์๋๋ start()์ด๋ฉฐ,ย ์ฐ๋ ๋๊ฐ ์์ํ๋ฉด ์ํ๋๋ ๋ฉ์๋๋ run()์ด๋ค.
-
-
๋๊ธฐํ ๊ณผ์
- ???
-
-
hashCode() ๊ฐ์ด ๋ชจ๋ ๊ฐ๋ค๋ฉด ์ด๋ค ์ผ์ด ๋ฒ์ด์ง๋์? hashcode()์ equls()๋ ์ธ์ ์ฌ์ฉํ๊ณ ์ ์ฌ์ฉํ๋์ง?
hashcode()์ equals()๋ ๋ฌด์์ธ๊ฐ?
- hashcode() : ๊ฐ์ฒด๋ฅผ ์๋ณํ ํ๋์ ์ ์๊ฐ์ ๋งํ๋ค.(๋์ผ์ฑ ๋น๊ต์ ์ฌ์ฉ)
- equals() : ๋ ๊ฐ์ฒด์ ๋ด์ฉ์ด ๊ฐ์์ง ๋น๊ตํ๋ค(๋๋ฑ์ฑ)
- equals()๋ฅผ ์ค๋ฒ๋ผ์ด๋ ํ์ง ์๋๋ค๋ฉด ์ธ์คํด์ค์ ์ฃผ์๊ฐ์ ๋น๊ตํ๋ค. String ๊ฐ์ฒด๋ ๋ด๋ถ์ ์ผ๋ก equlas() ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ ํ๊ณ ์์ด์ ์ฐ๋ฆฌ๊ฐ ์์ ํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
hashCode()๊ฐ ์ ํ์ํ๊ฐ?
equals๋ ํ๋ ์ ์ฒด๋ฅผ ๋น๊ตํด์ผ ํ๋ฏ๋ก ๋๋ฆฌ๋ค. ๊ทธ์ ๋นํด ํด์๊ฐ์ ์ฌ์ฉํ๋ฉด ์ผ์ ๊ณ์ฐ๊ณผ ๊ณ์ฐ ๊ฒฐ๊ณผ์ ๋น๊ต๋ง์ผ๋ก ๋๋๊ธฐ ๋๋ฌธ์ ๋น ๋ฅด๊ฒ ๊ฐ์ฒด ๋น๊ต๋ฅผ ํ๋ณํ ์ ์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ HashMap์ด๋ HashSet์์๋ ์๋์ ๊ฐ์ ๋ก์ง์ ์ฌ์ฉํ๋ค.
- ํด์๊ฐ์ผ๋ก ๊ฐ์ฒด๋ฅผ ๋น๊ตํ๋ค.
- ํด์๊ฐ์ด ๋์ผํ ๊ฒฝ์ฐ์ ํํด euqals ๋ฉ์๋๋ก ๋น๊ตํ๋ค.
HashMap์ด๋ HashSet์์ hashcode๊ฐ ๋์ผํ๋ฉด ์ด๋ป๊ฒ ๊ฐ์ ์ ์ฅํ๋๊ฐ?
- jdk 8 ๋ฒ์ ๋ถํฐ๋ hashcode index๊ฐ ๋์ผํ ๊ฒฝ์ฐ linked-list๋ฅผ ์ฌ์ฉํ๋๋ฐ jdk8 ์ดํ์๋ ์ฌ์ด์ฆ๊ฐ ์ปค์ง๋ฉด red-black-tree๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด์ ์ฑ๋ฅ์ด ํฅ์๋์๋ค.
์ฌ์ด์ฆ๊ฐ ์ปค์ง๋ ๊ธฐ์ค์ ์ด๋ป๊ฒ ๋๊ณ ๊ทธ ๊ธฐ์ค์ผ๋ก ์ ํ ์ด์ ๋ ๋ฌด์์ธ๊ฐ?
- linked list์ red-black-tree๋ฅผ ์ฌ์ฉํ๋ ๊ธฐ์ค์ ๋์ผํ index์ ๋ชจ์ธ entity ๊ฐ์๊ฐ 8๋ณด๋ค ํด ๊ฒฝ์ฐ์ tree๋ฅผ ์ฌ์ฉํ๋ค. 6๊ฐ ๋ณด๋ค ์์ ๊ฒฝ์ฐ์ linked list๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค.
- 6๊ฐ์ 8๊ฐ ๊ธฐ์ค์ ๋ฐ๋ผ ๋ด๋ถ ๋ก์ง์ ๋ณ๊ฒฝํ๋ ์ด์ ๋ ์ฌ์ด์ฆ์ ๋ฐ๋ผ ๋ณํํ๋ ์ฑ๋ฅ์ ๋ถํ๋ฅผ ์ค์ด๊ธฐ ์ํ ๋ชฉ์ ์ผ๋ก ๊ตฌ๋ถ๋์๋ค.
-
ํจ๋ฌ๋ดGC, G1GC์ ์ฐจ์ด์ ์ค๋ช ํด์ฃผ์ธ์
Parallel GC
JDK 8 ์ด์ ์ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉํ๋ GC๋ก Serial GC์์ ๋ฉํฐ ์ค๋ ๋ ๋ฐฉ์์ผ๋ก ์งํํ ๋ฐฉ์์ด๋ค. Minor GC๋ฅผ ์ฒ๋ฆฌํ๋ ์ค๋ ๋๋ฅผ ์ฌ๋ฌ๊ฐ๋ก ๋๋ ค ์ข ๋ ๋น ๋ฅธ ๋์์ด ๊ฐ๋ฅํ๊ฒ ํ ๋ฐฉ์์ด๋ค.
Serial GC ๋ฐฉ์์ ๋ฌด์์ธ๊ฐ?
Serial GC๋ Mark-Sweep-Compaction ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค.
Mark-Sweep-Compaction ๋ฐฉ์์ด๋?
- ์ฌ์ฉ๋์ง ์๋ ๊ฐ์ฒด๋ฅผ ์๋ฐํ๋ ์์ (Mark)
- ์ฌ์ฉ๋์ง ์๋ ๊ฐ์ฒด๋ฅผ ์ ๊ฑฐํ๋ ์์ (Sweep)
- ํํธํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์์์๋ถํฐ ์ฑ์๋๊ฐ๋ ์์ (Compaction)
G1 GC
JDK 8๋ถํฐ๋ G1 GC๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ์ค์ ๋์ด ์๋ค. GC์ ๋์ ์์ญ์ด ์ฌ๋ฌ๊ฐ์ region์ผ๋ก ๋๋์ด ์๊ธฐ ๋๋ฌธ์ GC๊ฐ ์ผ์ด๋๋ฉด ์ ์ฒด heap์ ๋ํด์ GC๋ฅผ ํ์ง ์๊ณ ์ผ๋ถ region์์๋ง GC๋ฅผ ์ํํ๋ค.
์ ์ฒด heap์ ๋ํด์ GC๊ฐ ์ผ์ด๋์ง ์๊ณ ์ผ๋ถ region์์๋ง ๋์ํ๊ธฐ ๋๋ฌธ์ ํฐ heap์ ๊ฐ์ง ๊ฒฝ์ฐ ์ ๋ฆฌํ๋ค.
SPRING (์ด๊ฒฝํฌ)
-
Spring์ AOP์ ํน์ง๊ณผ ์ด๋๋ฐ์ด์ค ์ข ๋ฅ์ ์ฌ์ฉ๋ proxy ํจํด์ ๋ํด ์ค๋ช ํด๋ณด์ธ์.
AOP๋ ๋ฌด์์ธ๊ฐ?
AOP๋ ๊ณตํต์ ๊ด์ฌ์ฌ(aspect)๋ฅผ ์ถ์ํํด ์ ๋ณด๊ดํ๊ณ ์๋ค๊ฐ ํ์ํ ๊ณณ์ ๋์ ์ผ๋ก ์ฝ์ ํ์ฌ ๋ถ๊ฐ๊ธฐ๋ฅ์ ๊ตฌํํด์ฃผ๋ ๊ธฐ์ ์ด๋ค.
์คํ๋ง์์๋ ๊ณตํต์ ๊ด์ฌ์ฌ๋ฅผ ์ถ์ํํด ๋ณด๊ดํ๊ณ ์๋ ๊ฐ์ฒด๋ฅผ ์ด๋๋ฐ์ด์ค(Advice)๋ผ๊ณ ํ๊ณ , ์ด ๋ถ๊ฐ ๊ธฐ๋ฅ์ด ํ๊น ๊ตฌํ์ฒด์์ ์ ์ฉ๋ ์์ ์ ํฌ์ธํธ์ปท(PointCut)์ด๋ผ ๋ถ๋ฅธ๋ค.
์คํ๋ง์ AOP๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ํ๋ก์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค. ํ๋ก์ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์๋ ๋ ๊ฐ์ง ๋ฐฉ์์ด ์ฌ์ฉ๋๋ค.
- JDK Dynamic Proxy : java.lang.reflect๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ด๋ค. ์ธํฐํ์ด์ค์ ๋ํด์๋ง ํ๋ก์๋ฅผ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์์ผ๋ฏ๋ก concreate class์์๋ ์ฌ์ฉํ ์ ์๋ค.
- CGLIB : Code Generator Library์ ์ฝ์๋ก ๊ฐ๋ฐ์๊ฐ ์์ฑํ ๋น ํด๋์ค๋ฅผ ์์๋ฐ์ ํ๋ก์ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๊ฒ์ด๋ค.
- ํด๋์ค์์๋ AOP๋ฅผ ์ ์ฉํ ์ ์์ด์ ์ฅ์ ์ด ์๋ค.
- Final class์์๋ ์ฌ์ฉํ ์ ์๋ค.
์ด๋๋ฐ์ด์ค ์ข ๋ฅ๋ ๋ฌด์์ด ์์๊น?
- @Around : ํ์ผ์ ๋ฉ์๋๊ฐ ํธ์ถ๋์ง ์ด์ ๊ณผ ์ดํ ์์ ์ ๋ชจ๋ ์ฒ๋ฆฌํด์ผ ํ ๋ ์ฌ์ฉํ๋ค.
- @Before : ํ๊ฒ์ ๋ฉ์๋๊ฐ ์คํ๋๊ธฐ ์ด์ ์์ ์ ์ฌ์ฉํ๋ค.
- @AfterReturning : ํ๊ฒ์ ๋ฉ์๋๊ฐ ์ ์์ ์ผ๋ก ์คํ๋ ์ดํ ์์ ์ ์ฌ์ฉํ๋ค.
- @AfterThrowing : ํ๊ฒ์ ๋ฉ์๋๊ฐ ์์ธ๋ฅผ ๋ฐ์๋ ์ดํ ์์ ์ ์ฌ์ฉํ๋ค.
- @After : ํ๊ฒ์ ๋ฉ์๋๊ฐ ์์ธ ๋๋ ์ ์์ ์ผ๋ก ์คํ๋ ๊ฒฝ์ฐ ๋ ์ผ์ด์ค ๋ชจ๋ ์์ ์ ์ฌ์ฉํ๋ค.
ํ๋ก์ ํจํด์ด๋ ๋ฌด์์ผ๊น?
AOP์์ ์ฌ์ฉํ๋ ํ๋ก์์ ๋์์ธ ํจํด์ ํ๋ก์ ํจํด์ ์ฐจ์ด๊ฐ ์๋ค.
- ํ๋ก์ : ํด๋ผ์ด์ธํธ์ ์ฌ์ฉ ๋์ ์ฌ์ด์ ๋๋ฆฌ ์ญํ ์ ๋งก์ ์ค๋ธ์ ํธ (ํ๋ก์๋ ํ๋ก์ ํจํด๊ณผ ๋ฐ์ฝ๋ ์ดํฐ ํจํด์ ๋ชจ๋ ์ ์ฉํ๊ณ ์๋ค)
- ํ๋ก์ ํจํด : ํ๊น์ ๋ํ ์ ๊ทผ ๋ฐฉ๋ฒ์ ์ ์ดํ๋ ค๋ ๋ชฉ์
ํ๋ก์ ํจํด๊ณผ ๋ฐ์ฝ๋ ์ดํฐ ํจํด์ ์ด๋ป๊ฒ ๊ตฌ๋ถํ ์ ์์๊น?
์ฌ์ฉ์ ๋ชฉ์ ์ด ๊ธฐ๋ฅ์ ๋ถ๊ฐ์ธ์ง, ์ ๊ทผ ์ ์ด์ธ์ง๋ฅผ ๊ตฌ๋ถํด๋ณด๋ฉด ๊ฐ๊ฐ ์ด๋ค ๋ชฉ์ ์ผ๋ก ํ๋ก์๊ฐ ์ฌ์ฉ๋๋์ง, ๊ทธ์ ๋ฐ๋ผ ์ด๋ค ํจํด์ด ์ ์ฉ๋๋์ง ์ ์ ์๋ค.
- ์ ๊ทผ ์ ์ด โ ํ๋ก์ ํจํด
- ๋ถ๊ฐ ๊ธฐ๋ฅ โ ๋ฐ์ฝ๋ ์ดํฐ ํจํด
-
์คํ๋ง์์ @Transactional์ ์ด๋ป๊ฒ ๋์ํ๋ฉฐ ์ด๋ค ์ต์ ์ด ์๋๊ฐ?
2. ๋์ ์๋ฆฌ
@Transactional ์ด๋ ธํ ์ด์ ์ ๊ธฐ์ค์ผ๋ก ์ค๋ช ํ๊ฒ ๋ค.
ํธ๋์ญ์ ์ย Spring AOP๋ฅผ ํตํด ๊ตฌํ๋์ด์๋ค.
๋ ์ ํํ๊ฒ ๋งํ๋ฉด, ์ด๋ ธํ ์ด์ ๊ธฐ๋ฐ AOP๋ฅผ ํตํด ๊ตฌํ๋์ด์๋ค. (import๋ฌธ์ ๋ณด๋ฉด ์ ์ ์๋ค)
import org.springframework.transaction.annotation.Transactional;
๋ฐ๋ผ์,ย ์๋์ ๊ฐ์ ํน์ง์ด ์๋ค
- ํด๋์ค, ๋ฉ์๋์ @Transactional์ด ์ ์ธ๋๋ฉด ํด๋น ํด๋์ค์ ํธ๋์ญ์ ์ด ์ ์ฉ๋ ํ๋ก์ ๊ฐ์ฒด ์์ฑ
- ํ๋ก์ ๊ฐ์ฒด๋ @Transactional์ด ํฌํจ๋ ๋ฉ์๋๊ฐ ํธ์ถ๋ ๊ฒฝ์ฐ, ํธ๋์ญ์ ์ ์์ํ๊ณ Commit or Rollback์ ์ํ
- CheckedException or ์์ธ๊ฐ ์์ ๋๋ Commit
- UncheckedException์ด ๋ฐ์ํ๋ฉด Rollback
3. ์ฃผ์์
1) ์ฐ์ ์์
@Transactional์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
ํด๋์ค ๋ฉ์๋์ ์ ์ธ๋ ํธ๋์ญ์ ์ ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋๊ณ , ์ธํฐํ์ด์ค์ ์ ์ธ๋ ํธ๋์ญ์ ์ ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋ฎ๋ค.
ํด๋์ค ๋ฉ์๋ -> ํด๋์ค -> ์ธํฐํ์ด์ค ๋ฉ์๋ -> ์ธํฐํ์ด์ค
๋ฐ๋ผ์ ๊ณตํต์ ์ธ ํธ๋์ญ์ ๊ท์น์ ํด๋์ค์, ํน๋ณํ ๊ท์น์ ๋ฉ์๋์ ์ ์ธํ๋ ์์ผ๋ก ๊ตฌ์ฑํ ์ ์๋ค.
๋ํ, ์ธํฐํ์ด์ค ๋ณด๋ค๋ ํด๋์ค์ ์ ์ฉํ๋ ๊ฒ์ ๊ถ๊ณ ํ๋ค.
- ์ธํฐํ์ด์ค๋ย ์ธํฐํ์ด์ค์ย ๋ฉ์๋์ย ์ ์ฉํ ย ์ย ์๋ค.
- ํ์ง๋ง, ์ธํฐํ์ด์ค ๊ธฐ๋ฐ ํ๋ก์์์๋ง ์ ํจํ ํธ๋์ญ์ ์ค์ ์ด ๋๋ค.
- ์๋ฐ ์ด๋ ธํ ์ด์ ์ ์ธํฐํ์ด์ค๋ก๋ถํฐ ์์๋์ง ์๊ธฐ ๋๋ฌธ์ย ํด๋์คย ๊ธฐ๋ฐย ํ๋ก์ย orย AspectJย ๊ธฐ๋ฐ์์ย ํธ๋์ญ์ ย ์ค์ ์ย ์ธ์ย ํ ย ์ย ์๋ค.
2) ํธ๋์ญ์ ์ ๋ชจ๋
@Transactional์ Proxy Mode์ AspectJ Mode๊ฐ ์๋๋ฐย Proxy Mode๊ฐ Default๋ก ์ค์ ๋์ด์๋ค.
Proxy Mode๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ ๋์ํ์ง ์๋๋ค.
- ๋ฐ๋์ public ๋ฉ์๋์ ์ ์ฉ๋์ด์ผํ๋ค.
- Protected, Private Method์์๋ ์ ์ธ๋์ด๋ ์๋ฌ๊ฐ ๋ฐ์ํ์ง๋ ์์ง๋ง, ๋์ํ์ง๋ ์๋๋ค.
- Non-Public ๋ฉ์๋์ ์ ์ฉํ๊ณ ์ถ์ผ๋ฉด AspectJ Mode๋ฅผ ๊ณ ๋ คํด์ผํ๋ค.
- @Transactional์ด ์ ์ฉ๋์ง ์์ Public Method์์ @Transactional์ด ์ ์ฉ๋ Public Method๋ฅผ ํธ์ถํ ๊ฒฝ์ฐ, ํธ๋์ญ์ ์ด ๋์ํ์ง ์๋๋ค.
-
์คํ๋ง์์ ์ธ์ฆ๊ณผ ์ธ๊ฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ๋ํด ์ค๋ช ํด๋ณด์ธ์.
์ ๊ทธ๋ฆผ์ ๋์ ํ๋ก์ฐ๋ฅผ ๊ฐ๋จํ ์ค๋ช ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
-
์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ ์ ๋ณด์ ํจ๊ป ์ธ์ฆ ์์ฒญ(Http Request)
-
AuthenticationFilter๊ฐ ์ด ์์ฒญ์ ๊ฐ๋ก์ฑ๋๋ค. ์ด ๋ ๊ฐ๋ก์ฑ ์ ๋ณด๋ฅผ ํตํด UsernamePasswordAuthenticationToken์ด๋ผ๋ ์ธ์ฆ์ฉ ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค.
3.ย AuthenticationManager์ ๊ตฌํ์ฒด์ธย ProviderManager์๊ฒ UsernamePasswordAuthenticationToken ๊ฐ์ฒด๋ฅผ ์ ๋ฌํฉ๋๋ค.
-
๋ค์ AuthenticationProvider์ UsernamePasswordAuthenticationToken ๊ฐ์ฒด๋ฅผ ์ ๋ฌํฉ๋๋ค.
-
์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฌ์ฉ์ ์ธ์ฆ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ UserDetailsService์ ์ฌ์ฉ์ ์ ๋ณด(์์ด๋)๋ฅผ ๋๊ฒจ์ค๋๋ค.
-
๋๊ฒจ๋ฐ์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ํตํด DB์์ ์ฐพ์ ์ฌ์ฉ์ ์ ๋ณด์ธ UserDetails ๊ฐ์ฒด๋ฅผ ๋ง๋ญ๋๋ค. ์ด ๋ UserDetails ๋ ์ธ์ฆ์ฉ ๊ฐ์ฒด์ ๋๋ฉ์ธ์ฉ ๊ฐ์ฒด๋ฅผ ๋ถ๋ฆฌํ์ง ์๊ณ ์ธ์ฆ์ฉ ๊ฐ์ฒด์ ์์ํด์ ์ฌ์ฉํ๊ธฐ๋ ํฉ๋๋ค.
-
AuthenticationProvider๋ UserDetails๋ฅผ ๋๊ฒจ๋ฐ๊ณ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋น๊ตํฉ๋๋ค.
-
์ธ์ฆ์ด ์๋ฃ๋๋ฉด ๊ถํ ๋ฑ์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋ด์ Authentication ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค.
-
๋ค์ ์ต์ด์ AuthenticationFilter์ Authentication ๊ฐ์ฒด๊ฐ ๋ฐํ๋ฉ๋๋ค.
-
Authentication ๊ฐ์ฒด๋ฅผ SecurityContext์ ์ ์ฅํฉ๋๋ค.
์ต์ข ์ ์ผ๋ก SecurityContextHolder๋ ์ธ์ ์์ญ์ ์๋ SecurityContext์ย Authentication ๊ฐ์ฒด๋ฅผ ์ ์ฅํฉ๋๋ค. ์ธ์ ์ ์ฌ์ฉ์์ ๋ณด๋ฅผ ์ ์ฅํ๋ค๋ ๊ฒ์ ์คํ๋ง ์ํ๋ฆฌํฐ๊ฐ ์ ํต์ ์ธ ์ธ์ -์ฟ ํค ๊ธฐ๋ฐ์ ์ธ์ฆ ๋ฐฉ์์ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
-
DATABASE/SQL (์ ์ธ์ฒ )
-
SQL์ HINT๋ฅผ ์ค๋ช ํด์ฃผ์ธ์.
SQL ํํธ๋?
ํํธ๋ SQL ํ๋์ ํต์ฌ ๋ถ๋ถ์ผ๋ก ์ผ์ข ์ ์ง์๊ตฌ๋ฌธ์ด๋ฉฐ SQL์ ํฌํจ๋์ด ์ฐ์ฌ์ ธ Optimizer์ ์คํ๊ณํ์ ์ํ๋ ๋๋ก ๋ฐ๊ฟ์ ์๊ฒ ํด์ค๋ค. ๋๋น์ Optimizer ๋ผ๊ณ ํด์ ํญ์ ์ต์ ์ ์คํ๊ณํ์ ์๋ฆฝํ ์๋ ์์ผ๋ฏ๋ก ํ ์ด๋ธ์ด๋ ์ธ๋ฑ์ค์ ์๋ชป๋ ์คํ ๊ณํ์ ๊ฐ๋ฐ์๊ฐ ์ง์ ๋ฐ๊ฟ ์ ์๋๋ก ๋์์ฃผ๋ ๊ฒ์ด HINT ์ด๋ค.
ํํธ์ ํน์ง ๋ค๊ฐ์ง
- ์คํ ๊ณํ์ ์ ์ดํ๋ค.
- ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๋๋ค. (ํํธ์ ์์
/*
์*/
์ ๋ฌธ๋ฒ์ ๋ง๊ฒ ์์ฑ๋์ด์ผ ํ๋ค.) - ์ ํ ๋๋ ์ทจ์ ๋ ์ ์๋ค. (ํํธ์ ๋ฌธ๋ฒ์ด ์ฌ๋ฐ๋ฅด๋๋ผ๋ ํํธ๋ ์ตํฐ๋ง์ด์ ์ ์ํด ๋ฒ๋ ค์ง ์๋ ์๊ณ ์ ํ๋์ด์ง ์๋ ์๋ค.)
- ๋ค์ํ ์ข ๋ฅ์ ํํธ๊ฐ ์์ผ๋ฉฐ ๋ฒ์ ์ ์ด ๋ ๋๋ง๋ค ๊ณ์ ์ถ๊ฐ๋๋ค.
ํํธ์ ์ข ๋ฅ (MYSQL ๊ธฐ์ค)
- STRAIGHT_JOIN : ์ฌ๋ฌ ํ ์ด๋ธ ์กฐ์ธ์ ์กฐ์ธ์์๋ฅผ from์ ์์๋๋ก Access
- USE INDEX / FORCE INDEX / IGNORE INDEX : ์ธ๋ฑ์ค ์ฌ์ฉ/๊ฐ์ /๋ฌด์
- SQL_CACHE / SQL_NO_CACHE : ์กฐํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฌ์ฉํ๊ธฐ ์ํด ์ฟผ๋ฆฌ ์บ์์ ์ ํ์ ์ผ๋ก ์ ์ฅํ ์ ์๋ค.
- SQL_CALC_FOUND_ROWS : SQL_CALC_FOUND_ROWS ํํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ limit ์ ๊ณผ๋ ์๊ด์์ด ์กฐ๊ฑด์ ์ผ์นํ๋ ๋ชจ๋ ๋ ์ฝ๋๋ฅผ ๊ฒ์ํด ๊ฒฐ๊ณผ ๋ ์ฝ๋๊ฐ ๋ช๊ฑด์ด๋ ๋๋์ง ๊ณ์ฐํ๋ค. ๊ทธ๋ ์น๋ง ์ฌ์ฉ์ ์๊ฒ๋ Limit ์ ์ ์ ํ๋ ๊ฑด์ ๋งํผ๋ง ๋ ์ฝ๋๋ฅผ ๋ฐํํ๋ค.
- FOUND_ROWS : FOUND_ROWS๋ ์ง์ ์ฟผ๋ฆฌ์์ ๊ฒ์๋ ๊ฒฐ๊ณผ row ์๋ฅผ ๋ฐํํ๋ค.
-
memcached๋ณด๋ค redis์ ๊ณตํต์ ๊ณผ ์ฐจ์ด์ ์?
์บ์๋ฅผ ์ฌ์ฉํ๋ ์ด์ ?
์ผ๋จ Cache๋ โ๋ง์ ์๊ฐ์ด๋ ์ฐ์ฐ์ด ํ์ํ ์ผ์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํด ๋๋ ๊ฒโ ์ด๋ผ๊ณ ํ ์ ์๋ค. ์๋๋ฉด์์๋ ๊ฐ๊ฐ์ ์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ค๊ณ ์๋ ๊ฒ์ด ์ ๋ฆฌํฉ๋๋ค. ๊ทธ๋ฐ๋ฐ, ์ฌ๋ฌ ์๋ฒ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐํ ํ๋ ๊ฒ์ ์ฌ์ค ์ฌ์ด ์ผ์ด ์๋๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ๋์ด ๋ง์ผ๋ฉด, ๊ฒฐ๊ตญ์ ํ ์๋ฒ์ ๋ ์ ์์ด์, ์ฌ๋ฌ ์๋ฒ๋ก ๋๋์ด์ผ ํฉ๋๋ค.
์ฟ ํค์ ์ธ์ ์ ๋ฌด์์ด์ง?
์ฟ ํค
์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ์ ์ ์ฅ๋๊ณ , ํต์ ํ ๋ย HTTP ํค๋์ ํฌํจ๋๋ย ํ ์คํธ ๋ฐ์ดํฐ ํ์ผ
์ด๋ฆ, ๊ฐ ๋ง๋ฃ๊ธฐ๊ฐ(์ง์ ๊ฐ๋ฅ), ๊ฒฝ๋ก ์ ๋ณด๊ฐ ์๊ณ ํค์ ๊ฐ์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค
ํด๋น ์ฌ์ฉ์์ ์ปดํจํฐ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๋๊ตฌ๋ ์ฟ ํค์ ์ ๋ ฅ๋ ๊ฐ์ ์ฝ๊ฒ ํ์ธ ๊ฐ๋ฅ ->ย ๋ณด์์ฑ์ด ๋ฎ๋ค!
์ธ์
์๋ฒ'์ ์ ์ฅ๋๋ ์ฟ ํค. ํด๋ผ์ด์ธํธ์ ์๋ฒ์ ํต์ ์ํ. ์ฃผ๋ก ์ค์ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ ์ ์ฌ์ฉ
๋ธ๋ผ์ฐ์ ๋ฅผ ์ข ๋ฃํ ๋๊น์ง ์ ์ง ๋จ
์ฌ์ฉ์ ๋ก์ปฌ์ด ์๋ย ์๋ฒ์ ์ง์ ์ ์ฅ๋๋ฏ๋ก, ์ธ์ ๋ด์ ๋ฐ์ดํฐ๋ฅผ ํ์ทจํ๋ ๊ฒ์ ์ด๋ ค์ย -> ๋ณด์์ฑ์ด ๋น๊ต์ ๋์
Redis๋ ๋ฌด์์ธ๊ฐ?
- ์๋ฃ๊ตฌ์กฐ๊ฐ ๋ค์ํฉ๋๋ค. String, Set, Sorted Set, Hash List ๋ฑ ๋ค์ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ํ์ฌ๋ JSON ํ์ ์ ๋ํด์๋ ์ง์ํ๋ค.
- ๋ฉ๋ชจ๋ฆฌ ๋ฟ๋ง ์๋๋ผ ๋์คํฌ๋ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ ๋ณต๊ตฌ์ ์ ์ฉํ๋ค.
- ์ฑ๊ธ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๋ค.
- ๋ค์ํ Eviction ์ ์ฑ ์ ํตํด ์ธ๋ฐํ Eviction ์ ์ด๊ฐ ๊ฐ๋ฅํ๋ค
์ Redis์์ ์ค์ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ๋ณด๋ค ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๊ตฌํ ๊น?
- Redis์ Copy on Write๊ฐ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์ด์
- ๋ฆฌ๋ ์ค์์๋ ์์ ํ๋ก์ธ์ค ์์ฑ์ ๋ํด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ณต์ ํ๋ค.
- ํ์ง๋ง ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ฑฐ๋, ์์ ํ๊ฑฐ๋, ์ง์ฐ๊ฒ ๋๋ฉด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ณต์ ํ ์ ์๊ฒ๋๋ค. ์ด๋ ๋ถ๋ชจ ํ๋ก์ธ์ค๋ ํด๋น ํ์ด์ง๋ฅผ ๋ณต์ฌํ ๋ค์ ์์ ํ๋ค.
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Redis์์๋ ์ค์ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ๋ณด๋ค ์์๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ๊ณ ์์ ํ๊ธฐ ์ํด ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ํ์๋ก ํ๋ ๊ฒ์ด๋ค.
Memcached๋ ๋ฌด์์ธ๊ฐ?
- ๋ฉํฐ์ค๋ ๋ ์ํคํ ์ฒ๋ฅผ ์ง์ํ๋ค.
- ์ฐธ๊ณ ํ ๋ธ๋ก๊ทธ์ "Single Thread์ธ Redis์ ๋นํด Memcached๋ Multi Thread๋ฅผ ์ง์ํ๊ธฐ ๋๋ฌธ์ ์๋ฒ Scale up์ ์ ๋ฆฌํ๋ค"๋ผ๊ณ ๋์์๋๋ฐ, ๋ฉํฐ์ค๋ ๋์ ์ค์ผ์ผ์ ์ ์๊ด๊ด๊ณ์ ๋ํด์ ์ข ๋ ์๊ฐํด๋ณผ ํ์์ฑ์ด ์๊ฒ ๋ค.
- Redis ๋ณด๋ค ์ ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๊ตฌํ๋ค.
- Redis์ Memcached ์ฌ์ด์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์บ์ฑํ๋ ๋ฐฉ์์ ์ฐจ์ด๊ฐ ์๋ ๊ฒ ๊ฐ๋ค. Memcached๋ ์ ์ ์ธ ๋ฐ์ดํฐ ์ ์ฅ์ ์ ๋ฆฌํ๋ค. Redis๋ Copy-on-Write ๋ฐฉ์์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ค์ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ๋ณด๋ค ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๊ตฌํ๋ค.
Redis์ Memcached ์ฅ๋จ์
Redis > Memcached
1. ๋ค์ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ง์ํฉ๋๋ค.
String๋ง ์ง์ํ๋ Memcached์ ๋นํด Redis๋ ๋์ฑ ๋ค์ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ง์ํ์ฌ ๋ ๋ค์ํ ํ์ ์ ์๋ฃ๋ฅผ ์ ์ฅํ ์ ์์ต๋๋ค. ์ด๋ Memcached์ ๋นํด Redis๊ฐ ๊ฐ์ง๋ ๊ฐ๋ ฅํ ์ฅ์ ์ค ํ๋์ ๋๋ค.
2. ๋ฐ์ดํฐ ๋ณต๊ตฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
ํ๋ก์ธ์ค์ ๋๋ฐ ์ข ๋ฃ, ์๋ฒ ์ข ๋ฃ ๋ฑ ๋๋ฐ ์ํฉ์์ Memcached๋ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์ ์ค๋์ง๋ง, Redis๋ ๋ฐ์ดํฐ๋ฅผ Disk์๋ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ์์ ์ ์ค๋ ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ ์ ์์ต๋๋ค.
3. ๋ค์ํ Data Eviction ์ ์ฑ ์ ์ง์ํฉ๋๋ค.
Memcached๋ LRU ์๊ณ ๋ฆฌ์ฆ์ ํตํ Eviction์ ์ง์ํฉ๋๋ค. ํ์ง๋ง Redis๋ 6๊ฐ์ง Eviction์ ์ฑ ์ ํตํด ๋์ฑ ์ธ๋ฐํ Eviction ์ ์ด๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
Memcached > Redis
1. ๋ฉํฐ์ค๋ ๋๋ฅผ ์ํคํ ์ฒ๋ฅผ ์ง์ํฉ๋๋ค.
Single Thread์ธ Redis์ ๋นํด Memcached๋ Multi Thread๋ฅผ ์ง์ํ๊ธฐ ๋๋ฌธ์ ์๋ฒ Scale up์ ์ ๋ฆฌํฉ๋๋ค.
2. Redis์ ๋นํด ์ ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๊ตฌํฉ๋๋ค.
HTML๊ณผ ๊ฐ์ ์ ์ ์ธ ๋ฐ์ดํฐ๋ฅผ ์บ์ฑํ๋ ๊ฒ์๋ Memcached๊ฐ ์ ๋ฆฌํฉ๋๋ค. Redis๋ Copy&Write ๋ฐฉ์์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ค์ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ๋ณด๋ค ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๊ตฌํฉ๋๋ค.
-
ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค (Isolation Level) ์ ๋ํด์ ์ค๋ช ํ์ธ์.
ํธ๋์ญ์ ์ด ๋ณด์ฅํด์ผ ํ๋ ACID
- ์์์ฑย (Atomicity) : ํ ํธ๋์ญ์ ๋ด์์ ์คํํ ์์ ๋ค์ ํ๋์ ์์ ์ผ๋ก ๊ฐ์ฃผํ๋ค. ๋ชจ๋ ์ฑ๊ณต ๋๋ ๋ชจ๋ ์คํจ๋์ด์ผ ํ๋ค.
- ์ผ๊ด์ฑย (Consistency) : ๋ชจ๋ ํธ๋์ญ์ ์ ์ผ๊ด์ฑ ์๋ ๋ฐ์ดํ๋ฒ ์ด์ค ์ํ๋ฅผ ์ ์งํ๋ค. ์ด๋ฅผํ ๋ฉด DB์์ ์ ํ ๋ฌด๊ฒฐ์ฑ ์กฐ๊ฑด์ ํญ์ ๋ง์กฑ.
- ๊ฒฉ๋ฆฌ์ฑย (Isolation) : ๋์์ ์คํ๋๋ ํธ๋์ญ์ ๋ค์ด ์๋ก ์ํฅ์ ๋ฏธ์น์ง ์๋๋ก ๊ฒฉ๋ฆฌ ํด์ผํ๋ค.
- ์ง์์ฑย (Durability) : ํธ๋์ญ์ ์ ์ฑ๊ณต์ ์ผ๋ก ๋ง์น๋ฉด ๊ทธ ๊ฒฐ๊ณผ๊ฐ ํญ์ ์ ์ฅ๋์ด์ผ ํ๋ค.
๊ฒฉ๋ฆฌ์ฑ ๊ด๋ จ ๋ฌธ์ ์
(1) Dirty Read
ํ ํธ๋์ญ์ (T1)์ด ๋ฐ์ดํ์ ์ ๊ทผํ์ฌ ๊ฐ์ 'A'์์ 'B'๋กย ๋ณ๊ฒฝํ๊ณ ์์ง ์ปค๋ฐ์ ํ์ง ์์์๋,ย ๋ค๋ฅธย ํธ๋์ญ์ (T2)์ด ํด๋น ๋ฐ์ดํ๋ฅผ Read ํ๋ฉด?
T2๊ฐ ์ฝ์ ๋ฐ์ดํ๋ B๊ฐ ๋ ๊ฒ์ด๋ค. ํ์ง๋ง T1์ด ์ต์ข ์ปค๋ฐ์ ํ์ง ์๊ณ ์ข ๋ฃ๋๋ค๋ฉด,ย T2๊ฐ ๊ฐ์ง ๋ฐ์ดํ๋ ๊ผฌ์ด๊ฒ ๋๋ค.
(2) Non-Repeatable Read
ํ ํธ๋์ญ์ (T1)์ด ๋ฐ์ดํ๋ฅผย Readย ํ๊ณ ์๋ค. ์ด๋ ๋ค๋ฅธ ํธ๋์ญ์ (T2)๊ฐ ๋ฐ์ดํ์ ์ ๊ทผํ์ฌ ๊ฐ์ ๋ณ๊ฒฝ ๋๋, ๋ฐ์ดํ๋ฅผ ์ญ์ ํ๊ณ ์ปค๋ฐ์ ๋๋ ค๋ฒ๋ฆฌ๋ฉด?
๊ทธ ํ T1์ด ๋ค์ ํด๋น ๋ฐ์ดํ๋ฅผ Readํ๊ณ ์ ํ๋ฉด ๋ณ๊ฒฝ๋ ๋ฐ์ดํ ํน์ ์ฌ๋ผ์ง ๋ฐ์ดํ๋ฅผ ์ฐพ๊ฒ ๋๋ค.
(3) Phantom Read
ํธ๋์ญ์ (T1) ์ค์ ํน์ ์กฐ๊ฑด์ผ๋ก ๋ฐ์ดํ๋ฅผ ๊ฒ์ํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์ป์๋ค. ์ด๋ ๋ค๋ฅธ ํธ๋์ญ์ (T2)๊ฐ ์ ๊ทผํด ํด๋น ์กฐ๊ฑด์ ๋ฐ์ดํ ์ผ๋ถ๋ฅผ ์ญ์ ๋๋ ์ถ๊ฐ ํ์๋, ์์ง ๋๋์ง ์์ย T1์ด ๋ค์ ํ๋ฒ ํด๋น ์กฐ๊ฑด์ผ๋ก ๋ฐ์ดํ๋ฅผ ์กฐํ ํ๋ฉด T2์์ ์ถ๊ฐ/์ญ์ ๋ ๋ฐ์ดํ๊ฐ ํจ๊ป ์กฐํ/๋๋ฝ ๋๋ค. ๊ทธ๋ฆฌ๊ณ T2๊ฐ ๋กค๋ฐฑ์ ํ๋ฉด? ๋ฐ์ดํ๊ฐ ๊ผฌ์ธ๋ค
ํธ๋์ญ์ ๊ฒฉ๋ฆฌ์์ค
์์ ๊ฐ์ ๋ฌธ์ ๋ค ๋๋ฌธ์, ANSIํ์ค์์ ํธ๋์ญ์ ์ ๊ฒฉ๋ฆฌ์ฑ๊ณผ ๋์ย ์ฒ๋ฆฌ ์ฑ๋ฅ ์ฌ์ด์ Trade-off๋ฅผ ๋๊ณ 4๋จ๊ณ ๊ฒฉ๋ฆฌ์์ค์ ๋๋์๋ค. ๋ด๋ ค๊ฐ์๋ก ๊ฒฉ๋ฆฌ ์์ค์ด ๋์์ ธ์ ์ธ๊ธ๋ ์ด์๋ ์ ๊ฒ ๋ฐ์ํ์ง๋ง ๋์ ์ฒ๋ฆฌ ์ฑ๋ฅ์ ๋จ์ด์ง๋ค.
์ฐธ๊ณ ๋ก, ํธ๋์ญ์ ์ด ๋ฐ์ํ๋ฉด ๋ฝ(Lock)์ด ๊ฑธ๋ฆฌ๋๋ฐ, SELECT ์์๋ย ๊ณต์ ๋ฝ, CREATE/INSERT/DELETE ์์๋ ๋ฐฐํ์ ๋ฝ์ด ๊ฑธ๋ฆฐ๋ค
(1) Read Uncommitted
ํ ํธ๋์ญ์ ์์ ์ปค๋ฐํ์ง ์์ ๋ฐ์ดํ์ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ์ ๊ทผ ๊ฐ๋ฅํ๋ค. ์ฆ, ์ปค๋ฐํ์ง ์์ ๋ฐ์ดํ๋ฅผ ์ฝ์ ์ ์๋ค.
์ด ์์ค์ ๋น์ฐํ ์์์ ์ธ๊ธํ ๋ชจ๋ ๋ฌธ์ ์ ๋ํด ๋ฐ์๊ฐ๋ฅ์ฑ์ด ์กด์ฌํ๋ค. ๋์ , ๋์ ์ฒ๋ฆฌ ์ฑ๋ฅ์ ๊ฐ์ฅ ๋๋ค.
- ๋ฐ์ ๋ฌธ์ ์ : Dirty Read, Non-Repeatable Read, Phantom Read
(2) Read Committed
์ปค๋ฐ์ด ์๋ฃ๋ ๋ฐ์ดํ๋ง ์ฝ์ ์ ์๋ค.
Dirty Read๊ฐ ๋ฐ์ํ ์ฌ์ง๋ ์์ผ๋, Read Uncommitted ์์ค๋ณด๋ค ๋์ ์ฒ๋ฆฌ ์ฑ๋ฅ์ ๋จ์ด์ง๋ค.ย ๋์ Non-Repeatable Read ๋ฐ Phantom Read๋ ๋ฐ์ ๊ฐ๋ฅํ๋ค.๋ฐ์ดํ๋ฒ ์ด์ค๋ค์ ๋ณดํต Read Committed๋ฅผ ๋ํดํธ ์์ค์ผ๋ก ์ง์ ํ๋ค.
- ๋ฐ์ ๋ฌธ์ ์ :ย Non-Repeatable Read, Phantom Read
(3) Repeatable Read
ํธ๋์ญ์ ๋ด์์ ํ๋ฒ ์กฐํํ ๋ฐ์ดํ๋ฅผ ๋ฐ๋ณตํด์ ์กฐํํด๋ ๊ฐ์ ๋ฐ์ดํ๊ฐ ์กฐํ ๋๋ค
์ด๋ ๊ฐ๋ณ ๋ฐ์ดํ ์ด์์ธ Dirty Read๋ Non-Repeatable Read๋ ๋ฐ์ํ์ง ์์ง๋ง, ๊ฒฐ๊ณผ ์งํฉ ์์ฒด๊ฐ ๋ฌ๋ผ์ง๋ Phantom Read๋ ๋ฐ์๊ฐ๋ฅํ๋ค.
- ๋ฐ์ ๋ฌธ์ ์ : Phantom Read
(4) Serializable
๊ฐ์ฅ ์๊ฒฉํ ๊ฒฉ๋ฆฌ ์์ค
์ 3๊ฐ์ง ๋ฌธ์ ์ ์ ๋ชจ๋ ์ปค๋ฒ ๊ฐ๋ฅํ๋ค. ํ์ง๋ง ๋์ ์ฒ๋ฆฌ ์ฑ๋ฅ์ ๊ธ๊ฒฉํ ๋จ์ด์ง ์ ์๋ค.