13μ₯ λμμ±
λμμ±κ³Ό κΉλν μ½λλ μ립νκΈ° μ΄λ ΅λ€.
1. λμμ±μ΄ νμν μ΄μ ?
λμμ±μ κ²°ν©μ μμ λ μ λ΅μ΄λ€. μ¦, 무μκ³Ό μΈμ λ₯Ό λΆλ¦¬νλ μ λ΅μ΄λ€.
μ€λ λκ° νλμΈ νλ‘κ·Έλ¨μ 무μκ³Ό μΈμ κ° μλ‘ λ°μ νλ€.
κ·Έλμ νΈμΆ μ€νμ μ΄ν΄λ³΄λ©΄ νλ‘κ·Έλ¨ μνκ° κ³§λ°λ‘ λλ¬λλ€.
νν λ¨μΌ μ€λ λ νλ‘κ·Έλ¨μ μ μ§μ (breakpoint)μ μ ν ν μ΄λ μ μ§μ μΈμ§ μ΄ν΄λ³΄λ©΄μ μμ€ν μνλ₯Ό νμ νλ€.
무μκ³Ό μΈμ λ₯Ό λΆλ¦¬νλ©΄ μ ν리μΌμ΄μ ꡬ쑰μ ν¨μ¨μ΄ κ·Ήμ μΌλ‘ λμμ§λ€.
ꡬ쑰μ μΈ κ΄μ μμ νλ‘κ·Έλ¨μ κ±°λν 루ν νλκ° μλλΌ μμ νλ ₯ νλ‘κ·Έλ¨ μ¬λΏμΌλ‘ 보μΈλ€.
λ°λΌμ μμ€ν μ μ΄ν΄νκΈ°κ° μ½κ³ λ¬Έμ λ₯Ό λΆλ¦¬νκΈ°λ μ½λ€.
ꡬ쑰μ κ°μ λ§μ μν΄ λμμ±μ μ±ννλ κ²μ μλλ€.
μ΄λ€ μμ€ν μ μλ΅ μκ°κ³Ό μμ μ²λ¦¬λ(throughput) κ°μ μ μν΄ μ¬μ©νκΈ°λ νλ€.
1) λ―Έμ κ³Ό μ€ν΄
- λμμ±μ νμ μ±λ₯μ λμ¬μ€λ€: λμμ±μ λλ‘ μ±λ₯μ λμ¬μ€λ€. λκΈ° μκ°μ΄ κΈΈμ΄ μ¬λ¬ μ€λ λκ° νλ‘μΈμλ₯Ό 곡μ ν μ μκ±°λ, μ¬λ¬ νλ‘μΈμκ° λμμ μ²λ¦¬ν λ 립μ μΈ κ³μ°μ΄ μΆ©λΆν κ²½μ°μλ§ μ±λ₯μ΄ λμμ§λ€.
- λμμ±μ ꡬνν΄λ μ€κ³λ λ³νμ§ μλλ€: λ¨μΌ μ€λ λμ λ€μ€ μ€λ λμ μμ€ν μ μ€κ³κ° νμ΄νκ² λ€λ₯΄λ€.
- μΉ λλ EJB 컨ν μ΄λλ₯Ό μ¬μ©νλ©΄ λμμ±μ μ΄ν΄ν νμκ° μλ€: μ€μ λ‘ μ»¨ν μ΄λκ° μ΄λ»κ² λμνλμ§, μ΄λ»κ² λμ μμ , λ°λλ½ λ±κ³Ό κ°μ λ¬Έμ λ₯Ό νΌν μ μλμ§λ₯Ό μμμΌλ§ νλ€.
2) νλΉν μκ°
- λμμ±μ λ€μ λΆνλ₯Ό μ λ°νλ€: μ±λ₯ μΈ‘λ©΄μμ λΆνκ° κ±Έλ¦¬λ©°, μ½λλ λ μ§μΌνλ€.
- λμμ±μ 볡μ‘νλ€.
- μΌλ°μ μΌλ‘ λμμ± λ²κ·Έλ μ¬ννκΈ° μ΄λ ΅λ€: κ²°ν¨μΌλ‘ κ°μ£Όλμ§ μκ³ μΌνμ± λ¬Έμ λ‘ μ¬κ²¨ 무μλκΈ° μ½λ€.
- λμμ±μ ꡬννλ €λ©΄ νν κ·Όλ³Έμ μΈ μ€κ³ μ λ΅μ μ¬κ³ ν΄μΌ νλ€.
2. λκ΄
λμμ±μ ꡬννκΈ° μ΄λ €μ΄ μ΄μ λ 무μμΌκΉ?
public class X {
private int lastIdUsed;
public int getNextId() {
return ++lastIdUsed;
}
}
// μΈμ€ν΄μ€ Xλ₯Ό μμ±νκ³ , lastIdUsed λ₯Ό 42λ‘ μ€μ ν λ€μ, λ μ€λ λκ° ν΄λΉ μΈμ€ν΄μ€λ₯Ό 곡μ νλ€.
// λ μ€λ λκ° getNextId();λ₯Ό νΈμΆνλ€λ©΄, κ²°κ³Όλ μ
μ€ νλλ€.
// ν μ€λ λλ 43μ λ°λλ€. λ€λ₯Έ μ€λ λλ 44λ₯Ό λ°λλ€. lastIdUsedλ 44κ° λλ€.
// ν μ€λ λλ 44μ λ°λλ€. λ€λ₯Έ μ€λ λλ 43μ λ°λλ€. lastIdUsedλ 44κ° λλ€.
// ν μ€λ λλ 43μ λ°λλ€. λ€λ₯Έ μ€λ λλ 43λ₯Ό λ°λλ€. lastIdUsedλ 44κ° λλ€.
// κ°μ²΄ νλλ₯Ό 곡μ ν ν λμΌ νλλ₯Ό μμ νλ λ μ€λ λκ° μλ‘ κ°μνλ―λ‘ μμμΉ λͺ»ν κ²°κ³Όλ₯Ό λ΄λλλ€.
3. λμμ± λ°©μ΄ μμΉ
1) λ¨μΌ μ± μ μμΉ(SRP)
μ£Όμ΄μ§ λ©μλ, ν΄λμ€, μ»΄ν¬λνΈλ₯Ό λ³κ²½ν μ΄μ κ° νλμ¬μΌ νλ€λ μμΉμ΄λ€.
λμμ±μ 볡μ‘μ± νλλ§μΌλ‘λ λ°λ‘ λΆλ¦¬ν μ΄μ κ° μΆ©λΆνλ€. μ¦, λμμ± κ΄λ ¨ μ½λλ λ€λ₯Έ μ½λμ λΆλ¦¬ν΄μΌ νλ€.
- λμμ± μ½λλ λ μμ μΈ κ°λ°, λ³κ²½, μ‘°μ¨ μ£ΌκΈ°κ° μλ€.
- λμμ± μ½λμλ λ μμ μΈ λκ΄μ΄ μλ€. λ€λ₯Έ μ½λμμ κ²ͺλ λκ΄κ³Ό λ€λ₯΄λ©° ν¨μ¬ μ΄λ ΅λ€.
2) λ°λ¦ μ 리(corollary): μλ£ λ²μλ₯Ό μ ννλΌ
곡μ κ°μ²΄λ₯Ό μ¬μ©νλ μ½λ λ΄ μκ³ μμμ synchronized ν€μλλ‘ μΊ‘μννμ¬ λ³΄νΈν΄μΌ νλ€.
μ΄λ° μκ³ μμμ μλ₯Ό μ€μ΄λ κΈ°μ λ μ€μνλ€. 곡μ μλ£λ₯Ό μμ νλ μμΉκ° λ§μμλ‘ μνμ±λ 컀μ§λ€.
- μλ£ μ¬λ³Έμ μ¬μ©νλΌ: 곡μ μλ£λ₯Ό μ€μ΄λ €λ©΄ μ²μλΆν° μ¬μ©νμ§ μλ λ°©λ²μ΄ μ μΌ μ’λ€. κ°μ²΄λ₯Ό 볡μ¬ν΄ μ½κΈ° μ μ©μΌλ‘ μ¬μ©νκ±°λ μ¬μ© ν κ²°κ³Όλ₯Ό κ°μ Έμ€μ§ μλ λ°©λ²λ κ°λ₯νλ€.
- μ€λ λλ κ°λ₯ν λ 립μ μΌλ‘ ꡬννλΌ: λ€λ₯Έ μ€λ λμ μλ£λ₯Ό 곡μ νμ§ μλλ€. κ° μ€λ λλ ν΄λΌμ΄μΈνΈ μμ² νλλ₯Ό μ²λ¦¬νλ€.
4. μ€ν λͺ¨λΈμ μ΄ν΄νλΌ
1) κΈ°λ³Έ μ©μ΄
- νμ λ μμ(Bound Resource): λ€μ€ μ€λ λ νκ²½μμ μ¬μ©νλ μμμΌλ‘ ν¬κΈ°λ μ«μκ° μ νμ μ΄λ€. λ°μ΄ν°λ² μ΄μ€ μ°κ²°, κΈΈμ΄κ° μΌμ ν μ½κΈ°/μ°κΈ° λ²νΌ λ±μ΄ μμ΄λ€.
- μνΈ λ°°μ (Mutual Exclusion): ν λ²μ ν μ€λ λλ§ κ³΅μ μλ£λ μμμ μ¬μ©ν μ μλ€.
- κΈ°μ(Starvation): ν μ€λ λλ μ¬λ¬ μ€λ λκ° κ΅μ₯ν μ€λ«λμ νΉμ μμν μμμ κΈ°λ€λ¦°λ€.
- λ°λλ½(Deadlock): μ¬λ¬ μ€λ λκ° μλ‘κ° λλκΈ°λ₯Ό κΈ°λ€λ¦°λ€. λͺ¨λ μ€λ λκ° κ°κΈ° νμν μμμ λ€λ₯Έ μ€λ λκ° μ μ νλ λ°λμ μ΄λ μͺ½λ λ μ΄μ μ§ννκΈ° λͺ»νλ€.
- λΌμ΄λΈλ½(Livelock): λ½μ κ±°λ λ¨κ³μμ κ° μ€λ λκ° μλ‘λ₯Ό λ°©ν΄νλ€. μ€λ λλ κ³μν΄μ μ§ννλ € νμ§λ§, 곡λͺ (resonance)μΌλ‘ μΈν΄ μ€λ«λμ μ§ννμ§ λͺ»νλ€.
2) μμ°μ-μλΉμ(Producer-Consumer)
νλ μ΄μ μμ°μ μ€λ λκ° μ 보λ₯Ό μμ±ν΄ λ²νΌλ λκΈ°μ΄μ λ£λλ€.
νλ μ΄μ μλΉμ μ€λ λκ° λκΈ°μ΄μμ μ 보λ₯Ό κ°μ Έμ μ¬μ©νλ€.
λ μ€λ λκ° μ¬μ©νλ λκΈ°μ΄μ νμ λ μμμ΄λ€.
μμ°μ μ€λ λλ λκΈ°μ΄μ λΉ κ³΅κ°μ΄ μμ΄μΌ μ 보λ₯Ό μ±μ΄λ€. μ¦, λΉ κ³΅κ°μ΄ μκΈΈ λκΉμ§ κΈ°λ€λ¦°λ€.
μλΉμ μ€λ λλ λκΈ°μ΄μ μ λ³΄κ° μμ΄μΌ κ°μ Έμ¨λ€. μ¦, μ λ³΄κ° μ±μμ§ λκΉμ§ κΈ°λ€λ¦°λ€.
λ°λΌμ μλͺ»νλ©΄ λ μ€λ λ λͺ¨λ μ§ν κ°λ₯ν¨μλ λΆκ΅¬νκ³ λμμ μλ‘μκ² μκ·Έλμ κΈ°λ€λ¦΄ κ°λ₯μ±μ΄ μ‘΄μ¬νλ€.
3) μ½κΈ°-μ°κΈ°(Readers-Writers)
μ½κΈ° μ€λ λλ μ£Όλ μ 보μμΌλ‘ 곡μ μμμ μ¬μ©νμ§λ§
μ°κΈ° μ€λ λκ° κ³΅μ μμμ κ°λ κ°±μ νλ€κ³ νμ.
μ΄λ° κ²½μ° μ²λ¦¬μ¨μ΄ λ¬Έμ μ ν΅μ¬μΈλ° μ²λ¦¬μ¨μ κ°μ‘°νλ©΄ κΈ°μ νμμ΄ μκΈ°κ±°λ μ€λλ μ λ³΄κ° μμΌ μ μλ€.
λκ°λ μ°κΈ° μ€λ λκ° λ²νΌλ₯Ό μ€λ«λμ μ μ νλ λ°λμ μ¬λ¬ μ½κΈ° μ€λ λκ° λ²νΌλ₯Ό κΈ°λ€λ¦¬λλΌ μ²λ¦¬μ¨μ΄ λ¨μ΄μ§λ€.
λ°λΌμ μ½κΈ° μ€λ λμ μꡬμ μ°κΈ° μ€λ λμ μꡬλ₯Ό μ μ ν λ§μ‘±μμΌ μ²λ¦¬μ¨λ μ λΉν λμ΄κ³ κΈ°μλ λ°©μ§ν΄μΌ νλ€.
4) μμ¬νλ μ² νμλ€
μ¬κΈ°μ μ² νμλ₯Ό μ€λ λλ‘ ν¬ν¬λ₯Ό μμμΌλ‘ λ°κΏ μκ°ν΄λ³΄μ
μ£Όμν΄μ μ€κ³νμ§ μμΌλ©΄ λ°λλ½, λΌμ΄λΈλ½, μ²λ¦¬μ¨ μ ν, ν¨μ¨μ± μ ν λ±μ κ²ͺμ μ μλ€.
5. λκΈ°ννλ λ©μλ μ¬μ΄μ μ‘΄μ¬νλ μμ‘΄μ±μ μ΄ν΄νλΌ
λκΈ°ννλ λ©μλ μ¬μ΄μ μμ‘΄μ±μ΄ μ‘΄μ¬νλ©΄ λμμ± μ½λμ μ°Ύμλ΄κΈ° μ΄λ €μ΄ λ²κ·Έκ° μκΈ΄λ€.
곡μ κ°μ²΄ νλμλ λ©μλ νλλ§ μ¬μ©ν΄μΌ νλ€.
6. λκΈ°ννλ λΆλΆμ μκ² λ§λ€μ΄λΌ
μλ°μμ synchronized ν€μλλ₯Ό μ¬μ©νλ©΄, κ°μ λ½μΌλ‘ κ°μΌ λͺ¨λ μ½λ μμμ ν λ²μ ν μ€λ λλ§ μ€νμ΄ κ°λ₯νλ€.
λ½μ μ€λ λλ₯Ό μ§μ°μν€κ³ λΆνλ₯Ό κ°μ€μν€λ―λ‘ μκ³ μμ μλ₯Ό μ΅λν μ€μ¬μΌ νλ€.
κ·Έλ¬λ μλ₯Ό μ€μΈλ€κ³ νμ μ΄μμΌλ‘ μκ³ μμ ν¬κΈ°λ₯Ό ν€μ°λ©΄ μ€λ λ κ°μ κ²½μμ΄ λμ΄λκ³ νλ‘κ·Έλ¨ μ±λ₯μ΄ λ¨μ΄μ§λ€.
7. μ¬λ°λ₯Έ μ’ λ£ μ½λλ ꡬννκΈ° μ΄λ ΅λ€
κΉλνκ² μ’ λ£λλ μ½λλ μ¬λ°λ‘ ꡬννκΈ° μ΄λ ΅λ€.
κ°μ₯ νν λ°μνλ λ¬Έμ κ° λ°λλ½μ΄λ€. μ¦, μ€λ λκ° μ λ μ€μ§ μμ μκ·Έλμ κΈ°λ€λ¦°λ€.
μλ₯Ό λ€μ΄, λΆλͺ¨ μ€λ λκ° μμ μ€λ λλ₯Ό μ¬λ¬ κ° λ§λ ν μ’ λ£μν€λ €λ λ° λ§μ½ μμ μ€λ λ μ€ νλκ° λ°λλ½μ κ±Έλ Έλ€λ©΄ λΆλͺ¨ μ€λ λλ μμν κΈ°λ€λ €μΌ νλ€.
8. μ€λ λ μ½λ ν μ€νΈνκΈ°
λ¬Έμ λ₯Ό λ ΈμΆνλ ν μ€νΈ μΌμ΄μ€λ₯Ό μμ±νλΌ.
νλ‘κ·Έλ¨ μ€μ κ³Ό μμ€ν μ€μ κ³Ό λΆνλ₯Ό λ°κΏκ°λ©° μμ£Ό λλ €λΌ.
ν μ€νΈκ° μ€ν¨νλ©΄ μμΈμ μΆμ νλΌ. κ·Έλ₯ λμ΄κ°λ©΄ μ λλ‘ μ λλ€.