Xtring's Blog

🀘🏻 Welcome to my Tech Blog

μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜λž€?

2022-01-01

<img src="/images/iam.png" />

λ‹€λ₯Έ 직업듀에 λΉ„ν•΄ μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…νŠΈ(software architect)λŠ” λΆ„λͺ…ν•œ μ»€λ¦¬μ–΄νŒ¨μŠ€κ°€ μ—†λ‹€.

  1. 직업 μžμ²΄μ— λŒ€ν•œ λͺ…ν™•ν•œ μ •μ˜κ°€ μ—†λ‹€.
    1. μ •μ˜ 내리기 μ—†λ‹€.
    2. "μ•„ν‚€ν…μ²˜λŠ” μ€‘μš”ν•œ 것듀에 κ΄€ν•œ 것이닀. 그것이 무엇이든 말이닀." - λž„ν”„μ‘΄μŠ¨(Ralph Johnson)
  2. 역할이 λ°©λŒ€ν•œ λΆ„μ•Όλ₯Ό ν¬κ΄„ν•˜λ©° λ²”μœ„λ„ 계속 넓어지고 μžˆλ‹€.
  3. μ†Œν”„νŠΈμ›¨μ–΄ 개발 μƒνƒœκ³„λŠ” λΉ λ₯΄κ²Œ λ°œμ „ν•˜κ³  μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜λŠ” λŠμž„μ—†μ΄ λ³€ν•œλ‹€.
    1. μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜λŠ” κ·Έ μ •μ˜λ₯Ό ν¬ν•¨ν•œ 본질 μžμ²΄κ°€ 동적이닀.
  4. μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜μ— κ΄€ν•œ μžλ£ŒλŠ” λŒ€λΆ€λΆ„ 역사적인 연관성을 κ°•μ‘°ν•œλ‹€.
    1. μ΄κ²ƒμ˜ μ—­μ‚¬λŠ” κ³Όκ±° μ•„ν‚€ν…νŠΈλ“€μ΄ μ‹œλ„ν–ˆμœΌλ‚˜ ν•΄λ‘œμš΄ λΆ€μˆ˜ 효과(side effect)만 μ‹λ³„ν•˜κ²Œ 된 κ²ƒλ“€λ‘œ λ‚œμž‘ν•˜κ²Œ μ–½ν˜€ μžˆλ‹€.
    2. μ•„ν‚€ν…μ²˜λž€ 예술과 λ§ˆμ°¬κ°€μ§€λ‘œ μ½˜ν…μŠ€νŠΈ(context)λ‘œμ„œλ§Œ 이해할 수 μ—†λ‹€λŠ” 것이닀.
      1. μ•„ν‚€ν…μ²˜κ°€ λ‚΄λ¦° 결정은 λŒ€λΆ€λΆ„ 그듀이 κ·Έλ ‡κ²Œ κ²°μ •ν•œ λ‹Ήμ‹œ ν™˜κ²½μ— κΈ°μΈν•œ 것이닀.

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)은 νŠΉμ • ν”„λ‘œμ„ΈμŠ€μ— μ˜μ‘΄ν•˜μ§€ μ•ŠλŠ” κ²€μ¦λœ μ—”μ§€λ‹ˆμ–΄λ§ ν”„λž™ν‹°μŠ€
  • μ†Œν”„νŠΈμ›¨μ–΄ 개발 ν”„λ‘œμ„ΈμŠ€
    • μ‚¬λžŒμ„ μ‘°μ§ν•˜κ³  μƒν˜Έμž‘μš©ν•˜λŠ” 총체적인 기법
      • νŒ€μ„ μ–΄λ–»κ²Œ ꡬ성, 관리할지
      • νšŒμ˜λŠ” μ–΄λ–»κ²Œ
      • μ›Œν¬ν”Œλ‘œ 쑰직은 μ–΄λ–»κ²Œ μš΄μ˜ν• μ§€
      • λ“±...

