week 2 leekyunghee - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki
SPRING
[Question 1] Spring AOP์ ํน์ง๊ณผ ์ด๋๋ฐ์ด์ค ์ข ๋ฅ์ ์ฌ์ฉ๋ proxy ํจํด์ ๋ํด ์ค๋ช ํด๋ณด์ธ์.
๋จผ์ AOP์ ๊ฐ๋ ์ ๋ํด ์ดํดํ๊ณ Spring์์๋ AOP๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ์์๋ณด๊ฒ ์ต๋๋ค.
AOP๋ ์ฌ๊ธฐ์ ๊ธฐ ํฉ์ด์ง ์ฝ๋๋ฅผ ํ๊ณณ์ ๋ชจ์๋ค๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๋๋ค. ๊ณตํต ๋ถ๋ถ์ ๋ฐ๋ก๋นผ์ ๊ด๋ฆฌํฉ๋๋ค.
์ค๋ณต๋๋ ๋ก์ง์ด ์ ๊ฑฐ๋๋ฉฐ ๋น์ง๋์ค ๋ก์ง์ ์ ์ธํ ์ธํ๋ผ ์คํธ๋ญ์ฒ ๋ ์ด์ด์ ๋ก์ง์ AOP ๋ฐฉ์์ผ๋ก ํผ๋ค๊ณ ํ ์ ์๊ฒ ์ต๋๋ค.
ํ๋ก์์ AOP
ํต์ฌ ๊ธฐ๋ฅ์ ๊ฐ์ผ ๋ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ ํ๋ก์๋ผ๊ณ ํ๋ฉฐ Advice ์ด๋ค.
-
์ฌ๋ฌ ๊ฐ์ฒด์ ๊ณตํต์ผ๋ก ์ ์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ ๋ถ๋ฆฌํด์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ฌ์ค๋ค.
-
AOP๋ ํต์ฌ ๊ธฐ๋ฅ๊ณผ ๊ณตํต ๊ธฐ๋ฅ์ ๊ตฌํ์ ๋ถ๋ฆฌํจ์ผ๋ก์จ ํต์ฌ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ฝ๋์ ์์ ์์ด ๊ณตํต ๊ธฐ๋ฅ์ ์ ์ฉํ ์ ์๊ฒํด์ค๋ค.
-
ํต์ฌ ๊ธฐ๋ฅ๊ณผ ๊ณตํต ๊ธฐ๋ฅ์ ๊ตฌ๋ถํด์ ๊ตฌํํ๋ค. ์์) factorial ๊ณ์ฐ ๊ธฐ๋ฅ(ํต์ฌ) ๊ณ์ฐ ์๊ฐ ์ธก์ ๊ธฐ๋ฅ(๊ณตํต)์ ํ๋ก์๋ฅผ ์ฌ์ฉํด์ ๊ตฌํ
-
AOP์ ๊ธฐ๋ณธ ๊ฐ๋ ์ ํต์ฌ ๊ธฐ๋ฅ์ ๊ณตํต ๊ธฐ๋ฅ์ ์ฝ์ ํ๋ ๊ฒ์ด๋ค. ์ฆ ํต์ฌ ๊ธฐ๋ฅ์ ์ฝ๋๋ฅผ ์์ ํ์ง ์์ผ๋ฉด์ ๊ณตํต ๊ธฐ๋ฅ์ ๊ตฌํ์ ์ถ๊ฐํ๋ ๊ฒ์ด AOP ์ด๋ค.
-
์คํ๋ง์์๋ ๋ฐํ์์์ ํ๋ก์ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ ๊ณตํต ๊ธฐ๋ฅ์ ์ฝ์ ํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค.
-
์คํ๋ง AOP๋ ํ๋ก์ ๊ฐ์ฒด๋ฅผ ์๋์ผ๋ก ๋ง๋ค์ด์ค๋ค.
-
ํ๋ก์์ ํน์ง์ ํต์ฌ ๊ธฐ๋ฅ์ ๊ตฌํํ์ง ์๋๋ค๋ ์ ์ด๋ค.
-
ํ๋ก์๋ ํต์ฌ ๊ธฐ๋ฅ์ ๊ตฌํํ์ง ์๋ ๋์ ์ฌ๋ฌ ๊ฐ์ฒด์ ๊ณตํต์ ์ผ๋ก ์ ์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค.
AOP ์ฃผ์ ์ฉ์ด
AOP์์ ๊ณตํต ๊ธฐ๋ฅ์ Aspect๋ผ๊ณ ํ๋ค.
์ด๋๋ฐ์ด์ค๊ฐ ํ๋ก์ ํจํด์ ์ฌ์ฉํ ๊ฐ์ฒด๋ฅผ ๋งํ๋ค.
Advice : ์ธ์ ๊ณตํต ๊ด์ฌ ๊ธฐ๋ฅ์ ํต์ฌ ๋ก์ง์ ์ ์ฉํ ์ง๋ฅผ ์ ์ํ๊ณ ์๋ค.
์๋ฅผ ๋ค์ด '๋ฉ์๋๋ฅผ ํธ์ถํ๊ธฐ ์ '(์ธ์ )์ ํธ๋์ญ์
์์(๊ณตํต ๊ธฐ๋ฅ) ๊ธฐ๋ฅ์ ์ ์ฉํ๋ ๊ฒ์ ์ ์ํ๋ค.
(๋ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ๊ฐ์ผ ๊ฐ์ฒด๋ค - ๊ธฐ๋ฅ์ ์ด๋๋ฐ์ด์ค์์ ์ ์ ํ๋ฏ๋ก)
JoinPoint : Advice๋ฅผ ์ ์ฉ ๊ฐ๋ฅํ ์ง์ ์ ์๋ฏธํ๋ค. ๋ฉ์๋ ํธ์ถ, ํ๋ ๊ฐ ๋ณ๊ฒฝ ๋ฑ์ด Joinpoint์ ํด๋นํ๋ค.
์คํ๋ง์ ํ๋ก์๋ฅผ ์ด์ฉํด์ AOP๋ฅผ ๊ตฌํํ๊ธฐ ๋๋ฌธ์ ๋ฉ์๋ ํธ์ถ์ ๋ํ JoinPoint๋ง ์ง์ํ๋ค.
Pointcut : Advice๋ฅผ ํต์ฌ ๋ก์ง ์ฝ๋์ ์ ์ฉํ๋ ๊ฒ์ weaving์ด๋ผ๊ณ ํ๋ค.
Aspect : ์ฌ๋ฌ ๊ฐ์ฒด์ ๊ณตํต์ผ๋ก ์ ์ฉ๋๋ ๊ธฐ๋ฅ์ Aspect๋ผ๊ณ ํ๋ค. ํธ๋์ญ์
์ด๋ ๋ณด์๋ฑ์ด Aspect์ ์ข์ ์์ด๋ค.
Advice ์ข ๋ฅ
๊ฐ์ฅ ์ฃผ๋ก ์ฌ์ฉ๋๋ ๊ฒ์? Around(๋ชจ๋๋ค ํฌํจ) Advice ์ด๋ค. ์บ์ ๊ธฐ๋ฅ, ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง ๊ธฐ๋ฅ๊ณผ ๊ฐ์ Aspect๋ฅผ ๊ตฌํํ ๋์ ์ฌ์ฉํ๋ค.
Before Advise : ๋์ ๊ฐ์ฒด์ ๋ฉ์๋ ํธ์ถ ์ ์ ๊ณตํต ๊ธฐ๋ฅ์ ์คํํ๋ค.
After Returning Advice : ๋์ ๊ฐ์ฒด์ ๋ฉ์๋๊ฐ ์ต์
์
์์ด ์คํ๋ ์ดํ์ ๊ณตํต ๊ธฐ๋ฅ์ ์คํํ๋ค.
After Throwing Advice : ๋์ ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ์คํํ๋ ๋์ค ์ต์
์
์ด ๋ฐ์ํ ๊ฒฝ์ฐ์ ๊ณตํต ๊ธฐ๋ฅ์ ์คํํ๋ค.
After Advice : Exception ๋ฐ์ ์ฌ๋ถ์ ์๊ด์์ด ๋์ ๊ฐ์ฒด์ ๋ฉ์๋ ์คํ ํ ๊ณตํต ๊ธฐ๋ฅ์ ์คํํ๋ค.
(try-catch-finally์ finally ๋ธ๋ก๊ณผ ๋น์ทํ๋ค.)
์คํ๋ง AOP ๊ตฌํ
@Aspect, @PointCut, @Around๋ฅผ ์ด์ฉํ AOP ๊ตฌํ
- Aspect๋ก ์ฌ์ฉํ ํด๋์ค์ @Aspect ์ ๋ ธํ ์ด์ ์ ๋ถ์ธ๋ค.
- @Pointcut ์ ๋ ธํ ์ด์ ์ผ๋ก ๊ณตํต ๊ธฐ๋ฅ์ ์ ์ฉํ Pointcut์ ์ ์ํ๋ค.
- ๊ณตํต ๊ธฐ๋ฅ์ ๊ตฌํํ ๋ฉ์๋์ @Around ์ ๋ ธํ ์ด์ ์ ์ ์ฉํ๋ค.
๊ฐ๋ฐ์๋ ๊ณตํต ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ Aspect ๊ตฌํ ํด๋์ค๋ฅผ ๋ง๋ค๊ณ ์๋ฐ ์ค์ ์ ์ด์ฉํด์ Aspect๋ฅผ ์ด๋์ ์ ์ฉํ ์ง ์ค์ ํ๋ฉด ๋๋ค.
[Question 2] ์คํ๋ง์์ ์ธ์ฆ๊ณผ ์ธ๊ฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ๋ํด ์ค๋ช ํด๋ณด์ธ์.
- ์คํ๋ง ์ํ๋ฆฌํฐ๋ฅผ ๊ตฌ์ฑํ๋ ์์ญ ๋๊ฐ์ง๋ ์ธ์ฆ๊ณผ ๊ถํ ๋ถ์ฌ ์ ๋๋ค. ์๊ฒฉ ์ฆ๋ช ์ ํตํด ์ ๊ทผ ์ ์ด๊ถ์ ๋ถ์ฌํฉ๋๋ค.
์ธ์ฆ์ ์ฌ์ฉ์๋ฅผ ์๋ณํ๋ ํ๋ก์ธ์ค ์ ๋๋ค.
์ธ์ฆ์ ์ฃผ์ฒด๊ฐ ๋๋ ์ฌ์ฉ์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ๋ด์์ ํ๋์ด ๊ฐ๋ฅํ์ง๋ฅผ ๊ฒ์ฆํ๋ ์ ์ฐจ๋ฅผ ๋งํฉ๋๋ค.
์ด ์ ์ฐจ๋ฅผ ํตํด ์ ๊ทผ์ ์ด ๊ถํ์ ๋ถ์ฌํ๋๋ฐ ์ด๊ฒ์ ์ธ๊ฐ๋ผ๊ณ ํฉ๋๋ค.
์คํ๋ง ์ํ๋ฆฌํฐ์์ ์ ๊ณตํ๋ ํผ ๋ก๊ทธ์ธ ์ธ์ฆ ์ธ๊ฐ ์ ์ฐจ๋ฅผ ๋ฐ๊ธฐ ์ํด์๋ ๊ธฐ๋ณธ์ ์ผ๋ก HTTP ๊ธฐ๋ณธ ์ธ์ฆ ์ ์ฐจ ๋ฐฉ์์ ๋ํ ๋งค์ปค๋์ฆ์ ์๊ณ ์์ด์ผ ํฉ๋๋ค.
-
์คํ๋ง ์ํ๋ฆฌํฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ธ์ ์ฟ ํค ๋ฐฉ์์ผ๋ก ์ธ์ฆํ๋ค.
-
์์ฒญ์ ๋ฐ์ ์ฌ์ฉ์์ ๋ํ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ ์ฅ ๊ฒฐ๊ณผ๊ฐ ์ผ์นํ์ฌ ๊ฒ์ฆ๋ ํ์์ผ ๊ฒฝ์ฐ, JSESSIONID ๋ถ์ฌํ๊ณ ์ด ํ ์์ฒญ์์ JSESSIONID์ ๊ฒ์ฆ ํ ์ ํจํ๋ฉด ์ธ์ฆ์ ์ค๋ค.
์คํ๋ง ์ํ๋ฆฌํฐ Architecture
https://www.notion.so/Spring-security-5f4ffc2605b545ffa0c031d8fece6b5d
Spring Security ์ธ์ฆ ์์
- UserDetailsService ์ loadUserByUsername(String username)๋ก DB์์ ์ ์ ์ ๋ณด๋ฅผ ์กฐํ ํด์จ๋ค.
- AuthenticationProvider ์์ authenticate(Authentication authentication)๋ฉ์๋๋ฅผ ์ด์ฉํ๋ค.
- UserDetailsService.loadUserByUsername(String username) ๋ฉ์๋๋ก ๊ฐ์ง๊ณ ์จ DB ์ ์ ์ ๋ณด์ authenticate(Authentication authentication)๋ก ์ ์ํ ์ ์ ์ ๋ณด(authentication)๋ก ๋น๋ฐ๋ฒํธ๋ฅผ ์ธ์ฆ์ ์ฒ๋ฆฌํ๋ค.
- AuthenticationProvider ์ธ์ฆ์ ์ฑ๊ณตํ๊ฒ๋๋ฉด Authentication๊ฐ์ฒด ๋ฅผ ๋๋ ค์ค๊ฒ๋๋ค.
DB์์ ์ ์ ์ ๋ณด๋ฅผ ๋ถ๋ฌ์ค๋ ค๋ฉด UserDetailsService interface๋ฅผ ์ง์ ๊ตฌํํ๋ฉด ๋๋ค.
๋น๋ฐ๋ฒํธ ๋น๊ต๋ฅผ ์ง์ ๊ตฌํํ๋ ค๋ฉด AuthenticationProvider ๊ตฌํํ๋ฉด ๋๋ค.
AuthenticationProvider์ ๋ฐ๋ก ๊ตฌํ์ํด๋ UserDetailsService๋ก ์ ์ ์ ๋ณด๋ฅผ ์ถ๊ฐํ ์ ์๋ค.
์คํ๋ง ์ํ๋ฆฌํฐ๋ก ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณดํธํ๋ ค๋ฉด ์ด๋ป๊ฒ ํ ๊น?
- ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ์คํ๋ง ์ํ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ์๋ ๋ด์ฉ์ผ๋ก 4๊ฐ์ง ์ ๋์ ์ ์ฉ ๋จ๊ณ๋ฅผ ๋ง์ ๋๋ฆฌ๊ฒ ์ต๋๋ค.
- ์คํ๋ง ์ํ๋ฆฌํฐ ์์กด์ฑ ์ถ๊ฐ
- ๋ชจ๋ ์์ฒญ์ ์ธํฐ์ ํฐ๋ฅผ ์ค์
- ์คํ๋ง ์ํ๋ฆฌํฐ ์ค์
- ๋ก๊ทธ ์์ ๊ธฐ๋ฅ ์ถ๊ฐ
๋ชจ๋ ์์ฒญ์ ์ธํฐ์ ํธ ํ๋๋ก ํํฐ๋ฅผ ์ค์ ํฉ๋๋ค.
- ๋ค์ด์ค๋ ์์ฒญ์ ๋ณด๊ณ ์ฌ์ฉ์๋ฅผ ์ธ์ฆํ๊ณ ์ฌ์ฉ์๊ฐ ์์ ์ ์ํํ ์ ์๋ ์ก์ธ์ค ๊ถํ์ด ์๋ ๊ฒฝ์ฐ์๋ง ์์ ์ ์ํํด๋๋ก ํ ์ ์์ต๋๋ค.
- ์์ฒญ์ ํํฐ๋ก ์ธํฐ์ ํธํด ๋ฐธ๋ฆฌ๋ฐ์ดํธ ํฉ๋๋ค.
- ์ด๋ ๋ก๊ทธ์ธ ์๋ ํ์๋ฑ์ด๋ ํจ์ค์๋๊ฐ ๋ง๋ฃ, ๋์ ์ ์์ ์ ํ์ด๋ Notification ๋ฑ๋ฑ ์ฌ๋ฌ๊ฐ์ง ๊ณ์ ๊ด๋ฆฌ ์ ์ฑ ๋๋ ์ ํจ์ฑ ๊ฒ์ฆ์ ์ธ๋ฐํ๊ณ ์๊ฒฉํ๊ฒ ํ ์ ์์ต๋๋ค.
[Question 3] ์คํ๋ง์์ @Transactional์ ์ด๋ป๊ฒ ๋์ํ๋๊ฐ?
- ์ด๋ฉ์ผ์ด ์ ํจํ์ง ์ฌ๋ถ๋ฅผ ํ๋จํ๊ธฐ ์ํด ์ค์ ๋ก ๊ฒ์ฆ ๋ชฉ์ ์ ๋ฉ์ผ์ ๋ฐ์กํ๋ ์๋น์ค๋ฅผ ์ฌ์ฉํ ๊ฒฝํ์ด ์์ ๊ฒ์ด๋ค.
- ์ด๋ค ์๋น์ค๋ ์ด๋ฉ์ผ์ ํจ๊ป ๋ณด๋ธ ๋งํฌ๋ฅผ ํด๋ฆญํ๋ฉด ์ต์ข ์ ์ผ๋ก ์ด๋ฉ์ผ์ด ์ ํจํ๋ค๊ณ ํ๋จํ๊ณ ํด๋น ์ด๋ฉ์ผ์ ์ฌ์ฉํ ์ ์๋๋กํ๋ค.
- ์ด๋ฉ์ผ ์ธ์ฆ ์์ ์ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ธฐ๋ฅ์ ๋ค์ ์ฝ๋์ฒ๋ผ ํ์ ์ ๋ณด์์ ์ด๋ฉ์ผ์ ์์ ํ๊ณ ์ธ์ฆ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ๋ ์ฟผ๋ฆฌ๋ฅผ ์คํํ ๊ฒ์ด๋ค.
- ๊ทธ๋ฐ๋ฐ ๋ง์ฝ ์ฒซ๋ฒ์งธ ์ฟผ๋ฆฌ๋ฅผ ์คํํ ํ ๋ ๋ฒ์งธ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ์์ ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ์ค๋ณต๋ ๊ฐ์ด ์กด์ฌํด์ INSERT ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋๋ฐ ์คํจํ ์๋ ์๋ค.
- ๋๋ฒ์งธ ์ฟผ๋ฆฌ ์คํ์ ์คํจํ๋ฉด ์ฒซ๋ฒ์งธ ์ฟผ๋ฆฌ ์คํ ๊ฒฐ๊ณผ๋ ์ทจ์ํด์ผ ์ฌ๋ฐ๋ฅธ ์ํ๋ฅผ ์ ์งํ๋ค.
์ด๋ ๊ฒ ๋๊ฐ ์ด์์ด ์ฟผ๋ฆฌ๋ฅผ ํ ์์ ์ผ๋ก ์คํํด์ผ ํ ๋ ์ฌ์ฉํ๋ ๊ฒ์ด ํธ๋์ญ์ ์ด๋ค. ํธ๋์ญ์ ์ ์ฌ๋ฌ ์ฟผ๋ฆฌ๋ฅผ ๋ ผ๋ฆฌ์ ์ผ๋ก ํ๋์ ์์ ์ผ๋ก ๋ฌถ์ด์ค๋ค.
- ํ ํธ๋์ญ์ ์ผ๋ก ๋ฌถ์ธ ์ฟผ๋ฆฌ์ค ํ๋๋ผ๋ ์คํจํ๋ฉด ์ ์ฒด ์ฟผ๋ฆฌ๋ฅผ ์คํจ๋ก ๊ฐ์ฃผํ๊ณ ์คํจ ์ด์ ์ ์คํํ ์ฟผ๋ฆฌ๋ฅผ ์ทจ์ํ๋ค.
- ์ฟผ๋ฆฌ ์คํ ๊ฒฐ๊ณผ๋ฅผ ์ทจ์ํ๊ณ DB๋ฅผ ๊ธฐ์กด ์ํ๋ก ๋๋๋ฆฌ๋ ๊ฒ์ ๋กค๋ฐฑ(rollback) ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- ๋ฐ๋ฉด์ ํธ๋์ญ์ ์ผ๋ก ๋ฌถ์ธ ๋ชจ๋ ์ฟผ๋ฆฌ๊ฐ ์ฑ๊ณตํด์ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ DB์ ๋ฐ์ํ๋ ๊ฒ์ ์ปค๋ฐ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
ํธ๋์ญ์ ์ ์์ํ๋ฉด ํธ๋์ญ์ ์ ์ปค๋ฐํ๊ฑฐ๋ ๋กค๋ฐฑํ ๋๊น์ง ์คํํ ์ฟผ๋ฆฌ๋ค์ด ํ๋์ ์์ ๋จ์๊ฐ ๋๋ค.
[@Transactional์ ์ด์ฉํ ํธ๋์ ์ ์ฒ๋ฆฌ]
- ํธ๋์ญ์ ๋ฒ์์์ ์คํํ๊ณ ์ถ์ ๋ฉ์๋์ @Transactional ์ ๋ ธํ ์ด์ ๋ง ๋ถ์ด๋ฉด ๋๋ค.
- ํ๋ซํผ ํธ๋์ญ์ ๋งค๋์ (PlatformTransactionManager) ๋น ์ค์
- @Transactional ์ ๋ ธํ ์ด์ ํ์ฑํ ์ค์
@Configuration
@EnableTractionManagement
public class AppCtx {
DataSource dataSource() {
ds.setDriverClassName("com.mysql.jdbc.Driver");
}
}
@Bean
public PlatformTransactionManager transactionManager() {
DataSourceTransactionManager tm = new DataSourceTransactionManager();
tm.setDataSource(dataSource());
return tm;
}
JAVA
์๋ฐ์์ ์ฐ๋ ๋๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ๊ณผ ๋๊ธฐํ๋๋ ๊ณผ์ ์ ์ค๋ช ํ์์ค.
hashCode() ๊ฐ์ด ๋ชจ๋ ๊ฐ๋ค๋ฉด ์ด๋ค ์ผ์ด ๋ฒ์ด์ง๋์? hashcode()์ equls()๋ ์ธ์ ์ฌ์ฉํ๊ณ ์ ์ฌ์ฉํ๋์ง?
ํจ๋ฌ๋ดGC, G1GC์ ์ฐจ์ด์ ์ค๋ช ํด์ฃผ์ธ์
DATABASE/SQL
SQL์ HINT๋ฅผ ์ค๋ช ํด์ฃผ์ธ์.
memcached๋ณด๋ค redis์ ๊ณตํต์ ๊ณผ ์ฐจ์ด์ ์?
ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค (Isolation Level) ์ ๋ํด์ ์ค๋ช ํ์ธ์.
https://www.byteslounge.com/tutorials/spring-transaction-isolation-tutorial
- ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค์ ์ข ๋ฅ
- READ UNCOMMITTED
- READ COMMITTED
- REPEATABLE READ
- SELIALIZABLE