week 4 jisoo - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki
๋ฉํฐ์ค๋ ๋ & ์ค๋ ๋์ธ์ดํํฐ & ์ค๋ ๋ํ ๊ฐ๊ฐ์ ํน์ง์ ์ค๋ช ํ์์ค
- ์ค๋ ๋ : ํ๋ก์ธ์ค(์คํ์ค์ธ ํ๋ก๊ทธ๋จ)์์ ํ๋์ ์คํ ํ๋ฆ.
- ๋ฉํฐ์ค๋ ๋ : ํ๋์ ํ๋ก๊ทธ๋จ์์ ์ฌ๋ฌ ๊ฐ์ ์คํ ํ๋ฆ์ ๋ง๋ค๊ณ ์คํ ํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
- ์ค๋ ๋ ์ธ์ดํํฐ : ํด๋์ค๋ ํจ์, ๊ฐ์ฒด๋ฑ์ด ๋ฉํฐ์ฐ๋ ๋ ํ๊ฒฝ์์ ๊ฐ์ ๋ฐ์ดํฐ์ ๋ํด ๋์ ์ฐธ์ฌํ์ฌ ์์์น ๋ชปํ ๊ฒฐ๊ณผ๊ฐ์ ์ป๊ฒ ๋๋ ๋ฑ์ side-effect ์์ด ์ ์์ ์ผ๋ก ๋์์ ๋ณด์ฅํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ์ค๋ ๋ ํ : ์ค๋ ๋๊ฐ ์์ฑ๋ ๋ OS๊ฐ ์์ฒญ์ ๋ฐ์๋ค์ฌ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ๋ณดํ๊ณ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ค๋ ๋์๊ฒ ํ ๋น. ์ค๋ ๋๋ ๋์ผํ ๋ฉ๋ชจ๋ฆฌ์์ญ์์ ์์ฑ๋๊ณ ๊ด๋ฆฌ๋์ง๋ง, ์์ฑ / ์๊ฑฐ์ ๋๋ ๋น์ฉ์ ๋ฌด์ํ ์ ์๋ค. ๋ฐ๋ผ์ ์์ฒญ์ด ๋ค์ด์ฌ ๋๋ง๋ค ์ค๋ ๋๋ฅผ ์์ฑํ๊ณ , ์๋ฃ์ ์ค๋ ๋๋ฅผ ์๊ฑฐํ๋ ์์ ์ ํผํฌ๋จผ์ค์ ์ง๋ํ ์ํฅ์ ์ค ์ ์๋ค. ๋ฐ๋ผ์ ์ค๋ ๋๋ฅผ ์ด ํ์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋๋๋ค.
๋ํ ์๋น์ค ์ธก๋ฉด์์ ๋ฐ๋ผ๋ณผ๋, ๋ค์์ ์ฌ์ฉ์์ ์์ฒญ์ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ๊ณ ๋์ํ๊ธฐ ์ํด ์ค๋ ๋ ํ์ ์ฌ์ฉํ๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์์๋ ์ฌ์ฉ์๋ก๋ถํฐ ๋ค์ด์จ ์์ฒญ์ ์์ ํ์ ๋ฃ๊ณ , ์ค๋ ๋ํ์ ์์ ํ์ ๋ค์ด์จ Task๋ฅผ ๋ฏธ๋ฆฌ ์์ฑํด๋์ Thread๋ค์๊ฒ ํ ๋นํ๋ค. ์ผ์ ๋ค ์ฒ๋ฆฌํ Thread๋ ๊ฒฐ๊ณผ๊ฐ์ ๋ฆฌํดํ๋ค.
- java์ ์ค๋ ๋ ํ ์์ฑ / ์ฌ์ฉ java.util.concurrent.Package์์ ExecuterService ์ธํฐํ์ด์ค์ Executor ํด๋์ค๋ฅผ ์ ๊ณต Executors ํด๋์ค์ ๋ค์ํ ์ ์ ๋ฉ์๋๋ฅผ ํตํด ExecutorService ๊ตฌํ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ ์ฌ์ฉํ ์ ์๋ค. (์ค๋ ๋ ํ ์์ฑ)
- java์ ์ค๋ ๋ ํ ์ข ๋ฅ
- newFixedThreadPool : ์ฃผ์ด์ง ์ค๋ ๋ ๊ฐ์๋งํผ ์์ฑํ๊ณ ๊ทธ ์๋ฅผ ์ ์ง. ์์ฑ๋ ์ค๋ ๋ ์ค ์ผ๋ถ๊ฐ ์ข ๋ฃ๋์์ผ๋ฉด ์ค๋ ๋๋ฅผ ๋ค์ ์์ฑ.
- newCachedThreadPool : ์ฒ๋ฆฌํ ์ค๋ ๋๊ฐ ๋ง์์ง๋ฉด ๊ทธ๋งํผ ์ค๋ ๋๋ฅผ ์ฆ๊ฐ(์ต๋ ์ค๋ ๋ ๊ฐ์ : Integer.MAX_VALUE)
- newSingleThreadExecutor : ์ค๋ ๋๋ฅผ ํ๋๋ง ์์ฑ(1๊ฐ๋ก ๊ณ์ ์ ์ง)
- newScheduledThreadPool : ํน์ ์๊ฐ ์ดํ, ๋๋ ์ฃผ๊ธฐ์ ์์ ์ค๋ ๋ ์ฌ์ฉ์ ํ์ฉ
https://limkydev.tistory.com/55
Hashtable๊ณผ HashMap์ ์ฐจ์ด์ ์ ๋ฌด์์ธ๊ฐ์?
๊ณตํต์
- ๋๋ค ๋งต์ ์์๋ฅผ ๋ณด์ฅํ์ง ์์
- ๋๋ค key / value์ ๊ตฌ์กฐ
- ๊ฐ์ฒด๋ค์ด ๋ฒ์ผ์ ์ ์ฒด์ ์ผ๋ก ๊ณ ๋ฅด๊ฒ ๋ถํฌ๋์ด ์๋ค๊ณ ๊ฐ์ ํ์๋ put ๊ณผ get ๋ฉ์๋๋ค์ ๋ํด์ ๋๋ค ์ผ์ ํ ์๊ฐ์ฑ๋ฅ์ ์ ๊ณตํ๋ค.
- ๋๋ค ํด์ค ์๋ฆฌ์ ๊ธฐ๋ฐํ์ฌ ๋์ํ๋ค.
HashMap
-
๋ฉํฐ์ฐ๋ ๋ ํ๊ฒฝ์์์ ๋๊ธฐํ ์ง์ํ์ง ์์ โ ConcurrentHashMap ์ฌ์ฉ ๊ถ์ฅ
-
์ ์ฅ๋ ์์๋ค์ ์ํ๋ฅผ ์ํด Fail-Fast-Iterator ์ฌ์ฉ (ConcurrentHashMap์ Fail-Safe-Iterator ์ฌ์ฉ) Fail-Fast Iterator : ๋ค๋ฅธ ์ค๋ ๋(์์ ํด๋น ์๋ฃ์ ์์๋ฅผ ์์ (์ฝ์ , ์ญ์ , ์์ ๋ฑ)์ด ๋ฐ์ํ๋ฉด ConcurrentModificationException์ ๋ฐ์์์ผ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ค.
Fail-Safe-Iterator: ConcurrentHashMap์ ๊ฒฝ์ฐ Map์ ๋ณต์ฌ๋ณธ์ ์ฐธ์กฐํ๋ Iterator๋ฅผ ๋ฐํํ๋ฉฐ ๋ค์ ๋ฐํ๋ฐ์ ์์ ์ Map์ ์์ ์ด ์์ ๊ฒฝ์ฐ ํด๋น Iterator๋ ๋ฐ์๋์ง ์๋๋ค. ๊ณ ๋ก ConcurrentModificationException๋ํ ๋ฐ์ํ์ง ์๋๋ค. ์ด๋ ์ฝํ ์ผ๊ด์ฑ(Weakly Consistent)๋ฅผ ์ ๊ณตํ์ง๋ง ๋ค์ค ์ค๋ ๋์ํฉ์์ ํด๋น Map์ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๋ค.
-
1๊ฐ์ nullํค์ ๋ค์์ null๊ฐ ์ฌ์ฉ ๊ฐ๋ฅ
HashTable
- ๋ฉํฐ์ฐ๋ ๋ ํ๊ฒฝ์์ ๋๊ธฐํ ์ฒ๋ฆฌ ๊ฐ๋ฅ โ ๋๊ธฐํ ์ฒ๋ฆฌ ๋น์ฉ ๋ฐ์. ๋ ๋๋ฆผ(๋ชจ๋ ๋ฐ์ดํฐ ๋ณ๊ฒฝ ๋ฉ์๋์ syncronized ํค์๋ ์ฌ์ฉ๋์ด ์์ โ ๋งค์ฐ ๋๋ฆฐ ๋์)
- ์ ์ฅ๋ ์์๋ค์ ์ํ๋ฅผ ์ํด Enumeration ์ฌ์ฉ (์ปฌ๋ ์ ํ๋ ์์ํฌ ์ด์ ์ ์ฌ์ฉ๋์๋ ์ธํฐํ์ด์ค๋ก Iterator ์ฌ์ฉ์ ๊ถ์ฅํ๋ค.)
- key / value์ null๊ฐ ์ฌ์ฉ ๋ถ๊ฐ
๊ฐ์ฒด์ ์ง๋ ฌํ์ ์ญ์ง๋ ฌํ์ ๋ํด ์ค๋ช ํ์ธ์.
์ง๋ ฌํ(Serialization)๋?
- ๋ง๊ทธ๋๋ก ๊ฐ์ฒด๋ฅผ ์ง๋ ฌํํ์ฌ ์ ์ก ๊ฐ๋ฅํ ํํ๋ก ๋ง๋๋ ๊ฒ์ ์๋ฏธํ๋ค. ๊ฐ์ฒด๋ค์ ๋ฐ์ดํฐ๋ฅผ ์ฐ์์ ์ธ ๋ฐ์ดํฐ๋ก ๋ณํํ์ฌ Stream์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฝ๋๋ก ํด์ค๋ค.
- ์ด๊ฒ์ ์ฃผ๋ก ๊ฐ์ฒด๋ค์ ํต์งธ๋ก ํ์ผ๋ก ์ ์ฅํ๊ฑฐ๋ ์ ์กํ๊ณ ์ถ์ ๋ ์ฃผ๋ก ์ฌ์ฉ๋๋ค.
- ์๋ฐ ์ง๋ ฌํ๋ ์๋ฐ ์์คํ ๋ด๋ถ์์ ์ฌ์ฉ๋๋ ๊ฐ์ฒด ๋๋ ๋ฐ์ดํฐ๋ฅผ ์ธ๋ถ์ ์๋ฐ ์์คํ ์์๋ ์ฌ์ฉํ ์ ์๋๋ก ๋ฐ์ดํธ(byte) ํํ๋ก ๋ฐ์ดํฐ ๋ณํํ๋ ๊ธฐ์ ๊ณผ ๋ฐ์ดํธ๋ก ๋ณํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๊ฐ์ฒด๋ก ๋ณํํ๋ ๊ธฐ์ (์ญ์ง๋ ฌํ)์ ์์ธ๋ฌ์ ์ด์ผ๊ธฐํฉ๋๋ค.
- ์์คํ ์ ์ผ๋ก ์ด์ผ๊ธฐํ์๋ฉด JVM(Java Virtual Machine ์ดํ JVM)์ ๋ฉ๋ชจ๋ฆฌ์ ์์ฃผ(ํ ๋๋ ์คํ)๋์ด ์๋ ๊ฐ์ฒด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํธ ํํ๋ก ๋ณํํ๋ ๊ธฐ์ ๊ณผ ์ง๋ ฌํ๋ ๋ฐ์ดํธ ํํ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฒด๋ก ๋ณํํด์ JVM์ผ๋ก ์์ฃผ์ํค๋ ํํ๋ฅผ ๊ฐ์ด ์ด์ผ๊ธฐํฉ๋๋ค.
์ญ์ง๋ ฌํ(Deserialization)๋?
- ์ง๋ ฌํ๋ ํ์ผ ๋ฑ์ ์ญ์ผ๋ก ์ง๋ ฌํํ์ฌ ๋ค์ ๊ฐ์ฒด์ ํํ๋ก ๋ง๋๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ ์ฅ๋ ํ์ผ์ ์ฝ๊ฑฐ๋ ์ ์ก๋ ์คํธ๋ฆผ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด ์๋ ๊ฐ์ฒด์ ํํ๋ก ๋ณต์ํ๋ค.
์๋ฐ ์ง๋ ฌํ ์กฐ๊ฑด
์๋ฐ ๊ธฐ๋ณธ(primitive) ํ์
๊ณผ java.io.Serializable
์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ์ ๊ฐ์ฒด๋ ์ง๋ ฌํ ํ ์ ์๋ ๊ธฐ๋ณธ ์กฐ๊ฑด์ ๊ฐ์ง๋๋ค.
์ญ์ง๋ ฌํ ์กฐ๊ฑด
-
์ง๋ ฌํ ๋์์ด ๋ ๊ฐ์ฒด์ ํด๋์ค๊ฐ ํด๋์ค ํจ์ค์ ์กด์ฌํด์ผ ํ๋ฉฐ
import
๋์ด ์์ด์ผ ํฉ๋๋ค.- ์ค์ํ ์ ์ ์ง๋ ฌํ์ ์ญ์ง๋ ฌํ๋ฅผ ์งํํ๋ ์์คํ ์ด ์๋ก ๋ค๋ฅผ ์ ์๋ค๋ ๊ฒ์ ๋ฐ๋์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.(๊ฐ์ ์์คํ ๋ด๋ถ์ด๋ผ๋ ์์ค ๋ฒ์ ์ด ๋ค๋ฅผ ์ ์์ต๋๋ค. ์ด ๋ถ๋ถ์ ๋ค์ ์์ธํ ์ด์ผ๊ธฐํ๊ฒ ์ต๋๋ค.)
-
์๋ฐ ์ง๋ ฌํ ๋์ ๊ฐ์ฒด๋ ๋์ผํ
serialVersionUID
๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผ ํฉ๋๋ค.private static final long serialVersionUID = 1L;
์๋ฐ ์ง๋ ฌํ๋ฅผ ์์๋ ๋ถ์ ์์์ ๊ธฐ์ ํ ์์ ์์ ์ฌ์ฉ๋๋ ์๋ฐ ์ง๋ ฌํ ๋์์
Member
ํด๋์ค๊ฐserialVersionUID
์์๊ฐ ์์ด์ ์์ํ์ ๋ถ๋ ๊ณ์ค ๊ฒ๋๋ค.์ฌ์ค ๋ฐ๋์ ๊ธฐ์ ํด์ผ ๋๋ ํ์๋ ์๋๊ธฐ ๋๋ฌธ์ ๋นผ๋ ๊ฒ์ ๋๋ค. ํ์ง๋ง ์๋นํ ์ค์ํ ๋ถ๋ถ์ด๋ผ์ ๋ฐ๋ก ์ค๋ช ํ๋ ค๊ณ ํฉ๋๋ค. ์ด๊ณณ์์๋ ๋์ด๊ฐ๋๋ก ํ๊ฒ ์ต๋๋ค.
์๋ฐ ์ง๋ ฌํ๋ ์ธ์ (when) ์ด๋์(where) ์ฌ์ฉ๋๋์?
JVM์ ๋ฉ๋ชจ๋ฆฌ์์๋ง ์์ฃผ๋์ด์๋ ๊ฐ์ฒด ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋๋ก ์์ํ(Persistence)๊ฐ ํ์ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ์์คํ ์ด ์ข ๋ฃ๋๋๋ผ๋ ์์ด์ง์ง ์๋ ์ฅ์ ์ ๊ฐ์ง๋ฉฐ ์์ํ๋ ๋ฐ์ดํฐ์ด๊ธฐ ๋๋ฌธ์ ๋คํธ์ํฌ๋ก ์ ์ก๋ ๊ฐ๋ฅํฉ๋๋ค.๊ทธ๋ฆฌ๊ณ ํ์ํ ๋ ์ง๋ ฌํ๋ ๊ฐ์ฒด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ์ญ์ง๋ ฌ ํํ์ฌ ๊ฐ์ฒด๋ฅผ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค.๊ทธ๋ฐ ํน์ฑ์ ์ด๋ฆฐ ์๋ฐ ์ง๋ ฌํ๋ ๋ง์ ๊ณณ์์ ์ด์ฉ๋ฉ๋๋ค. ๋ง์ด ์ฌ์ฉํ๋ ๋ถ๋ถ ๋ช ๊ฐ๋ง ์ด์ผ๊ธฐํด๋ณด๊ฒ ์ต๋๋ค.
- ์๋ธ๋ฆฟ ์ธ์
(Servlet Session)์๋ธ๋ฆฟ ๊ธฐ๋ฐ์ WAS(ํฐ์บฃ, ์น๋ก์ง ๋ฑ)๋ค์ ๋๋ถ๋ถ ์ธ์
์ ์๋ฐ ์ง๋ ฌํ๋ฅผ ์ง์ํ๊ณ ์์ต๋๋ค.๋ฌผ๋ก ๋จ์ํ ์ธ์
์ ์๋ธ๋ฆฟ ๋ฉ๋ชจ๋ฆฌ ์์์ ์ด์ฉํ๋ค๋ฉด ์ง๋ ฌํ๋ฅผ ํ์๋ก ํ์ง ์์ง๋ง, ํ์ผ๋ก ์ ์ฅํ๊ฑฐ๋ ์ธ์
ํด๋ฌ์คํฐ๋ง, DB๋ฅผ ์ ์ฅํ๋ ์ต์
๋ฑ์ ์ ํํ๊ฒ ๋๋ฉด ์ธ์
์์ฒด๊ฐ ์ง๋ ฌํ๊ฐ ๋์ด ์ ์ฅ๋์ด ์ ๋ฌ๋ฉ๋๋ค.(๊ทธ๋์ ์ธ์
์ ํ์ํ ๊ฐ์ฒด๋
java.io.Serializable
์ธํฐํ์ด์ค๋ฅผ ๊ตฌํ(implements
) ํด๋๋ ๊ฒ์ ์ถ์ฒํฉ๋๋ค.)์ฐธ๊ณ ๋ก ์ ๋ด์ฉ์ ์๋ธ๋ฆฟ ์คํ์์๋ ์ง์ ๊ธฐ์ ํ ๋ด์ฉ์ด ์๋๊ธฐ ๋๋ฌธ์ ๊ตฌํํ WAS ๋ง๋ค ๋์์ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค. - ์บ์ (Cache)์๋ฐ ์์คํ ์์ ํผํฌ๋จผ์ค๋ฅผ ์ํด ์บ์(Ehcache, Redis, Memcached, โฆ) ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์คํ ์ ๋ง์ด ์ด์ฉํ๊ฒ ๋ฉ๋๋ค.์๋ฐ ์์คํ ์ ๊ฐ๋ฐํ๋ค ๋ณด๋ฉด ์๋น์์ ํด๋์ค๊ฐ ๋ง๋ค์ด์ง๊ฒ ๋ฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด DB๋ฅผ ์กฐํํ ํ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ ๊ฐ์ฒด ๊ฐ์ ๊ฒฝ์ฐ ์ค์๊ฐ ํํ๋ก ์๊ตฌํ๋ ๋ฐ์ดํฐ๊ฐ ์๋๋ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ, ์ธ๋ถ ์ ์ฅ์, ํ์ผ ๋ฑ์ ์ ์ฅ์๋ฅผ ์ด์ฉํด์ ๋ฐ์ดํฐ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ ํ ๋์ผํ ์์ฒญ์ด ์ค๋ฉด DB๋ฅผ ๋ค์ ์์ฒญํ๋ ๊ฒ์ด ์๋๋ผ ์ ์ฅ๋ ๊ฐ์ฒด๋ฅผ ์ฐพ์์ ์๋ตํ๊ฒ ํ๋ ํํ๋ฅผ ๋ณดํต ์บ์๋ฅผ ์ฌ์ฉํ๋ค๊ณ ํฉ๋๋ค.์บ์๋ฅผ ์ด์ฉํ๋ฉด DB์ ๋ํ ๋ฆฌ์์ค๋ฅผ ์ ์ฝํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ง์ ์์คํ ์์ ์์ฃผ ํ์ฉ๋ฉ๋๋ค. (์ฌ์ค ์ด๋ ๊ฒ ๊ฐ๋จํ์ง ์์ต๋๋ค๋ง ๊ฐ๋จํ๊ฒ ์ค๋ช ํ์ต๋๋ค.)์ด๋ ๊ฒ ์บ์ ํ ๋ถ๋ถ์ ์๋ฐ ์ง๋ ฌํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด์ ์ฌ์ฉ๋ฉ๋๋ค. ๋ฌผ๋ก ์๋ฐ ์ง๋ ฌ ํ๋ง ์ด์ฉํด์๋ง ์บ์๋ฅผ ์ ์ฅํ์ง ์์ง๋ง ๊ฐ์ฅ ๊ฐํธํ๊ธฐ ๋๋ฌธ์ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค.
- ์๋ฐ RMI(Remote Method Invocation)์ต๊ทผ์๋ ๋ง์ด ์ฌ์ฉ๋์ง ์์ง๋ง ์๋ฐ ์ง๋ ฌํ๋ฅผ ์ค๋ช ํ ๋๋ ๋น ์ง์ง ์๊ณ ์ด์ผ๊ธฐ๋๋ ๊ธฐ์ ์ด๊ธฐ ๋๋ฌธ์ ์ธ๊ธ๋ง ํ๊ณ ๋์ด๊ฐ๋ ค๊ณ ํฉ๋๋ค.์๋ฐ RMI๋ฅผ ๊ฐ๋จํ๊ฒ ์ด์ผ๊ธฐํ์๋ฉด ์๊ฒฉ ์์คํ ๊ฐ์ ๋ฉ์์ง ๊ตํ์ ์ํด์ ์ฌ์ฉํ๋ ์๋ฐ์์ ์ง์ํ๋ ๊ธฐ์ ์ ๋๋ค.๋ณดํต์ ์๊ฒฉ์ ์์คํ ๊ณผ์ ํต์ ์ ์ํด์ IP์ ํฌํธ๋ฅผ ์ด์ฉํด์ ์์ผํต์ ์ ํด์ผ ํ์ง๋ง RMI๋ ๊ทธ ๋ถ๋ถ์ ์ถ์ํํ์ฌ ์๊ฒฉ์ ์๋ ์์คํ ์ ๋ฉ์๋๋ฅผ ๋ก์ปฌ ์์คํ ์ ๋ฉ์๋์ธ ๊ฒ์ฒ๋ผ ํธ์ถํ ์ ์์ต๋๋ค.์๊ฒฉ์ ์์คํ ์ ๋ฉ์๋๋ฅผ ํธ์ถ ์์ ์ ๋ฌํ๋ ๋ฉ์์ง(๋ณดํต ๊ฐ์ฒด)๋ฅผ ์๋์ผ๋ก ์ง๋ ฌํ ์์ผ ์ฌ์ฉ๋ฉ๋๋ค.๊ทธ๋ฆฌ๊ณ ์ ๋ฌ๋ฐ์ ์๊ฒฉ ์์คํ ์์๋ ๋ฉ์์ง๋ฅผ ์ญ์ง๋ ฌํ๋ฅผ ํตํด ๋ณํํ์ฌ ์ฌ์ฉ๋ฉ๋๋ค.์์ธํ ๋ด์ฉ์ ์์ ์ฑ ํ ๊ถ ์ ๋์ ์์ด ๋๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ํ๋ฒ ์ฐพ์๋ณด์๋ ๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค.
์๋ฐ ์ง๋ ฌํ, ๊ทธ๊ฒ์ด ์๊ณ ์ถ๋ค. ํ์ด๋ณด๊ธฐํธ - ์ฐ์ํํ์ ๋ค ๊ธฐ์ ๋ธ๋ก๊ทธ
Spring ๋ฉ์์ง ํ Rabiit MQ vs KAFKA
RabbitMQ ์ Kafka ์ ๋ฉ์ธ ๋ชฉ์ ์ ๋ถ์ฐ pub-sub ๋ฉ์ธ์ง ์์คํ ์ด๋ค.๊ตฌ๋ ์๋ค์ด ์ ํํ ๊ทธ๋ค์ด ํฅ๋ฏธ์์ดํ๋ ๋ฉ์ธ์ง๋ฅผ ์ฝ์์์๋๋ก ํด์ฃผ๊ณ ์๋ค.๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ๋ถ์ฐ์์คํ ์ ํ์ฅ๊ฐ๋ฅํ๋ฉฐ ์ ๋ขฐ์ฑ์๊ฒ ํด์ฃผ๊ณ ์๋ค.
๋ค์ํ ์์คํ ๊ณผ ์ฐ๊ฒฐ๋์ด ๋์ ์ ๋ขฐ์ฑ/ํ์ฅ์ฑ์๋ ์ํฐํ๋ผ์ด์ฆ ๋ฉ์ธ์ง ์์คํ ์ดํ์ํ๊ณณ์ด๋ฉด ์ด๋๋ ์ฌ์ฉํ๊ณ ์๋ค.๊ทธ๋ฌ๋ ์ ์ ์ ์์ ์ฌ์ฉํ๋ ค๋ฉด ์ ๋ ์๋ฃจ์ ์ ๋น๊ตํด ๋ณผ ํ์ ๊ฐ ์์๋ฏ ํ๋ค
RabbitMQ ์ Kafka
โ RabbitMQ ๊ฐ ์ข๋ ์ฑ์ํ๋ค.โ ์ฒ ํ์ ์ข ๋ค๋ฅธ๋ฐ, ๊ธฐ๋ณธ์ ์ผ๋ก RabbitMQ ๋ ๋ธ๋ก์ปค ์ค์ฌ์ ์ด๋ฉฐ,์์ฐ์์ ์๋น์๊ฐ์ ๋ณด์ฅ๋๋ ๋ฉ์ธ์ง ์ ๋ฌ์ ์ด์ ์ ๋ง์ถ์๋ค.
โ ๋ฐ๋ฉด Kafka ๋ ์์ฐ์ ์ค์ฌ์ ์ด๋ฉฐ, ์์ฒญ๋ ์ด๋ฒคํธ ๋ฐ์ดํฐ์ ํํฐ์ ๋ํ๋๋ฐ ๊ธฐ๋ฐ์ ๋๋ค.๋ฐฐ์น ์๋น์๋ฅผ ์ง์ํ๋ฉฐ, ์จ๋ผ์ธ, ์คํ๋ผ์ธ์ ์ ์ง์ฐ์จ(Low latency)์ ๋ณด์ฅํ๋ฉฐ ๋ฉ์ธ์ง๋ฅผ์ ๋ฌํด ์ค๋ค.
โ RabbitMQ ๋ ๋ธ๋ก์ปค์์์ ์ ๋ฌ ์ํ๋ฅผ ํ์ธํ๊ธฐ์ํ ๋ฉ์ธ์ง ํ์์ ์ฌ์ฉํ๋ค.์นดํ์นด๋ ๊ทธ๋ฐ ๋ฉ์ธ์ง ํ์์ด ์์ผ๋ฉฐ ์ปจ์๋จธ๊ฐ ์ ๋ฌ(๋ฐฐ๋ฌ) ์ํ๋ฅผ ๊ธฐ์ตํ๋๊ฒ์ ๊ธฐ๋ํ๋ค.
โ RabbitMQ ๋ ์ปค๋ค๋ ํฌ๊ธฐ์ ๋ฐ์ดํฐ๋ฅผ ์ํด ๋์์ธ๋์ง ์์์ผ๋ฉฐ๋ง์ฝ ์ปจ์๋จธ๊ฐ ๋งค์ฐ ๋๋ฆฌ๋ค๋ฉด ์คํจํ ๊ฒ์ด๋ค.๊ทธ๋ฌ๋ post 2.0 ์ RabbitMQ ๋ ๋๋ฆฐ ๋ฐฐ์น ์ปจ์๋จธ๋ฅผ ํธ๋ค๋ง ๋๋๊ฒ ์์ฒญ๋์ด์ก๋ค.
โ Kafka ์ ์ค์ง ํ ํฝ๊ฐ์ exchanges ๋ฅผ ์ฌ์ฉํ๋ค.RabbitMQ ๋ ๋ค์ํ exchanges ๋ฅผ ์ฌ์ฉํ๋ค. (ํ ํฝ/ํ ๋ฑ)
โ Kafka ๋ ํํฐ์ ๋ค ์์์ ๋ฉ์ธ์ง ์์๋ฅผ ์ ๊ณตํ๋ฉฐ, ํํฐ์ ๋ค๊ฐ์ ์๊ฒฉํ ์์๋ฅผ ๊ฐ์ง๋ค.์นดํ์นด ์ปจ์๋จธ๋ค์ ์ถฉ๋ถํ ์ค๋งํธํด์ผํ๋ฉฐ ๊ทธ๋ค ์ค์ค๋ก ํํฐ์ ๊ฐ์ ์์๋ฅผ ํด๊ฒฐ(resolve) ํด์ผํ๋ค.
โ Kafka ๋ ๋์คํฌ์์์ ๋ฉ์ธ์ง๋ฅผ ์ ์ฅํ๊ณ ๋ฐ์ดํ ์์ค์ ๋ง๊ธฐ์ํด ํด๋ฌ์คํฐ๋ก ๊ทธ๋ค์ ๋ณต์ ํ๋ค.๊ฐ๊ฐ์ ์ฑ๋ฅ์ ํฐ ๋ฌธ์ ์์ด ๋ธ๋ก์ปค๋ ํ ๋ผ๋ฐ์ดํธ๋ฅผ ํธ๋ค๋งํ ์์๋ค.Kafka ๋ ์ฐ๊ธฐ์ ์ด๋น 200k ๋ฉ์ธ์ง๋ฅผ ์ฝ๋๋ฐ๋ 3M ๋ฉ์ธ์ง๋ฅผ ์ ๊ณต๋๋๋ก ๋์ด์๋ค.
Kafka โ ์ด๋น 100k ์ด์์ ๋ถ๊ฐ์ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌ ํ๋ ค๋ฉด ์ด์ฉํด๋ผ. โ ์จ๋ผ์ธ์ด๋ ๋ฐฐ์น๋ก ํํฐ์ ๋ ์์๋ก ์ ์ด๋ ํ๋ฒ์ ๋ฐฐ๋ฌ๋ ํ์๊ฐ์์๋
โ ๋ฉ์ธ์ง๋ฅผ ๋ค์ ์ฝ์ ํ์๊ฐ ์์๋๋ ์ฌ์ฉํด๋ผ.๋ํ ๋ ธ๋๋ ๋ฒจ HA ๋ก ํ๋ฆ์ ํ์ ๋ค๋ฃฐ์์์๊ฒ์ด๋ค.
RabbitMQ
โ ์ด๋น 20+ ๋ฉ์ธ์ง๋ฅผ ๋ณต์กํ ๋ฐฉ์์ผ๋ก ์ปจ์๋จธ(worker)์๊ฒ ๋ผ์ฐํธ ํ๊ณ ์ถ์๋ ์ฌ์ฉํ๋ผ.
โ ๋ฉ์ธ์ง๋น ์ ๋ฌ๋ณด์ฅ์ ํด์คํ์๊ฐ ์์๋ ์ฌ์ฉํ๋ผ.
โ ๋ฐฐ๋ฌ ์์๋ ๋ณ๋ก ๊ด์ฌ์น ์์๋ ์ฌ์ฉํ๋ผ.(์์๋ฅผ ๋ณด์ฅํ๊ฒ ๋ ํ ์์๋ค)
โ ํด๋ฌ์คํฐ ๋ ธ๋๋ ๋ฒจ์ HA ๊ฐ ํ์ํ ๋ ์ฌ์ฉํ๋ผ.
Spring์ Filter์ Interceptor์ ์ฐจ์ด์ ์ ์๋๊ฐ?
- Filter์ Interceptor๋ ์คํ๋๋ ์์ ์ด ๋ค๋ฅด๋ค.
- Filter๋ Web Application์ ๋ฑ๋ก์ ํ๊ณ , Interceptor๋ Spring์ Context์ ๋ฑ๋ก์ ํ๋ค.
- Filter๋ Servlet์์ ์ฒ๋ฆฌํ๊ธฐ ์ ํ๋ฅผ ๋ค๋ฃฐ ์ ์๋ค. (์๋ธ๋ฆฟ ์๋จ์ ์์น)
- Interceptor๋ Handler๋ฅผ ์คํํ๊ธฐ์ (preHandle), Handler๋ฅผ ์คํํ ํ(postHandle), view๋ฅผ ๋ ๋๋งํ ํ(afterCompletion) ๋ฑ, Servlet๋ด์์๋ ๋ฉ์๋์ ๋ฐ๋ผ ์คํ ์์ ์ ๋ค๋ฅด๊ฒ ๊ฐ์ ธ๊ฐ๋ค. (์๋ธ๋ฆฟ ๋ค์ ์์น)
(Spring)Filter์ Interceptor์ ์ฐจ์ด
RDB์ ๋ฐ๋๋ฝ์ด ์ผ์ด๋๋ ์ํฉ๊ณผ ๊ต์ฐฉ์ํ์ ๋ํด์ ์ค๋ช ํ์์ค
๊ต์ฐฉ์ํ(Dead Lock)๋?
์ด๋ค ์งํฉ ๋ด์ ์๋ ๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ๋๊ธฐ ์ํ์ด๋ฉฐ ์ด ์งํฉ ๋ด์ ์๋ ๊ฐ ํ๋ก์ธ์ค๊ฐ ์ด ์งํฉ ๋ด์ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ๊ฐ์ง๊ณ ์๋ ์์์ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ผ๋ฉด '๊ต์ฐฉ์ํ' ๋ผ๊ณ ํ๋ค.
- ์์ T1์ ๋ฆฌ์์ค R1 (R1์์ T1๊น์ง์ ํ์ดํ๋ก ํ์)์ ๋ํ ์ ๊ธ์ ๊ฐ์ง๋ฉฐ ๋ฆฌ์์ค R2์ ๋ํ ์ ๊ธ์ ์์ฒญํ๋ค (T1์์ R2 ๋ก์ ํ์ดํ๋ก ํ์๋จ).
- ์์ T2๋ ์์ R2์ ๋ํ ์ ๊ธ์ ๊ฐ์ง๋ฉฐ (R2์์ T2 ๋ก์ ํ์ดํ๋ก ํ์๋จ) ์์ R1์ ๋ํ ์ ๊ธ์ ์์ฒญํ๋ค (T2์์ R1 ๋ก์ ํ์ดํ๋ก ํ์๋จ).
- ๋ ์์ ์ ์์์ด ์ฌ์ฉ ๊ฐ๋ฅํ ๋๊น์ง ๊ณ์ ์ํ ํ ์ ์์ผ๋ฉฐ Task๊ฐ ๊ณ์ ๋ ๋๊น์ง ์์์ ํด์ ํ ์ ์๊ธฐ ๋์ ๊ต์ฐฉ ์ํ๊ฐ ์กด์ฌํ๋ค.
๊ต์ฐฉ ์ํ์ ์กฐ๊ฑด
- ์ํธ๋ฐฐ์ (Mutual exclusion) : ํ๋ก์ธ์ค๋ค์ด ํ์๋ก ํ๋ ์์์ ๋ํด ๋ฐฐํ์ ์ธ ํต์ ๊ถ์ ์๊ตฌํ๋ค.
- ์ ์ ๋๊ธฐ(Hold and wait) : ํ๋ก์ธ์ค๊ฐ ํ ๋น๋ ์์์ ๊ฐ์ง ์ํ์์ ๋ค๋ฅธ ์์์ ๊ธฐ๋ค๋ฆฐ๋ค.
- ๋น์ ์ (No preemption) : ํ๋ก์ธ์ค๊ฐ ์ด๋ค ์์์ ์ฌ์ฉ์ ๋๋ผ ๋๊น์ง ๊ทธ ์์์ ๋บ์ ์ ์๋ค.
- ์ํ๋๊ธฐ(Circular wait) : ๊ฐ ํ๋ก์ธ์ค๋ ์ํ์ ์ผ๋ก ๋ค์ ํ๋ก์ธ์ค๊ฐ ์๊ตฌํ๋ ์์์ ๊ฐ์ง๊ณ ์๋ค.
DB ์ตํฐ๋ง์ด์ ์ ๋ํด ์๋๊ฐ?
###์ตํฐ๋ง์ด์
- ์ฌ์ฉ์๊ฐ ์ง์ํ SQL ๋ฌธ์ ๋ํด ์ต์ ์ ์คํ ๋ฐฉ๋ฒ์ ๊ฒฐ์ ํ๋ ์ญํ ์ ์ํํฉ๋๋ค.
- ์ด๋ฌํ ์ต์ ์ ์คํ ๋ฐฉ๋ฒ์ ์คํ๊ณํ(Execution Plan)์ด๋ผ๊ณ ํฉ๋๋ค.
- ์ตํฐ๋ง์ด์ ๊ฐ ์ต์ ์ ์คํ์ ๊ฒฐ์ ํ๋ ๋ฐฉ์์ ๋ฐ๋ผ ๊ท์น๊ธฐ๋ฐ(RBO, Rule Based Optimizer)์ ๋น์ฉ๊ธฐ๋ฐ(CBO, Cost Based Optimizer) ๋ฐฉ์์ด ์์ต๋๋ค.
๊ท์น๊ธฐ๋ฐ ์ตํฐ๋ง์ด์
- ๊ท์น(์ฐ์ ์์)๋ฅผ ๊ฐ์ง๊ณ ์คํ๊ณํ์ ์์ฑํฉ๋๋ค.
- ๊ท์คํ๊ณํ์ ์์ฑํ ๋ ์ฐธ์กฐํ๋ ์ ๋ณด์๋ ์ธ๋ฑ์ค ์ ๋ฌด, ์ฐ์ฐ์, ๊ฐ์ฒด ๋ฑ์ ์ข ๋ฅ๊ฐ ์์ต๋๋ค.
- ORACLE ์ ๊ท์น๊ธฐ๋ฐ ์ตํฐ๋ง์ด์ ์์์ด๋ฉฐ, ์ซ์๊ฐ ๋ฎ์์๋ก ์ฐ์ ์์๊ฐ ๋์ต๋๋ค.
-
Single row by rowid
-
Single row by clusterjoin
-
Single row by hash cluster key with unique or primary key
-
Single row by unique or primary key
-
Cluster join
-
Hash Cluster key
-
Indexed cluster key
-
Composite index
-
Single column index
-
Bounded range search on indexed columns
-
Unbounded range search on indexed columns
-
Sort merge join
-
MAX or MIN of indexed column
-
ORDER BY on indexed column
-
Full table scan
์ด ์ค ์ฃผ์ํ ๊ท์น์ ๋ํด์๋ง ๊ฐ๋ฝํ ์ค๋ช ํฉ๋๋ค.
-
ROWID ๋ฅผ ํตํด์ ํ ์ด๋ธ์์ ํ๋์ ํ์ ์ก์ธ์ค ํ๋ ๋ฐฉ์์ ๋๋ค.
-
์ ์ผ ์ธ๋ฑ์ค๋ฅผ ํตํด์ ํ๋์ ํ์ ์ก์ธ์ค ํ๋ ๋ฐฉ์์ ๋๋ค. ์ด ๋ฐฉ์์ ์ธ๋ฑ์ค ์ ๊ทผ ํ ์ธ๋ฑ์ค์ ์กด์ฌํ๋ ROWID ๋ฅผ ์ถ์ถํ์ฌ ํ์ ์ก์ธ์คํฉ๋๋ค.
-
๋ณตํฉ ์ธ๋ฑ์ค์ ๋๋ฑ ์กฐ๊ฑด์ผ๋ก ๊ฒ์ํ๋ ๊ฒฝ์ฐ์ ๋๋ค.
-
๋จ์ผ ์ปฌ๋ผ์ธ๋ฑ์ค์ = ์กฐ๊ฑด์ผ๋ก ๊ฒ์ํ๋ ๊ฒฝ์ฐ์ ๋๋ค.
-
์ธ๋ฑ์ค๊ฐ ์์ฑ๋์ด ์๋ ์ปฌ๋ผ์ ์์ชฝ ๋ฒ์๋ฅผ ํ์ ํ๋ ํํ๋ก ๊ฒ์ํ๋ ๋ฐฉ์์ ๋๋ค. BETWEEN ์ด๋ LIKE ๊ฐ ์์ต๋๋ค. LIKE ๋ '๋ฌธ์์ด%' ํํ์ธ ๊ฒฝ์ฐ์ ๋๋ค.
-
์ธ๋ฑ์ค๊ฐ ์์ฑ๋์ด ์๋ ์ปฌ๋ผ์ ํ์ชฝ ๋ฒ์๋ง ํ์ ํ๋ ํํ๋ก ๊ฒ์ํ๋ ๋ฐฉ์์ ๋๋ค.
-
ํ ์ด๋ธ ์ ์ฒด๋ฅผ ์ก์ธ์คํ๋ฉด์ ์กฐ๊ฑด์ ์ ์ฃผ์ด์ง ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํ๋ง์ ๊ฒฐ๊ณผ๋ก ์ถ๋ ฅํฉ๋๋ค.
๋น์ฉ๊ธฐ๋ฐ ์ตํฐ๋ง์ด์
- SQL ๋ฌธ์ ์ฒ๋ฆฌํ๋๋ฐ ํ์ํ ๋น์ฉ์ด ๊ฐ์ฅ ์ ์ ์คํ๊ณํ์ ์ ํํ๋ ๋ฐฉ์์ ๋๋ค.
- ๋น์ฉ๊ธฐ๋ฐ ์ตํฐ๋ง์ด์ ๋ ๋น์ฉ์ ์์ธกํ๊ธฐ ์ํด์ ๊ท์น๊ธฐ๋ฐ ์ตํฐ๋ง์ด์ ๊ฐ ์ฌ์ฉํ์ง ์๋ ํ ์ด๋ธ, ์ธ๋ฑ์ค, ์ปฌ๋ผ๋ฑ์ ๋ค์ํ ๊ฐ์ฒด ํต๊ณ์ ๋ณด์ ์์คํ ํต๊ณ์ ๋ณด๋ฅผ ์ด์ฉํฉ๋๋ค.
- ํต๊ณ์ ๋ณด๊ฐ ์๋ ๊ฒฝ์ฐ ๋นํจ์จ์ ์ธ ์คํ๊ณํ์ ์์ฑํ ์ ์์ผ๋ฏ๋ก, ์ ํํ ํต๊ณ์ ๋ณด๋ฅผ ์ ์งํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๋์ ๊ณํ ์์ฑ๊ธฐ
- ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ๋ ๋ค์ํ ๋์ ๊ณํ์ ์์ฑํ๋ ๋ชจ๋์ ๋๋ค.
- ๋์ ๊ณํ ์์ฑ์ด ๋๋ฌด ๋ง์์ง๋ฉด ์ต์ ํ๋ฅผ ์ํํ๋ ์๊ฐ์ด ๊ทธ๋งํผ ์ค๋ ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์, ๋๋ถ๋ถ์ ์์ฉ ์ตํฐ๋ง์ด์ ๋ค์ ๋์ ๊ณํ์ ์๋ฅผ ์ ์ฝํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํฉ๋๋ค.
- ์ด๋ฌํ ํ์ค์ ์ธ ์ ์ฝ์ผ๋ก ์ธํด ์์ฑ๋ ๋์ ๊ณํ๋ค ์ค์์ ์ต์ ์ ๋์ ๊ณํ์ด ํฌํจ๋์ง ์์ ์๋ ์์ต๋๋ค.
๋น์ฉ ์์ธก๊ธฐ
- ๋์ ๊ณํ ์์ฑ๊ธฐ์ ์ํด์ ์์ฑ๋ ๋์ ๊ณํ์ ๋น์ฉ์ ์์ธกํ๋ ๋ชจ๋์ ๋๋ค.
์คํ๊ณํ
- SQL ์์ ์๊ตฌํ ์ฌํญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ ์ฐจ์ ๋ฐฉ๋ฒ์ ์๋ฏธํฉ๋๋ค.
- ์คํ๊ณํ ํํ๋ ์กฐ์ธ์์, ์กฐ์ธ๊ธฐ๋ฒ, ์ก์ธ์ค ๊ธฐ๋ฒ, ์ต์ ํ ์ ๋ณด, ์ฐ์ฐ ๋ฑ์ด ์์ต๋๋ค.
- ์กฐ์ธ ๊ธฐ๋ฒ์ ๋ ๊ฐ์ ํ ์ด๋ธ์ ์กฐ์ธํ ๋ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ผ๋ก NL, Hash, Sort Merge ๋ฑ์ด ์์ต๋๋ค.
- ์ก์ธ์ค ๊ธฐ๋ฒ์ ํ๋์ ํ ์ด๋ธ์ ์ก์ธ์ค ํ ๋ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ผ๋ก, Table Access, Index Access ๊ฐ ์์ต๋๋ค.
- ์ต์ ํ ์ ๋ณด๋ ์ตํฐ๋ง์ด์ ๊ฐ ์คํ๊ณํ์ ๊ฐ ๋จ๊ณ๋ง๋ค ์์๋๋ ๋น์ฉ ์ฌํญ์ ํ์ํ ๊ฒ์ ๋๋ค.