μ—”μ§€λ‹ˆμ–΄λ§ ν”„λž™ν‹°μŠ€μ— μ§‘μ€‘ν•˜λŠ” 것은 μ€‘μš”ν•˜λ‹€.

  1. μ†Œν”„νŠΈμ›¨μ–΄ 개발 λΆ„μ•ΌλŠ” 보닀 μ„±μˆ™ν•œ λ‹€λ₯Έ μ—”μ§€λ‹ˆμ–΄λ§ 체계에 μžˆλŠ” λ§Žμ€ νŠΉμ„±λ“€μ΄ λΉ μ Έ μžˆλ‹€.
  2. μ†Œν”„νŠΈμ›¨μ–΄ 개발의 μ•„ν‚¬λ ˆμŠ€ 건 쀑 ν•˜λ‚˜λŠ” μΆ”μ •(estimation)이닀.
    1. μ•Œλ €μ§€μ§€ μ•Šμ€ λ―Έμ§€μ˜ 것듀(unknown unknowns) λ•Œλ¬Έμ— 더 μ–΄λ ΅λ‹€.

μ•Œλ €μ§€μ§€ μ•Šμ€ λ―Έμ§€μ˜ 것듀은 μ†Œν”„νŠΈμ›¨μ–΄ μ‹œμŠ€ν…œμ—μ„œ 필연적이닀. μ•„ν‚€ν…νŠΈλŠ” μ•Œλ €μ§€μ§€ μ•Šμ€ λ―Έμ§€μ˜ 것듀을 섀계할 수 μ—†κΈ° λ•Œλ¬Έμ— λΉ… λ””μžμΈ μ—… ν”„λŸ°νŠΈ(Big Design Up Front; 일단 섀계뢀터 ν™•μ‹€ν•˜κ²Œ!)λ°©μ‹μœΌλ‘œ μ§„ν–‰ν•˜κΈ° μ–΄λ ΅λ‹€.

"λͺ¨λ“  μ•„ν‚€ν…μ²˜λŠ” μ•Œλ €μ§€μ§€ μ•Šμ€ λ―Έμ§€μ˜ 것듀 λ•Œλ¬Έμ— 자꾸 λ˜ν’€μ΄λ˜λŠ”λ°, μ• μžμΌμ€ 단지 이것을 μΈμ§€ν•΄μ„œ 더 빨리 μˆ˜ν–‰ν•˜λŠ” 것이닀."

