Week 7
: λ κΌΌκΌΌν μ 리νκΈ°
βοΈ 6μ μ μ§Έ μ£Ό λ©ν λ§!
μ§λ λͺ μ£Ό λμ 곡λΆν λ΄μ©μ λΈλ‘κ·Έμ μμ±νμ§ λͺ»ν΄μ μ΄λ² μ£Όλ μ 리λ₯Ό λͺ©νλ‘ ν μ£Όλ₯Ό 보λλ€.
μ΄λ² μ£Όλ IOμ NIOμ κ΄λ ¨ν λ΄μ©λ€μ 곡λΆνλλ€.
μ 리ν λλ μ΄μ μ’ μ΄ν΄κ° λλꡬλ νλλ°, λ§μ λ©ν λ§ μκ°μ μ§μ μ€λͺ νλ €κ³ νλ€λ³΄λ μ΄λ²λ² 거리면μ μμ μ λ²μ΄λ μ΄μΌκΈ°λ§ νλ€.
μ κ·Έλ΄κΉ μκ°ν΄λ³΄λ μ§μ μ½λλ₯Ό μμ±ν΄μ λλΌλ μκ°λ³΄λ€ λΈλ‘κ·Έ μμΉνλ©΄μ κΈλ‘ μ 리νλ μκ°μ΄ λ λ§μ ν¬κ² μλΏμ§ μμλκ² κ°μ₯ ν° μ΄μ κ³ λ λ²μ§Έ μ΄μ λ CSμ λν μ λ°μ μΈ μ΄ν΄κ° λΆμ‘±ν΄μ μ΄ν΄μ λν μλκ° λ¦μλ κ² κ°λ€.
λ§μ λ°μ±μ μκ°μ κ°μ§λ λ©ν λ§ μκ°μ΄μλ€..πΏ
κ·ΈλΌμλ κΈ°λ‘νμ§ μμΌλ©΄ κΉλ¨ΉμΌλκΉ λ©ν λ§ λ΄μ©μ κΈ°λ‘ν΄λ³΄μ!
1. ThreadLocal
ThreadLocal ν΄λμ€λ μ€λ λμ μ°κ²°νλ €λ ν΄λμ€μ λ©€λ² νλλ‘ μ¬μ©λλ©°, Getterμ Setter λ©μλλ‘ λ°μ΄ν° μ κ·Όμ΄ κ°λ₯νλ€.
μ¦, κ° μ€λ λμ μ’ μλλ μ€λ λ μ μ© μ§μ λ³μ, λ©€λ² νλλΌλ μλ―Έμ΄λ€.
Java 8 Referenceλ₯Ό μ°Έκ³ νλ©΄ ThreadLocal λ³μκ° final static μ μ΄μλ‘ μ μΈλμ΄ μλλ° κ·Έ μ΄μ λ λκΉ?
λ©μλμ μ§μ λ³μλ ν΄λΉ λ©μλκ° μ’ λ£λλ©΄ ν λΉλ λ©λͺ¨λ¦¬λ₯Ό λ°λ©νκΈ° λλ¬Έμ μ§μ μ μΌλ‘ μΈλΆ λ©μλμμ μ κ·Ό ν μκ° μλ€.
λν, λ€λ₯Έ μ€λ λμμλ μ κ·Όνλ λ³μμΌ κ²½μ°(λμμ±μ 보μ₯νλ μ¬λ¬ λ°©λ²μ΄ μμ§λ§) λ°μ΄ν°μ λμμ±μ 보μ₯ ν΄μ€ μ μλ€.
μ΄λ¬ν λ¬Έμ μ μ ν΄κ²°νκΈ° μν΄μ μ€λ λ μ μ© μ§μ λ³μλ‘ ThreadLocal ν΄λμ€λ₯Ό μ΄μ©νλ©°,
μ€λ λ λ΄λΆμμ νΈμΆλλ λͺ¨λ λ©μλκ° ThreadLocal κ°μ²΄μ μ κ·Ό ν μ μκ³ λ°μ΄ν°μ λΆλ³μ±μ 보μ₯νμ¬μΌλ§ μ€λ λ λ΄μ λͺ¨λ κ³³μμ μ κ·Ό ν μ μκΈ° λλ¬Έμ final static μ μ΄μλ₯Ό ν¨κ» μ μΈνλ€.
βοΈ μ¬μ© μμ
- Spring Security - μ¬μ©μ μΈμ¦ μ 보 μ ν
- MDC Filter - μ€λ λ λ³ λ‘κ·Έ (Tomcat κ°μ WASλ(μ€λ λ λ°κΈ, λ°λ©) μ±κΈν€ λμμΈ ν¨ν΄μμλ μ΄λ»κ² μ¬μ©λ κΉ?)
2. Blocking / Non-Blocking
κΈλ‘ μ 리ν λλ λλ¦ λͺ νν μ΄ν΄νλ€κ³ μκ°νλλ°, λ§μ μ€λͺ νλ €κ³ νλ μ λλ‘ λ§νκ² μλ κ°λ μ΄λ€.
μ΄λ² κ²μκΈλ‘ λ€μ μ 리ν΄λ³΄μ.
Blockingκ³Ό Non-Blockingμ μ μ΄κΆμ κ°μ§λ κ΄μ μΌλ‘ λ°λΌλ³΄λ κ°λ μ΄λ€.
νμ§λ§ μ΄λ κ΄λ μ μΈ μ΄μΌκΈ°μ΄κ³ , μ§μ§ μ€μν ν€ν¬μΈνΈλ Blockingκ³Ό Non-Blockingμ IO μ κ·Όμ λν κ°λ μ΄λ€.
π Blocking
IO μμ μ μννκΈ° μν΄μλ OS 컀λμ μ κ·Όν΄λ©°, ν΄λΉ νλ‘μΈμ€λ₯Ό μ μ νκ³ μλ CPUλ IO μμ μ΄ λ§λ¬΄λ¦¬λ λ κΉμ§ λκΈ° μνλ₯Ό μ μ§νλ€. μ΄ λ, IO μμ μ μννλ CPUλ μμμ μ¬μ©νμ§ μκΈ° λλ¬Έμ λ°μνλ 리μμ€ λλΉκ° ν¬λ€.
π Non-Blocking
Blockingκ³Ό λ¬λ¦¬ IO μμ μ μ§ννλ λμ νμ¬ CPUλ₯Ό μ μ μ€μΈ νλ‘μΈμ€λ₯Ό μ€λ¨νμ§ μλλ€. μ¦, CPU μμμ νμ© ν μ μκΈ° λλ¬Έμ μμμ λλΉκ° Blockingμ λΉν΄ μ€μ΄λ λ€.
3. Synchronous / Asynchronous (λκΈ° / λΉλκΈ°)
Blocking, Non-Blocking IO λͺ¨λΈκ³Ό λ¬λ¦¬ μ€λ λ νΉμ νλ‘μΈμ€μ κ΄μ μμ λ°λΌλ³΄λ κ°λ μ΄λΌκ³ ν μ μλ€.
λκΈ°, λΉλκΈ°λ μμ μ λ°νμ λν΄ μν₯μ λ°λμ§μ λ°λΌ λλμ΄μ§λ€.
π Synchronous (λκΈ°)
λκΈ°λ νλ‘μΈμ€(νΉμ μ€λ λ)κ° μ»€λμκ² IO μμ μ μμ²νκ³ , ν΄λΉ μμ²μ λν μλ΅(μμ μ λ°ν)μ΄ μ¬ λ κΉμ§ λκΈ°(Wait)νλ©° λκΈ°ννλ μμ μ λ§νλ€. Blocking μ²λΌ IO μμ μ μν΄ νλ‘μΈμ€κ° μ€λ¨λλ κ²μ λν κ΄μ μ΄ μλλΌ νλ‘μΈμ€ μμ²μμ 컀λμ μμ μΌλ‘ Context Switchingμ΄ μΌμ΄λλ©΄μ νλ‘μΈμ€μ μμ μ΄ μ κΉ λκΈ°ν μνκ° λλ κ²μ μλ―Ένλ€.
π Asynchronous (λΉλκΈ°)
λΉλκΈ°λ λκΈ°μ λ¬λ¦¬ νλ‘μΈμ€(νΉμ μ€λ λ)κ° μ»€λμκ² IO μμ μ μμ² νμ λ, 컀λμ μλ΅μ λν΄ μν₯μ λ°μ§ μλλ€.
μ¦, λΉλκΈ°μ μΌλ‘ λ€λ₯Έ μμ μ μν ν λ, ν΄λΉ μμ μ΄ μ’ λ£λμ§ μμλ λ€λ₯Έ μμ μΌλ‘ μ΄λ ν μ μλ€λ κ²μ μλ―Ένλ€.
(μν₯μ λ°μ§ μλλ€λ λ§μ 컀λμ μλ΅μ μΈμνμ§ μμλ 컀λμκ² μμ²ν IO μμ μ΄νμ μμ μ νλ‘μΈμ€λ μννλ€λ λ§μ΄λ€.)
4. Buffer
ν΄λΉ κ°λ μ μ€λͺ ν λ, Blockμ λν κ°λ λ ν¨κ» μ€λͺ νλλ°, κ·Έ λλ¬ΈμΈμ§ Bufferμ μ€μν κ°λ μΈ λͺ¨μμ νλ²μ! λΌλ μ μ λμ³λ²λ Έλ€. λ Ήμν λ΄μ©μ λ£λ€λ³΄λ©΄ μ λ§ μ₯ꡬλ©μ λ€μ΄κ°κ³ μΆμ μ λλ€. μ΄λ² νκ³ λ₯Ό ν΅ν΄ λ€μ ν λ² μ 리νλ μκ°μ κ°μ Έλ³΄μ.
λ¨Όμ ν΄λΉ κ°λ μ μ€λͺ νκΈ° μν΄μλ νμΌμ΄λ λ°μ΄ν°μ μ κ·Όνλ λ°©λ²μ λν΄μ μκ³ μμ΄μΌ νλ€.
νμΌμ λμ€ν¬μ μ μ₯νλ€κ³ νμ λ, κ·Έλ₯ 무μμ μ μ₯λλ κ²μ΄ μλλΌ λμ€ν¬(νΉμ λ©λͺ¨λ¦¬ λ±μ κΈ°μ΅ μ₯μΉλ€) μμμ Blockμ΄λΌλ 곡κ°μΌλ‘ λλκ³ , ν΄λΉ μμμ λ§κ² νμΌ(νΉμ λ°μ΄ν°)λ₯Ό μ μ₯νκ² λλ€.
Java μ ν리μΌμ΄μ μ ν΅ν΄μ νμΌμ μ μ₯νλ λ‘μ§μ μμ±νλ€κ³ κ°μ νμ λ, κΈ°μ‘΄μ java.ioλ Bufferλ₯Ό μ§μν΄μ£Όμ§ μμ λ°μ΄ν°λ₯Ό μ°λ μ¦μ λμ€ν¬(νΉμ λ©λͺ¨λ¦¬)μ μ κ·Όνμ¬ νμΌμ μ μ₯νλλ‘ νλ€.
ν΄λΉ μμ μ ν λ²λ§ νμ λλ 무μμ΄ λ¬Έμ μΈμ§ νμ νκΈ° νλ€λ€. νμ§λ§ λ§μ½ μ΄λ¬ν μμ μ 100,000λ² νλ κ²½μ°λΌλ©΄ μ΄λ»κ² λ κΉ?
μΌλ¨, νμΌμ μ μ₯νλ νμλ₯Ό ν λ² μν ν λ λ§λ€ λμ€ν¬μ μ κ·Ό νκ² λλλ°, μ΄λ λΆνμνκ² λ§μ λμ€ν¬ μ κ·ΌμΌλ‘ μΈν΄ μμ μ λ§λ¬΄λ¦¬ ν λκΉμ§ ν΄λΉ νλ‘μΈμ€(μ€λ λ)λ κ³μν΄μ CPUλ₯Ό μ μ νκ³ μμ΄ λ€λ₯Έ μμ μ λΉ λ₯΄κ² μννμ§ λͺ»νλ μμ λλΉλ₯Ό μΌκΈ° ν μ μλ€.
μ΄λ¬ν λ¬Έμ μ μ ν΄κ²°νκΈ° μν΄μ Buffer λ₯Ό μ¬μ©νλ€.
Bufferλ νμΌμ μ°κ±°λ μ½μ λ μ¦μ μ½κ±°λ μ μ₯νμ§ μκ³ , μ μ₯νκ³ μ νλ λ°μ΄ν°λ μΈλΆμμ μ λ¬ λ°μ λ°μ΄ν°λ₯Ό Buffer κ°μ²΄μ λ΄μμ μ¬λ¬ κ°μ λ°μ΄ν°λ₯Ό Buffer κ°μ²΄λ₯Ό ν΅ν΄ λμ€ν¬μ μ κ·Όνκ² λλ€.
μΆκ°μ μΌλ‘ 곡λΆν λ΄μ©λ€
π₯ OSI 7 Layer
π₯ Socket
π₯ Http / Https / SSL
π Blocking / Non-Blocking, Synchronous / Asynchronous