week 4 incheol - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki
-
๋ฉํฐ ์ค๋ ๋ : ์ผ๋ฐ์ ์ผ๋ก ํ๋ก๊ทธ๋จ์ ์คํํ๊ฒ ๋๋ฉด, main() ํจ์๊ฐ ์คํ๋๋ฉด์, ํ๋์ ํ๋ก์ธ์ค๊ฐ ์งํ๋๋ค. ์ด๋ฐ ํ๋์ ํ๋ก์ธ์ค๋ฅผ ๋ฉ์ธ ์ค๋ ๋๋ผ๊ณ ๋ณด๋ฉด ๋๋๋ฐ, ๋ฉ์ธ ์ค๋ ๋ ํ๋๋ง ์๋ ๊ฒ์ ์ฑ๊ธ ์ค๋ ๋(single-thread) ๋ผ๊ณ ํ๋ฉฐ, ์ค๋ ๋๊ฐ ์ฌ๋ฌ๊ฐ์ธ ๊ฒ์ ๋ฉํฐ ์ค๋ ๋(Multi-thread) ํน์ ๋ค์ค ์ค๋ ๋๋ผ ํ๋ค.
-
์ค๋ ๋ ์ธ์ดํํฐ :
- synchronized : ํด๋น ์์ญ์ ๋ฝ์ ๊ฑธ์ด์ ์ฐ๋ ๋ ์ธ์ดํํ๋๋ก ์ ์งํ๋ค. ์ฅ์ ์ ๋ฉํฐ ์ฐ๋ ๋ ๊ฐ์ ๊ณต์ ๋ ๋ฐ์ดํฐ์ ๋ํด์ ๋๊ธฐํ๋ฅผ ๋ณด์ฅํ๋ค๋ ์ฅ์ ์ด ์์ง๋ง, ๋ฝ์ ๊ฑธ๊ธฐ ๋๋ฌธ์ ๋ฉํฐ ๋ค์ ์ง์ฐ์ด ๋ฐ์ํ ์ ์๊ณ ์ต์
์ ๊ฒฝ์ฐ ๋ค์์ ๋ณ๋ชฉํ์์ด ๋ฐ์ํ ์ ์๋ค.
- block scope : ํน์ ์์ญ์ block scope๋ก ๊ฑธ์ด๋๋ค.
- method scope : ๋ฉ์๋์ ๋๊ธฐํ๋ฅผ ๋ณด์ฅํ๋ค.
- volatile : ๋ฉํฐ ์ฐ๋ ๋ ํ๊ฒฝ์์ ๋๊ธฐํ๋ ๋ฐ์ดํฐ์ ๊ฐ์์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํจ์ด๋ค. ๋์ ๋ค์์ ์ฐ๋ ๋๊ฐ writeํ ๊ฒฝ์ฐ์ ๋๊ธฐํ๋ฅผ ๋ณด์ฅํ ์ ์๊ณ , ํ๋์ ์ฐ๋ ๋๊ฐ write๋ฅผ ์ํํ๊ณ ๋ค๋ฅธ ์ฐ๋ ๋๋ readํ๋ ๊ฒฝ์ฐ์๋ง ์ ํจํ๋ค. ๊ทธ ์ด์ ๋ ๋ฉํฐ ์ฐ๋ ๋ ํ๊ฒฝ์์ ๊ฐ๊ฐ์ ์ฐ๋ ๋๋ ์ฐ๋ ๋ ์บ์๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ ์ฐ๋ ๋ ์บ์์์ ๊ด๋ฆฌ๋๋ค. ๊ทธ๋ฌ๋ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋ ๋ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์์ ์ง์ ์ํํ๊ณ ์ฐ๋ ๋ ์บ์์ ๋ฐ์๋๋ค. non-volatile ๋ณ์์ ๋ํ ์์ ์ JVM ์ด ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ๋ก๋ถํฐ CPU ์บ์๋ก ๋ณ์๋ฅผ ์ฝ์ด๋ค์ด๊ฑฐ๋, CPU ์บ์๋ก๋ถํฐ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ฑฐ๋ ํ ๋์ ๋ํ ์ด๋ ํ ๋ณด์ฅ๋ ํ์ง ์๋๋ค. ํ ์ฐ๋ ๋๊ฐ volatile ๋ณ์๋ฅผ ์์ ํ ๋, ๋จ์ง ์ด volatile ๋ณ์๋ง์ด ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ๋ก ์ ์ฅ๋๋ ๊ฒ์ด ์๋๋ผ, ์ด ์ฐ๋ ๋๊ฐ volatile ๋ณ์๋ฅผ ์์ ํ๊ธฐ ์ ์ ์์ ํ ๋ชจ๋ ๋ณ์๋ค์ด ํจ๊ป ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ(flushed)๋๋ค.
- concurrentpage โ atomic***
- synchronized : ํด๋น ์์ญ์ ๋ฝ์ ๊ฑธ์ด์ ์ฐ๋ ๋ ์ธ์ดํํ๋๋ก ์ ์งํ๋ค. ์ฅ์ ์ ๋ฉํฐ ์ฐ๋ ๋ ๊ฐ์ ๊ณต์ ๋ ๋ฐ์ดํฐ์ ๋ํด์ ๋๊ธฐํ๋ฅผ ๋ณด์ฅํ๋ค๋ ์ฅ์ ์ด ์์ง๋ง, ๋ฝ์ ๊ฑธ๊ธฐ ๋๋ฌธ์ ๋ฉํฐ ๋ค์ ์ง์ฐ์ด ๋ฐ์ํ ์ ์๊ณ ์ต์
์ ๊ฒฝ์ฐ ๋ค์์ ๋ณ๋ชฉํ์์ด ๋ฐ์ํ ์ ์๋ค.
-
์ค๋ ๋ ํ : ์ค๋ ๋๋ฅผ ๋ฏธ๋ฆฌ ์์ฑํด๋์ ์ผ๋ จ์ ์ค๋ ๋ ์งํฉ์ด๋ค. ์ค๋ ๋ ํ์ด ํ์ํ ์ด์ ๋ ์ด๋ค ํ๋ก์ธ์ค๊ฐ ์คํ๋ ๋ ์ค๋ ๋๋ฅผ ์์ฑํ ์๋ ์๊ฒ ์ง๋ง ์คํ๋ ๋๋ง๋ค ์ค๋ ๋๋ฅผ ์์ฑํ๊ณ ์๋ฉธํ๋ ๋น์ฉ์ ๋ฌด์ํ์ง ์์ ์ ์๋ค. ๊ทธ๋ฌ๋ฏ๋ก ํน์ ์ค๋ ๋๋ฅผ ๋ฏธ๋ฆฌ ์์ฑํ์ฌ ํ๋ก์ธ์ค๊ฐ ์คํ๋ ๋๋ง๋ค ์ค๋ ๋ํ์ ์ฌ์ฉํ์ฌ ํ๋ก์ธ์ค๋ฅผ ์ํํ๊ฒ ๋๋ฉด ๋ ํจ์จ์ ์ผ๋ก ํ๋ก์ธ์ค๋ฅผ ์ํํ ์ ์๋ค. ์๋ฐ์์๋ ์ค๋ ๋ํ์ ์์ฑํ๊ณ ์ฌ์ฉํ ์ ์๋๋ก java.util.concurrent Package์์ ExecutorService ์ธํฐํ์ด์ค์ Excutors ํด๋์ค๋ฅผ ์ ๊ณตํ๊ณ ์๋ค. Executors์ ๋ค์ํ ์ ์ ๋ฉ์๋๋ฅผ ํตํด Executor Service ๊ตฌํ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ๊ทธ๊ฒ์ด ๋ฐ๋ก ์ค๋ ๋ ํ์ด๋ค.
- ์ค๋ ๋ ํ์ ์คํ์ํค๊ธฐ ์ํ ๋ฉ์๋๋ execute(), submit()์ด ์๋ค.
- ์ฅ์
- ํ๋ก๊ทธ๋จ ์ฑ๋ฅ์ ํฅ์ ์ํฌ ์ ์๋ค.
- ๋ค์์ ์ฌ์ฉ์ ์์ฒญ์ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌ ๊ฐ๋ฅํ๋ค.
- ๋จ์
- ๋๋ฌด ๋ง์ด ์์ฑํด๋์ผ๋ฉด ์คํ๋ ค ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ๋ฐ์ํ ์ ์๋ค.
- ๋ ธ๋ ์ค๋ ๋๊ฐ ๋ฐ์๋ ์ ์๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด์๋ ์๋ฐ์์๋ forkJoinPool์ ์ง์ํ๋ค.
- ForkJoinPool์ ์ ์ฐจ๋ฅผ ์กฐ๊ธ ๋ ์์ธํ ์ด์ผ๊ธฐ ํ๋ฉด
- ํฐ ์ ๋ฌด๋ฅผ ์์ ๋จ์์ ์ ๋ฌด๋ก ์ชผ๊ฐ ๋ค.
- ๋ถ๋ชจ ์ฐ๋ ๋๋ก ๋ถํฐ ์ฒ๋ฆฌ๋ก์ง์ ๋ณต์ฌํ์ฌ ์๋ก์ด ์ฐ๋ ๋์์ ์ชผ๊ฐ์ง ์ ๋ฌด๋ฅผ ์ํ(Fork) ์ํจ๋ค.
- 2์ ๋ฐ๋ณตํ๋ค๊ฐ, ํน์ ์ฐ๋ ๋์์ ๋์ด์ Fork๊ฐ ์ผ์ด๋์ง ์๊ณ ์ ๋ฌด๊ฐ ์๋ฃ๋๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ถ๋ชจ ์ฐ๋ ๋์์ Joinํ์ฌ ๊ฐ์ ์ทจํฉํ๋ค.
- 3์ ๋ฐ๋ณตํ๋ค๊ฐ ์ต์ด์ ForkJoinPool์ ์์ฑํ ์ฐ๋ ๋๋ก ๊ฐ์ ๋ฆฌํดํ์ฌ ์์ ์ ์๋ฃํ๋ค.
๊ทธ๋ฆผ์ผ๋ก ๋ฐ์ง๋ฉด ์๋์ ๊ฐ์ด Fork๊ฐ ํ๋ฒ ์ผ์ด๋ ํ์คํฌ์์์์๋ Join์ ํด์ ๊ฒฐ๊ณผ๋ฅผ ์ทจํฉํ๋ ๋ฐฉ์์ด๋ผ๊ณ ๋ณผ์ ์๋ค..
๊ทธ๋ฆผ 1)
hashtable๊ณผ hashmap
HashMap๊ณผ HashTable์ ๋์ผํ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ง๋ง HashTable์ ๊ฒฝ์ฐ๋ ๋๊ธฐํ๋ ๋ฉ์๋๋ก ๊ตฌ์ฑ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋ฉํฐ ์ค๋ ๋๊ฐ ๋์์ ์ด ๋ฉ์๋๋ฅผ ์คํํ ์ ์๊ณ , ํ๋์ ์ค๋ ๋๊ฐ ์คํ์ ์๋ฃํด์ผ๋ง ๋ค๋ฅธ ์ค๋ ๋๊ฐ ์คํ๊ฐ๋ฅํ๋ค.
์ด๋ ๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์์ ์์ ํ๊ฒ ๊ฐ์ฒด๋ฅผ ์ถ๊ฐ, ์ญ์ ํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋๊ธฐํ๊ฐ ํ์ ์๋ค๋ฉด HashMap์, ๋๊ธฐํ ๋ณด์ฅ์ด ํ์ํ๋ค๋ฉด Hashtable์ ์ฌ์ฉํ๋ฉด๋๋ค.
HashMap๊ณผ Hashtable์ ๋๊ธฐํ๋ฅผ ๋ณด์ฅํ๋๋ ํ์ง ์๋๋๋ ์ธก๋ฉด ์ด์ธ์๋ ์ฐจ์ด๊ฐ ๊ฑฐ์ ์๋ค. ์ฌ์ฉ๋ฒ๋ ๋๊ฐ์, put() ๋ฉ์๋๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ๊ณ , get() ๋ฉ์๋๋ก ์ถ์ถํ๋ฉด๋๋ค.
Vector๋ ๋ฐ์ดํฐ(Data)์ ํด๋นํ๋ ๊ฐ์ฒด๋ง์ ์ด์ฉํ์ง๋ง, Hashtable์ Map ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค์ด๊ธฐ ๋๋ฌธ์ ๊ฒ์์ ์ํ ํค์ ๊ฐ์ ํจ๊ป ๋ฃ์ด์ฃผ์ด์ผ ํ๋ค.
- ์ง๋ ฌํ๋ data๋ฅผ ์ธ๋ถ ์์คํ ์๋ ์ฌ์ฉํ ์ ์๋๋ก byte ํํ๋ก ์ ๊ณตํด์ฃผ๊ธฐ ์ํ ๊ธฐ๋ฅ์ด๋ค.
- serialversionUID๊ฐ์ ์ง๋ ฌํํ๋ฉด์ ํจ๊ป ์ ์ํด์ฃผ๋๋ฐ ๊ทธ ์ด์ ๋ ์ญ์ง๋ ฌํํ ๊ฒฝ์ฐ์ ๋ชจ๋ธ์ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ UID๊ฐ ๋ณ๊ฒฝ๋์ด ์ค๋ฅ๋ฅผ ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
-
String
->StringBuilder
,int
->long
์ผ๋ก ๋ณ๊ฒฝํด๋ ์ญ์ง๋ ฌํ์์Exception
์ด ๋ฐ์ํฉ๋๋ค. - ์๋ฐ ์ง๋ ฌํ๋ ์๋นํ ํ์ ์ ์๊ฒฉํ๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
- ๋ฉค๋ฒ ๋ณ์๊ฐ ๋น ์ง๊ฒ ๋๋ค๋ฉด Exception ๋์ null๊ฐ์ด ๋ค์ด๊ฐ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
์ ๊ทธ๋ฆผ์ ๋์ ํ๋ก์ฐ๋ฅผ ๊ฐ๋จํ ์ค๋ช ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- WebSecurityConfigurerAdapter ๋ ์คํ๋ง ์ํ๋ฆฌํฐ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ ๋ณด์ ์ค์ ์ผ๋ก ๊ตฌ์ฑ๋ ํด๋์ค ๊ตฌํ์ฒด์ด๋ค. ์ด๋ฅผ ์์๋ฐ์ ํ์ํ ๋ถ๋ถ๋ง ์์ ํ๋ฉด ๋๋ค. ๊ทธ๋์ ์ ๊ทผ ๊ถํ์ด๋ ๋ก๊ทธ์ธ ์ฒ๋ฆฌ๋ฐฉ์ ๋ฑ๋ฑ์ ๋ํด ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊ฑด์ง ๊ฒฐ์ ํ์ฌ configure ๊ธฐ๋ฅ์ ๊ตฌํํ๋ฉด ๋๋ค.
- ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ ์ ๋ณด์ ํจ๊ป ์ธ์ฆ ์์ฒญ(Http Request)
- AuthenticationFilter๊ฐ ์ด ์์ฒญ์ ๊ฐ๋ก์ฑ๋๋ค. ์ด ๋ ๊ฐ๋ก์ฑ ์ ๋ณด๋ฅผ ํตํด UsernamePasswordAuthenticationToken์ด๋ผ๋ ์ธ์ฆ์ฉ ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค.
- AuthenticationManager์ ๊ตฌํ์ฒด์ธ ProviderManager์๊ฒ UsernamePasswordAuthenticationToken ๊ฐ์ฒด๋ฅผ ์ ๋ฌํฉ๋๋ค.
- ๋ค์ AuthenticationProvider์ UsernamePasswordAuthenticationToken ๊ฐ์ฒด๋ฅผ ์ ๋ฌํฉ๋๋ค.
- ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฌ์ฉ์ ์ธ์ฆ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ UserDetailsService์ ์ฌ์ฉ์ ์ ๋ณด(์์ด๋)๋ฅผ ๋๊ฒจ์ค๋๋ค.
- ๋๊ฒจ๋ฐ์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ํตํด DB์์ ์ฐพ์ ์ฌ์ฉ์ ์ ๋ณด์ธ UserDetails ๊ฐ์ฒด๋ฅผ ๋ง๋ญ๋๋ค. ์ด ๋ UserDetails ๋ ์ธ์ฆ์ฉ ๊ฐ์ฒด์ ๋๋ฉ์ธ์ฉ ๊ฐ์ฒด๋ฅผ ๋ถ๋ฆฌํ์ง ์๊ณ ์ธ์ฆ์ฉ ๊ฐ์ฒด์ ์์ํด์ ์ฌ์ฉํ๊ธฐ๋ ํฉ๋๋ค.
- AuthenticationProvider๋ UserDetails๋ฅผ ๋๊ฒจ๋ฐ๊ณ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋น๊ตํฉ๋๋ค.
- ์ธ์ฆ์ด ์๋ฃ๋๋ฉด ๊ถํ ๋ฑ์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋ด์ Authentication ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค.
- ๋ค์ ์ต์ด์ AuthenticationFilter์ Authentication ๊ฐ์ฒด๊ฐ ๋ฐํ๋ฉ๋๋ค.
- Authentication ๊ฐ์ฒด๋ฅผ SecurityContext์ ์ ์ฅํฉ๋๋ค.
์ต์ข ์ ์ผ๋ก SecurityContextHolder๋ ์ธ์ ์์ญ์ ์๋ SecurityContext์ Authentication ๊ฐ์ฒด๋ฅผ ์ ์ฅํฉ๋๋ค. ์ธ์ ์ ์ฌ์ฉ์์ ๋ณด๋ฅผ ์ ์ฅํ๋ค๋ ๊ฒ์ ์คํ๋ง ์ํ๋ฆฌํฐ๊ฐ ์ ํต์ ์ธ ์ธ์ -์ฟ ํค ๊ธฐ๋ฐ์ ์ธ์ฆ ๋ฐฉ์์ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
๋ฉ์์ง ํ์ ์ฅ์
-
๋น๋๊ธฐ(Asynchronous): Queue์ ๋ฃ๊ธฐ ๋๋ฌธ์ ๋์ค์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
-
๋น๋์กฐ(Decoupling): ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋ถ๋ฆฌํ ์ ์์ต๋๋ค.
-
ํ๋ ฅ์ฑ(Resilience): ์ผ๋ถ๊ฐ ์คํจ ์ ์ ์ฒด์ ์ํฅ์ ๋ฐ์ง ์์ต๋๋ค.
-
๊ณผ์(Redundancy): ์คํจํ ๊ฒฝ์ฐ ์ฌ์คํ ๊ฐ๋ฅํฉ๋๋ค.
-
๋ณด์ฆ(Guarantees): ์์ ์ด ์ฒ๋ฆฌ๋๊ฑธ ํ์ธํ ์ ์์ต๋๋ค.
-
ํ์ฅ์ฑ(Scalable): ๋ค์์ ํ๋ก์ธ์ค๋ค์ด ํ์ ๋ฉ์์ง๋ฅผ ๋ณด๋ผ ์ ์์ต๋๋ค.
๋ฉ์์ง ํ ์ฌ์ฉ์ฒ
-
๋ค๋ฅธ ๊ณณ์ API๋ก ๋ถํฐ ๋ฐ์ดํฐ ์ก์์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
-
๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋น๋๊ธฐ ํต์ ์ ํ ์ ์์ต๋๋ค.
-
์ด๋ฉ์ผ ๋ฐ์ก ๋ฐ ๋ฌธ์ ์ ๋ก๋๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
-
๋ง์ ์์ ํ๋ก์ธ์ค๋ค์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
RabbitMQ
-
๊ตฌ์ฑ์ด ์ฝ๋ค.
-
์ ์ฐํ ๋ผ์ฐํ ์ด ๊ฐ๋ฅํ๋ฉด ๊ด๋ฆฌ UI ๊ฐ ํธ๋ฆฌํ๋ค.
-
์ ํ ์ฑ์๋๊ฐ ๋๋ค.
-
๊ฐ๋ฐฉํ ํ๋กํ ์ฝ์ ์ํ AMQP ๋ฅผ ๊ตฌํ์ํด ๊ฐ๋ฐ
-
ํ์์ ๋ฐ๋ผ ๋๊ธฐ/๋น๋๊ธฐ์์ด ๊ฐ๋ฅํจ
-
์๋น์์ค์ฌ์ ์ค๊ณ
-
20k/sec ์ฒ๋ฆฌ๋ฅผ ๋ณด์ฅ
Apache Kafka
-
๊ตฌ๋ ๋ฐฉ์์ ๋น๋๊ธฐ์ ๊ตฌ์ฑ
-
๊ณ ์ฑ๋ฅ ๊ณ ๊ฐ์ฉ์ฑ
-
๋ถ์ฐ์ฒ๋ฆฌ์ ํจ๊ณผ์ ์ผ๋ก ์ค๊ณ ๋จ.
-
์์ฐ์ ์ค์ฌ์ ์ค๊ณ
-
๋ฒ์ฉ ๋ฉ์ธ์ง ์์คํ ์์ ์ ๊ณต๋๋ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณต๋์ง ์์.
-
100k/sec ์ฒ๋ฆฌ๋ฅผ ๋ณด์ฅ
-
๊ฒฐ๋ก
๊ธฐ์กด์ ๋ฉ์์ง ์์คํ ์์๋ broker๊ฐ consumer์๊ฒ ๋ฉ์์ง๋ฅผ pushํด ์ฃผ๋ ๋ฐฉ์์ธ๋ฐ ๋ฐํด, Kafka๋ consumer๊ฐ broker๋ก๋ถํฐ ์ง์ ๋ฉ์์ง๋ฅผ ๊ฐ์ง๊ณ ๊ฐ๋ pull ๋ฐฉ์์ผ๋ก ๋์ํฉ๋๋ค. ๋ฐ๋ผ์ consumer๋ ์์ ์ ์ฒ๋ฆฌ๋ฅ๋ ฅ๋งํผ์ ๋ฉ์์ง๋ง broker๋ก๋ถํฐ ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์ ์ต์ ์ ์ฑ๋ฅ์ ๋ผ ์ ์์ต๋๋ค.
-
๊ธฐ์กด์ push ๋ฐฉ์์ ๋ฉ์์ง ์์คํ ์์๋ broker๊ฐ ์ง์ ๊ฐ consumer๊ฐ ์ด๋ค ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๋์ง ๊ณ์ฐํ๊ณ ์ด๋ค ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌ ์ค์ธ์ง ํธ๋ํนํ์๋ค๋ฉด, Kafka์์๋ consumenr๊ฐ ์ง์ ํ์ํ ๋ฉ์์ง๋ฅผ broker๋ก ๋ถํฐ pullํ๋ฏ๋ก broker์ consumer์ ๋ฉ์์ง ๊ด๋ฆฌ์ ๋ํ ๋ถ๋ด์ด ๊ฒฝ๊ฐ๋์์ต๋๋ค.
-
๋ฉ์์ง๋ฅผ pull ๋ฐฉ์์ผ๋ก ๊ฐ์ ธ์ค๋ฏ๋ก, ๋ฉ์์ง๋ฅผ ์์๋์๋ค๊ฐ ์ฃผ๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ batch consumer์ ๊ตฌํ์ด ๊ฐ๋ฅํฉ๋๋ค.
ํ์ ๊ธฐ๋ฅ์ **๊ธฐ์กด์ JMS์ AMQP ๊ธฐ๋ฐ์ RabbitMQ(๋ฐ์ดํฐ ๊ธฐ๋ฐ ๋ผ์ฐํ , ํ๋ฐ๋ ์ด์ ๊ธฐ๋ฅ ๋ฑ)**๋ฑ์ ๋นํด์๋ ๋ง์ด ๋ถ์กฑํ์ง๋ง ๋์ฉ๋ ๋ฉ์ธ์ง๋ฅผ ์ง์ํ ์ ์๋ ๊ฒ์ด ๊ฐ์ฅ ํฐ ํน์ง์ ๋๋ค. ํนํ ๋ถ์ฐํ๊ฒฝ์์ ์ฉ๋ ๋ฟ ์๋๋ผ, ๋ณต์ฌ๋ณธ์ ๋ค๋ฅธ ๋ ธ๋์ ์ ์ฅํจ์ผ๋ก์จ ๋ ธ๋ ์ฅ์ ์ ๋ํ ์ฅ์ ๋์์ฑ์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ์ฉ๋์๋ ํ์คํ๊ฒ ๊ฐ์ ์ ์ง๋๊ณ ์์ต๋๋ค.
-
-
Filter์ Interceptor๋ ์คํ๋๋ ์์ ์ด ๋ค๋ฅด๋ค.
-
Filter๋ Web Application์ ๋ฑ๋ก์ ํ๊ณ , Interceptor๋ Spring์ Context์ ๋ฑ๋ก์ ํ๋ค.
-
Interceptor๋ ServletDispatcher ๋ด์ ์คํํจ. ๋ฐ๋ผ์ @ControllerAdvice @ExceptionHandler๋ฅผ ์ด์ฉํด ์์ธ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค
-
Interceptor๋ Handler๋ฅผ ์คํํ๊ธฐ์ (preHandle), Handler๋ฅผ ์คํํ ํ(postHandle), view๋ฅผ ๋ ๋๋งํ ํ(afterCompletion) ๋ฑ, Servlet๋ด์์๋ ๋ฉ์๋์ ๋ฐ๋ผ ์คํ ์์ ์ ๋ค๋ฅด๊ฒ ๊ฐ์ ธ๊ฐ๋ค.
-
Filter๋ ServletRequest ํน์ ServletResponse๋ฅผ ๊ต์ฒดํ ์ ์๋ค. ์๋์ ๊ฐ์ ์ผ์ด ๊ฐ๋ฅํ๋ค.
public class SomeFilter implements Filter { //... public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) { chain.doFilter(new CustomServletRequest(), new CustomResponse()); } }
-
Interceptor์ Filter๋ Servlet ๋จ์์์ ์คํ๋๋ค. <> ๋ฐ๋ฉด AOP๋ ๋ฉ์๋ ์์ Proxyํจํด์ ํํ๋ก ์คํ๋๋ค.
-
ํํฐ๋ ๋น์ ์๋๋ค.
-
ํ์ง๋ง ๋น ์ค์ ์ผ๋ก ๋ฑ๋ก์ ํ ์ ์๋ค.
-
ํํฐ๋ ๋น์ ์๋๊ธฐ ๋๋ฌธ์ ํด๋น ํํฐ๋ฅผ ๋ค๋ฅธ ๋น์ ์ฃผ์ ๋ ์๋ ์๋ค.
-
ํํฐ๋ ๋ณธ์ธ์ ์ฃผ์ ๋ ์ ์์ด๋ ๋ค๋ฅธ ๋น๋ค์ ์ฃผ์ ํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
-
๊ทธ๋ฌ๋ฏ๋ก ์๋ธ๋ฆฟ ํํฐ๋ ์คํ๋ง ์ํ๋ฆฌํฐ ํํฐ๋ ๊ฐ์ ๋ฒ์์ด๋ค.
-
์ฐจ์ด๊ฐ ์๋ค๊ณ ํ๋ฉด ์ํ๋ฆฌํฐ ํํฐ๋ ์ํ๋ฆฌํฐ์ ๊ดํ ๋น๋ค์ ์ฌ์ฉํ ํ์ฅ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์๋ค.
- ํ ํธ๋์ญ์
์์ ์ฝ์ด๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ํธ๋์ญ์
์์ ๋ฐฐํ์ ์ผ๋ก ์์ ํ๊ธฐ ์ํด ๋ฝ์ ํ๋ํ๋ ค ํ ๋ (์ฝ์ด๊ฐ๋ ๊ฒ์ ํ์ฉ) ๊ธฐ๋ค๋ฆฌ๊ฒ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด
SELECT ... LOCK IN SHARE MODE
์ฌ์ฉ - ํ ํธ๋์ญ์
์์ ์ฝ์ด๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ํธ๋์ญ์
์์ ๋ฐฐํ์ ์ผ๋ก ์ฝ๊ฑฐ๋, ์์ ํ๊ธฐ ์ํด ๋ฝ์ ํ๋ํ๋ คํ ๋ ๊ธฐ๋ค๋ฆฌ๊ฒ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด
SELECT ... FOR UPDATE
์ฌ์ฉ
๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๋์ 3๋จ๊ณ
-
์ธ๋ฑ์ค๋ ํ๋์ ํ ์ด๋ธ์ ์์ฑํด ๊ฐ์ ์ ์ฅํด๋๊ณ ์ฌ์ฉํ๋ค. ๊ทธ๋์ ๋ค๋ฅธ ํ ์ด๋ธ์ ์์กด์ ์ธ ์๋ก์ด ํ ์ด๋ธ์ด ํ๋ ์์ฑ๋๋ค๋ ์ ์์ ๋ฌด๋ถ๋ณํ ์ธ๋ฑ์ค ์์ต์ ์คํ๋ ค ์ฑ๋ฅ ์ ํ๋ฅผ ์ด๋ํ ์ ์๋ค.
-
์ธ๋ฑ์ค ํ ์ด๋ธ์ '์ด์งํธ๋ฆฌ ๊ฒ์'์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๋ ฌ๋์ด ์๋ค. ๊ทธ๋์ ๋ง์ฝ ์ธ๋ฑ์ค ํ ์ด๋ธ์ด ์ฐธ์กฐํ๋ ํ ์ด๋ธ์์ '์ฝ์ ', '์ญ์ ', '์์ '์ด ์์ฃผ ์ผ์ด๋๊ฒ ๋๋ค๋ฉด ์ธ๋ฑ์ค ํ ์ด๋ธ์์๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌํ๋ฉด์ ์ฝ์ , ์ญ์ , ์์ ์ด ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ ์ ์ฒด์ ์ธ ์ฑ๋ฅ ์ ํ๋ฅผ ์ด๋ํ ์ ์๋ค.
-
์ธ๋ฑ์ค๋ '๊ฒ์'์ ์ต์ ํ๋ ๊ธฐ๋ฅ์ด๊ธฐ ๋๋ฌธ์ ์ฝ์ , ์ญ์ , ์์ ์ด ์์ฃผ ์ผ์ด๋๋ ๋น์ฆ๋์ค ๋ก์ง ํน์ ํ ์ด๋ธ ์ฌ์ฉ ์ฉ๋์ ๋ฐ๋ผ ์ธ๋ฑ์ค ์ฌ์ฉ ์ฌ๋ถ๋ฅผ ์ ์คํ๊ฒ ๊ณ ๋ฏผํด๋ด์ผ ํ๋ค.
-
๊ฒฐํฉ ์ธ๋ฑ์ค๋ฅผ ์ธ์ ์ฌ์ฉํ๋ฉด ์ข์๊น?
- AND ์ฐ์ฐ์์ ์ํด ์์ฃผ ๊ฐ์ด ์ง์ ๋๋ ์ปฌ๋ผ๋ค
- ๋ค์์ ์ฌ๋ฌ ๊ฐ์ ์ง์๊ฐ ํน์ ์ปฌ๋ผ๋ค์ ์ง์
-
์ฆ, ์ฌ๋ฌ ์ปฌ๋ผ์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ์ก๋๋ค๋ฉด ์นด๋๋๋ฆฌํฐ๊ฐ ๋์์์์ ๋ฎ์์์ผ๋ก (group_no, from_date, is_bonus) ๊ตฌ์ฑํ๋๊ฒ ๋ ์ฑ๋ฅ์ด ๋ฐ์ด๋ฉ๋๋ค.
-
์ธ๋ฑ์ค ์กฐํ์ ์ฃผ์ ์ฌํญ
-
between
,like
,<
,>
๋ฑ ๋ฒ์ ์กฐ๊ฑด์ ํด๋น ์ปฌ๋ผ์ ์ธ๋ฑ์ค๋ฅผ ํ์ง๋ง, ๊ทธ ๋ค ์ธ๋ฑ์ค ์ปฌ๋ผ๋ค์ ์ธ๋ฑ์ค๊ฐ ์ฌ์ฉ๋์ง ์์ต๋๋ค.- ์ฆ,
group_no, from_date, is_bonus
์ผ๋ก ์ธ๋ฑ์ค๊ฐ ์กํ์๋๋ฐ ์กฐํ ์ฟผ๋ฆฌ๋ฅผwhere group_no=XX and is_bonus=YY and from_date > ZZ
๋ฑ์ผ๋ก ์ก์ผ๋ฉด is_bonus๋ ์ธ๋ฑ์ค๊ฐ ์ฌ์ฉ๋์ง ์์ต๋๋ค. - ๋ฒ์์กฐ๊ฑด์ผ๋ก ์ฌ์ฉํ๋ฉด ์๋๋ค๊ณ ๊ธฐ์ตํ์๋ฉด ์ข ๋ ์ฝ์ต๋๋ค.
- ์ฆ,
- ๋ฐ๋๋ก
=
,in
์ ๋ค์ ์ปฌ๋ผ๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค.-
in
์ ๊ฒฐ๊ตญ=
๋ฅผ ์ฌ๋ฌ๋ฒ ์คํ์ํจ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. - ๋จ,
in
์ ์ธ์๊ฐ์ผ๋ก ์์๊ฐ ํฌํจ๋๋ฉด ๋ฌธ์ ์์ง๋ง, ์๋ธ์ฟผ๋ฆฌ๋ฅผ ๋ฃ๊ฒ๋๋ฉด ์ฑ๋ฅ์ ์ด์๊ฐ ๋ฐ์ํฉ๋๋ค. -
in
์ ์ธ์๋ก ์๋ธ์ฟผ๋ฆฌ๊ฐ ๋ค์ด๊ฐ๋ฉด ์๋ธ์ฟผ๋ฆฌ์ ์ธ๋ถ๊ฐ ๋จผ์ ์คํ๋๊ณ ,in
์ ์ฒดํฌ์กฐ๊ฑด์ผ๋ก ์คํ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
-
-
AND
์ฐ์ฐ์๋ ๊ฐ ์กฐ๊ฑด๋ค์ด ์ฝ์ด์์ผํ ROW์๋ฅผ ์ค์ด๋ ์ญํ ์ ํ์ง๋ง,or
์ฐ์ฐ์๋ ๋น๊ตํด์ผํ ROW๊ฐ ๋ ๋์ด๋๊ธฐ ๋๋ฌธ์ ํ ํ ์ด๋ธ ์ค์บ์ด ๋ฐ์ํ ํ๋ฅ ์ด ๋์ต๋๋ค.-
WHERE
์์OR
์ ์ฌ์ฉํ ๋๋ ์ฃผ์๊ฐ ํ์ํฉ๋๋ค.
-
- ์ธ๋ฑ์ค๋ก ์ฌ์ฉ๋ ์ปฌ๋ผ๊ฐ ๊ทธ๋๋ก ์ฌ์ฉํด์ผ๋ง ์ธ๋ฑ์ค๊ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ์ธ๋ฑ์ค๋ ๊ฐ๊ณต๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์์ง ์์ต๋๋ค.
-
where salary * 10 > 150000;
๋ ์ธ๋ฑ์ค๋ฅผ ๋ชปํ์ง๋ง,where salary > 150000 / 10;
์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค. - ์ปฌ๋ผ์ด ๋ฌธ์์ด์ธ๋ฐ ์ซ์๋ก ์กฐํํ๋ฉด ํ์ ์ด ๋ฌ๋ผ ์ธ๋ฑ์ค๊ฐ ์ฌ์ฉ๋์ง ์์ต๋๋ค. ์ ํํ ํ์ ์ ์ฌ์ฉํด์ผ๋ง ํฉ๋๋ค.
-