반볡적인 ν”„λ‘œμ„ΈμŠ€λ₯Ό 톡해 이λ₯Ό ν•΄κ²°ν•΄μ•Ό ν•œλ‹€. μ•„ν‚€ν…νŠΈλŠ” μ•„ν‚€ν…μ²˜ μŠ€νƒ€μΌκ³Ό μ—”μ§€λ‹ˆμ–΄λ§ ν”„λž™ν‹°μŠ€κ°€ 곡생 관계망(symbiotic mesh)을 ν˜•μ„±ν•˜λ„λ‘ ν•΄μ•Ό ν•œλ‹€. μ†Œν”„νŠΈμ›¨μ–΄ κ°œλ°œμ€ 동적이며 μ•„ν‚€ν…νŠΈλŠ” μ–΄λ–€ 기쀀에 맞게 μ‹œμŠ€ν…œμ„ 섀계할 수 μžˆμ§€λ§Œ, κ·Έ μ„€κ³„λŠ” κ΅¬ν˜„κ³Ό μ†Œν”„νŠΈμ›¨μ–΄ 개발 μƒνƒœκ³„μ˜ μ–΄μ©” 수 μ—†λŠ” λ³€ν™”λ₯Ό λͺ¨λ‘ κ±°μΉ˜λ©΄μ„œ 살아남아야 ν•œλ‹€. κ·Έλž˜μ„œ μš°λ¦¬κ°€ ν•„μš”ν•œ 것은 μ§„ν™”ν•˜λŠ” μ•„ν‚€ν…μ²˜(evolutionary architecture)이닀.

  • ν”ΌνŠΈλ‹ˆμŠ€ ν•¨μˆ˜(fitness function)

    • μ•Œκ³ λ¦¬μ¦˜μ„ νŠΉμ •ν•œ μš©λ„λ‘œ 섀계할 λ•Œ κ°œλ°œμžλŠ” λ°˜λ“œμ‹œ κ²°κ³Όλ₯Ό μΈ‘μ •ν•˜μ—¬ μ΅œμ ν•΄(optimal solution)에 κ°€κΉŒμ›Œμ‘ŒλŠ”μ§€, λ©€μ–΄μ‘ŒλŠ”μ§€ 확인해야 ν•œλ‹€.
    • μ–΄λ–€ μ•„ν‚€ν…μ²˜ νŠΉμ„±μ˜ 객관적인 완전성을 ν‰κ°€ν•˜λŠ” μˆ˜λ‹¨
  • ν”„λ‘œμ„ΈμŠ€

    • μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό κ°œλ°œν•˜λŠ” κ°œλ°œνŒ€μ˜ ν”„λ‘œμ„ΈμŠ€λŠ” μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜ μ—¬λŸ¬ νŒŒνŠΈμ— 영ν–₯을 λ―ΈμΉœλ‹€
    • λͺ¨λ“  μ•„ν‚€ν…μ²˜λŠ” 단지 μ‹œκ°„ 문제일 뿐 λ°˜λ³΅μ μ΄λ‹€.
    • μž¬κ΅¬μ„±(restructuring)은 μ• μžμΌ λ°©λ²•λ‘ μ˜ 진면λͺ©μ„ λ³Ό 수 μžˆλŠ” μ€‘μš”ν•œ μ•„ν‚€ν…μ²˜ λΆ„μ•Ό 쀑 ν•˜λ‚˜λ‹€.
  • 데이터

    • μ½”λ“œμ™€ λ°μ΄ν„°λŠ” 곡생 κ΄€κ³„μ—¬μ„œ μƒλŒ€λ°©μ΄ μ—†μœΌλ©΄ λ¬΄μš©μ§€λ¬Όμ΄λ‹€.

1.4 μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜ 법칙

μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜ 제1법칙 "μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜μ˜ λͺ¨λ“  것은 λ‹€ νŠΈλ ˆμ΄λ“œμ˜€ν”„λ‹€. μ•„ν‚€ν…νŠΈκ°€ νŠΈλ ˆμ΄λ“œμ˜€ν”„κ°€ μ•„λ‹Œ λ­”κ°€λ₯Ό λ°œκ²¬ν–ˆλ‹€κ³  μƒκ°ν–ˆλ‹€λ©΄ 그것은 κ·Έκ°€ 아직 νŠΈλ ˆμ΄λ“œμ˜€ν”„λ₯Ό λ°œκ²¬ν•˜μ§€ λͺ»ν–ˆλ‹€λŠ” 증거일 κ°€λŠ₯성이 λ†’λ‹€."

μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜ 제2법칙 "'μ–΄λ–»κ²Œ'보닀 'μ™œ'κ°€ 더 μ€‘μš”ν•˜λ‹€."

μ‹œμŠ€ν…œμ„ 듀여닀보면 μ•„ν‚€ν…μ²˜μ˜ ꡬ쑰적인 μž‘λ™μ›λ¦¬λŠ” μ•Œμ•„λ‚Ό 수 μžˆμ§€λ§Œ, μ™œ λ‹€λ₯Έ 것 λŒ€μ‹  그런 선택을 ν•˜κ²Œ λλŠ”μ§€ μ„€λͺ…ν•˜κΈ°λŠ” μ–΄λ ΅λ‹€.

이 μ±…μ—μ„œλŠ” μ•„ν‚€ν…νŠΈκ°€ νŠΈλ ˆμ΄λ“œμ˜€ν”„λ₯Ό κ°μ•ˆν•˜μ—¬ μ™œ 그런 결정을 ν•˜λŠ”μ§€, 그리고 μ€‘μš”ν•œ 결정을 ν¬μ°©ν•˜λŠ” 멋진 기법을 μ€‘μ μ μœΌλ‘œ μ‚΄νŽ΄λ³Έλ‹€.