λ€λ₯Έ μ§μ
λ€μ λΉν΄ μννΈμ¨μ΄ μν€ν
νΈ(software architect)
λ λΆλͺ
ν 컀리μ΄ν¨μ€κ° μλ€.
- μ§μ
μ체μ λν λͺ
νν μ μκ° μλ€.
- μ μ λ΄λ¦¬κΈ° μλ€.
- "μν€ν μ²λ μ€μν κ²λ€μ κ΄ν κ²μ΄λ€. κ·Έκ²μ΄ 무μμ΄λ λ§μ΄λ€." - λνμ‘΄μ¨(Ralph Johnson)
- μν μ΄ λ°©λν λΆμΌλ₯Ό ν¬κ΄νλ©° λ²μλ κ³μ λμ΄μ§κ³ μλ€.
- μννΈμ¨μ΄ κ°λ° μνκ³λ λΉ λ₯΄κ² λ°μ νκ³ μννΈμ¨μ΄ μν€ν
μ²λ λμμμ΄ λ³νλ€.
- μννΈμ¨μ΄ μν€ν μ²λ κ·Έ μ μλ₯Ό ν¬ν¨ν λ³Έμ§ μμ²΄κ° λμ μ΄λ€.
- μννΈμ¨μ΄ μν€ν
μ²μ κ΄ν μλ£λ λλΆλΆ μμ¬μ μΈ μ°κ΄μ±μ κ°μ‘°νλ€.
- μ΄κ²μ μμ¬λ κ³Όκ±° μν€ν νΈλ€μ΄ μλνμΌλ ν΄λ‘μ΄ λΆμ ν¨κ³Ό(side effect)λ§ μλ³νκ² λ κ²λ€λ‘ λμ‘νκ² μ½ν μλ€.
- μν€ν
μ²λ μμ κ³Ό λ§μ°¬κ°μ§λ‘ μ½ν
μ€νΈ(context)λ‘μλ§ μ΄ν΄ν μ μλ€λ κ²μ΄λ€.
- μν€ν μ²κ° λ΄λ¦° κ²°μ μ λλΆλΆ κ·Έλ€μ΄ κ·Έλ κ² κ²°μ ν λΉμ νκ²½μ κΈ°μΈν κ²μ΄λ€.
1.1 μννΈμ¨μ΄ μν€ν μ²λ?
μνμ¨μ΄ μν€ν μ²λ₯Ό λ°λΌλ³΄λ νκ°μ§ λ°©λ²
- μμ€ν
ꡬ쑰(structure)
- μμ€ν
μ΄ κ΅¬νλ μν€ν
μ² μ€νμΌ(λ€)μ μ’
λ₯
- λ μ΄μ΄λ μν€ν μ², λ§μ΄ν¬λ‘ μλΉμ€ μν€ν μ² λ±...
- ꡬ쑰λ§μΌλ‘ μν€ν
μ²λ₯Ό μ 체μ μΌλ‘ μ€λͺ
νλ κ²μ λΆμ‘±ν¨
- NOTE: λ³΄ν΅ κ΅¬μ‘°λ§μΌλ‘ μν€ν μ²λ₯Ό μ€λͺ νλ©°, μ λΆκ° μλ
- μμ€ν
μ΄ κ΅¬νλ μν€ν
μ² μ€νμΌ(λ€)μ μ’
λ₯
- μν€ν
μ² νΉμ±(architecture charateristic)
- μμ€ν μ κΈ°λ₯κ³Ό μ§κ΅νλ(orthogonal) μμ€ν μ μ±κ³΅ κΈ°μ€(success criteria)μ κ²°μ ν¨
- κ°μ©μ±, μ λ’°μ±, μνμ±, νμ₯μ±, 보μ, 민첩μ±, λ΄κ³ μ₯μ±, νλ ₯μ±, 볡ꡬμ±, μ±λ₯, λ°°ν¬μ±, νμ΅μ±
- μν€ν
μ² κ²°μ (architecture decision)
- μμ€ν ꡬμΆμ νμν κ·μΉλ€μ μ ν κ²
- μμ€ν μ μ μ½μ‘°κ±΄(constraint)μ νμ±νκ³ κ°λ°μκ° ν΄λ λλ κ²κ³Ό νμ§λ§μμΌ ν κ²μ μλ €μ€
- μ€κ³ μμΉ(design principle)
- κ°μ΄λλΌμΈ(guideline)κ³Ό λΉμ·ν¨
1.2 μν€ν νΈμ λν κΈ°λμΉ
μννΈμ¨μ΄ μν€ν νΈμκ² λ°λΌλ ν΅μ¬μ μΈ μꡬμ¬ν
- μν€ν
μ² κ²°μ μ λ΄λ¦°λ€.
κ°μ΄λ
νλ€.- κΈ°μ μ νμ κ°μ΄λνλ μ¬λμ΄μ§, μ ν΄μ£Όλ(specify) μ¬λμ΄ μλ
- μν€ν νΈλ νμ₯μ±, μ±λ₯, κ°μ©μ± λ±μ μν€ν μ² νΉμ±μ μνΈνκΈ° μν΄ νΉμ ν κΈ°μ μ κ²°μ ν΄μΌ ν λλ μλλ°, μ΄λ° κ²½μ°μλ κ·Έ κΈ°μ μ μ§μ ν νμ μ체λ₯Ό μν€ν μ² κ²°μ μ΄λΌκ³ ν μ μλ€.
- μν€ν
μ²λ₯Ό μ§μμ μΌλ‘ λΆμνλ€.
- λμμμ΄ μν€ν μ²μ νμ¬ κΈ°μ νκ²½μ λΆμνκ³ μ΄λ₯Ό κ°μ νκΈ° μν΄ ν΄κ²° λ°©μμ μ μν¨
- μ§λ μν€ν
μ²κ° νμ€μ±μ λν νκ°λ₯Ό νλ κ²μ΄
μν€ν μ² μλμ±(vitality)
μ κ΄ν μꡬμ¬νμ΄λ€. - μν€ν νΈλ κΈ°μ λ³νμ λ¬Έμ μμμ μ’ ν©μ μΌλ‘ λΆμνμ¬ μν€ν μ²μ 건μ μ±μ μΆκ΅¬ν΄μΌ νλ€.
- μν€ν νΈλΌλ©΄ μ ν리μΌμ΄μ μ κ³μ μ μ νκ² μ μ§ν μ μλ λ₯λ ₯μ κ°μ§κ³ μμ΄μΌ νλ€.
- μ΅μ νΈλ λλ₯Ό κ³μ μ μ§νλ€.
- ν΅μ¬ νΈλ λλ₯Ό μ΄ν΄νκ³ κ³μ μ’μκ° μ μμ΄μΌ λ―Έλλ₯Ό λλΉνκ³ μ¬λ°λ₯Έ κ²°μ μ λ΄λ¦΄ μ μλ€.
- μν€ν
μ² κ²°μ κ³Ό μ€κ³ μμΉμ μ»΄νλΌμ΄μΈμ€(comliance)λ₯Ό 보μ₯νλ€.
μ»΄νλΌμ΄μΈμ€ 보μ₯
: μν€ν νΈκ° μ μνκ³ λ¬Έμννμ¬ μ λ¬ν μν€ν μ² κ²°μ κ³Ό μ€κ³ μμΉλ€μ κ°λ°νμ΄ μ λλ‘ μ€μνκ³ μλμ§ μ§μμ μΌλ‘ νμΈνλ€λ λ»
- λ€μν κΈ°μ κ³Ό κ²½νμ λ
ΈμΆλμ΄μΌ νλ€.
- κΈ°μ νμ λνμΌ νλ€.
- κΈ°μ κ²°μ μ λμμ΄ λ μ μλλ‘
- κΈ°μ νμ λνμΌ νλ€.
- λΉμ¦λμ€ λλ©μΈ μ§μμ 보μ νλ€.
- νλμ μ€λ¬΄(hands-on) κΈ°μ μ§μκ³Ό λλΆμ΄ νΉμ λλ©μΈμ κΉμ΄ μλ μ§μμ 보μ ν΄μΌ νλ€.
- λμΈ κ΄κ³ κΈ°μ μ΄ λ°μ΄λλ€.
- νμν¬, μ‘°μ (facilitation), 리λμμ ν¬ν¨ν λμΈ κ΄κ³ κΈ°μ μ΄ λ°μ΄λμΌ νλ€.
- κ°λ°νμ 리λν΄μ μν€ν μ²λ₯Ό ꡬννλ μ¬λμ΄λ―λ‘ μν€ν νΈλΌλ μ§μ± λλ μν κ³Ό μκ΄μμ΄, 리λμ μ€ν¬μ μννΈμ¨μ΄ μν€ν νΈλ‘μ μ±κ³΅νκΈ° μν΄ νμ μꡬμ¬νμ μ΅μν μ λ° μ΄μμ μ°¨μ§
- μ μΉλ₯Ό μ΄ν΄νκ³ μ²μΈλ₯Ό μνλ€.
- κΈ°μ λ΄λΆμ μ μΉμ λΆμκΈ°λ₯Ό μ΄ν΄νκ³ μ μ νκ² μ μ²μ ν μ€ μμμΌ νλ€.
- μ΅μ’ μ μΌλ‘ νλκ³ μ€μν κ²°μ μ λ΄λ¦¬λ μν€ν νΈ μμ€μ μ΄λ₯΄λ©΄ κ±°μ λͺ¨λ κ²°μ μ μ λΉννκ³ λ°λ μΈλ ₯μ λ§μ μΈμΈ μ€λΉλ₯Ό κ°μΆμ΄μΌ νλ€.
1.3 μν€ν μ²μ κ΅μ°¨μ κ·Έλ¦¬κ³ ...
- μμ§λμ΄λ§ νλν°μ€(engineer practice)
- νλ‘μΈμ€μ 무κ΄νκ² κ°μμ
- λ°λ³΅κ°λ₯ν ννμ μ£Όλ μ€μ²λ‘
- μλ₯Ό λ€μ΄ μ§μμ ν΅ν©(continuous integration)μ νΉμ νλ‘μΈμ€μ μμ‘΄νμ§ μλ κ²μ¦λ μμ§λμ΄λ§ νλν°μ€
- μννΈμ¨μ΄ κ°λ° νλ‘μΈμ€
- μ¬λμ μ‘°μ§νκ³ μνΈμμ©νλ μ΄μ²΄μ μΈ κΈ°λ²
- νμ μ΄λ»κ² ꡬμ±, κ΄λ¦¬ν μ§
- νμλ μ΄λ»κ²
- μν¬νλ‘ μ‘°μ§μ μ΄λ»κ² μ΄μν μ§
- λ±...
- μ¬λμ μ‘°μ§νκ³ μνΈμμ©νλ μ΄μ²΄μ μΈ κΈ°λ²
μμ§λμ΄λ§ νλν°μ€μ μ§μ€νλ κ²μ μ€μνλ€.
- μννΈμ¨μ΄ κ°λ° λΆμΌλ λ³΄λ€ μ±μν λ€λ₯Έ μμ§λμ΄λ§ 체κ³μ μλ λ§μ νΉμ±λ€μ΄ λΉ μ Έ μλ€.
- μννΈμ¨μ΄ κ°λ°μ μν¬λ μ€ κ±΄ μ€ νλλ μΆμ (estimation)μ΄λ€.
- μλ €μ§μ§ μμ λ―Έμ§μ κ²λ€(unknown unknowns) λλ¬Έμ λ μ΄λ ΅λ€.
μλ €μ§μ§ μμ λ―Έμ§μ κ²λ€μ μννΈμ¨μ΄ μμ€ν
μμ νμ°μ μ΄λ€.
μν€ν
νΈλ μλ €μ§μ§ μμ λ―Έμ§μ κ²λ€μ μ€κ³ν μ μκΈ° λλ¬Έμ λΉ
λμμΈ μ
νλ°νΈ(Big Design Up Front; μΌλ¨ μ€κ³λΆν° νμ€νκ²!)
λ°©μμΌλ‘ μ§ννκΈ° μ΄λ ΅λ€.
"λͺ¨λ μν€ν μ²λ μλ €μ§μ§ μμ λ―Έμ§μ κ²λ€ λλ¬Έμ μκΎΈ λνμ΄λλλ°, μ μμΌμ λ¨μ§ μ΄κ²μ μΈμ§ν΄μ λ 빨리 μννλ κ²μ΄λ€."
λ°λ³΅μ μΈ νλ‘μΈμ€λ₯Ό ν΅ν΄ μ΄λ₯Ό ν΄κ²°ν΄μΌ νλ€. μν€ν νΈλ μν€ν μ² μ€νμΌκ³Ό μμ§λμ΄λ§ νλν°μ€κ° 곡μ κ΄κ³λ§(symbiotic mesh)μ νμ±νλλ‘ ν΄μΌ νλ€. μννΈμ¨μ΄ κ°λ°μ λμ μ΄λ©° μν€ν νΈλ μ΄λ€ κΈ°μ€μ λ§κ² μμ€ν μ μ€κ³ν μ μμ§λ§, κ·Έ μ€κ³λ ꡬνκ³Ό μννΈμ¨μ΄ κ°λ° μνκ³μ μ΄μ© μ μλ λ³νλ₯Ό λͺ¨λ κ±°μΉλ©΄μ μ΄μλ¨μμΌ νλ€. κ·Έλμ μ°λ¦¬κ° νμν κ²μ μ§ννλ μν€ν μ²(evolutionary architecture)μ΄λ€.
-
νΌνΈλμ€ ν¨μ(fitness function)
- μκ³ λ¦¬μ¦μ νΉμ ν μ©λλ‘ μ€κ³ν λ κ°λ°μλ λ°λμ κ²°κ³Όλ₯Ό μΈ‘μ νμ¬ μ΅μ ν΄(optimal solution)μ κ°κΉμμ‘λμ§, λ©μ΄μ‘λμ§ νμΈν΄μΌ νλ€.
- μ΄λ€ μν€ν μ² νΉμ±μ κ°κ΄μ μΈ μμ μ±μ νκ°νλ μλ¨
-
νλ‘μΈμ€
- μννΈμ¨μ΄λ₯Ό κ°λ°νλ κ°λ°νμ νλ‘μΈμ€λ μννΈμ¨μ΄ μν€ν μ² μ¬λ¬ ννΈμ μν₯μ λ―ΈμΉλ€
- λͺ¨λ μν€ν μ²λ λ¨μ§ μκ° λ¬Έμ μΌ λΏ λ°λ³΅μ μ΄λ€.
- μ¬κ΅¬μ±(restructuring)μ μ μμΌ λ°©λ²λ‘ μ μ§λ©΄λͺ©μ λ³Ό μ μλ μ€μν μν€ν μ² λΆμΌ μ€ νλλ€.
-
λ°μ΄ν°
- μ½λμ λ°μ΄ν°λ 곡μ κ΄κ³μ¬μ μλλ°©μ΄ μμΌλ©΄ 무μ©μ§λ¬Όμ΄λ€.
1.4 μννΈμ¨μ΄ μν€ν μ² λ²μΉ
μννΈμ¨μ΄ μν€ν μ² μ 1λ²μΉ "μννΈμ¨μ΄ μν€ν μ²μ λͺ¨λ κ²μ λ€ νΈλ μ΄λμ€νλ€. μν€ν νΈκ° νΈλ μ΄λμ€νκ° μλ λκ°λ₯Ό λ°κ²¬νλ€κ³ μκ°νλ€λ©΄ κ·Έκ²μ κ·Έκ° μμ§ νΈλ μ΄λμ€νλ₯Ό λ°κ²¬νμ§ λͺ»νλ€λ μ¦κ±°μΌ κ°λ₯μ±μ΄ λλ€."
μννΈμ¨μ΄ μν€ν μ² μ 2λ²μΉ "'μ΄λ»κ²'λ³΄λ€ 'μ'κ° λ μ€μνλ€."
μμ€ν μ λ€μ¬λ€λ³΄λ©΄ μν€ν μ²μ ꡬ쑰μ μΈ μλμ리λ μμλΌ μ μμ§λ§, μ λ€λ₯Έ κ² λμ κ·Έλ° μ νμ νκ² λλμ§ μ€λͺ νκΈ°λ μ΄λ ΅λ€.
μ΄ μ± μμλ μν€ν νΈκ° νΈλ μ΄λμ€νλ₯Ό κ°μνμ¬ μ κ·Έλ° κ²°μ μ νλμ§, κ·Έλ¦¬κ³ μ€μν κ²°μ μ ν¬μ°©νλ λ©μ§ κΈ°λ²μ μ€μ μ μΌλ‘ μ΄ν΄λ³Έλ€.