πŸ› Architecture Tactics

3 minute read

μ•„ν‚€ν…μ²˜ μ „μˆ μ΄λž€ ν•˜λ‚˜μ˜ ꡬ쑰 λ˜λŠ” μ—°μ‚° λ©”μ»€λ‹ˆμ¦˜λ§Œ μ‚¬μš©ν•˜μ—¬ ν•˜λ‚˜μ˜ μ•„ν‚€ν…μ²˜ μ˜μ—­λ§Œμ„ ν•΄κ²°ν•œλ‹€λŠ” μ˜λ―Έμ΄λ‹€. μ΄λŸ¬ν•œ μ „μˆ μ€ μ›μ†Œμ μ΄κ³  νŒ¨ν„΄μ€ λΆ„μžμ μ΄λΌκ³  말할 수 있으며 λŒ€λΆ€λΆ„μ˜ νŒ¨ν„΄μ€ μ „μˆ λ‘œ κ΅¬μ„±λœλ‹€.


μ•„ν‚€ν…μ²˜ μ „μˆ μ€ Computer Science 적인 기법과 μ†Œν”„νŠΈμ›¨μ–΄ ꡬ쑰둜 λ¬Έμ œκ°€ ν¬ν•¨λ˜μ–΄ 있으며 주둜 μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜λ₯Ό μˆ˜λ¦½ν•˜κ³  ν’ˆμ§ˆ 속성을 λ†’μ΄λŠ” 데 μ‚¬μš©λœλ‹€.

μ•„ν‚€ν…μ²˜ μ „μˆ μ˜ μ£Όμš” ν’ˆμ§ˆ μ§€μˆ˜λŠ” λ‹€μŒκ³Ό κ°™λ‹€.
λ³€κ²½μš©μ΄μ„± (Modificability)
μ„±λŠ₯μ„± (Performance)
λ³΄μ•ˆμ„± (Security)
κ°€μš©μ„± (Availability)
각각의 ν•­λͺ©λ³„ μ „μˆ  λ‚΄μš©μ„ μ‚΄νŽ΄ 보자

λ³€κ²½μš©μ΄μ„±μ€ 변화에 λŒ€ν•œ λΆ€λΆ„μœΌλ‘œ 변화와 κ΄€λ ¨ν•œ Risk와 Cost에 λŒ€ν•œ 뢀뢄이닀.
Risk와 Costλ₯Ό 쀄여 μ£Όμ–΄μ•Ό 변경이 μš©μ΄ν•˜λ‹€.
Reduce Size of a Module

  • Split Module : λͺ¨λ“ˆμ„ 더 μž‘μ€ λ‹¨μœ„λ‘œ λ‚˜λˆ„λ©΄ λ³€κ²½μ˜ 평균 λΉ„μš©μ„ 쀄일 수 μžˆλ‹€.
    Reduce Coupling
  • Encapsulate
  • Use an Intermediary : Broker(μ€‘μž¬μž)κ°€ 쒅속성을 끊음
  • Restrict Dependencies : layered architecture, wrapper
  • Refactor
  • Abstract common services
    Increase cohension
  • Increase Semantic Coherence: 의미 일관성 증가 p ν•œ λͺ¨λ“ˆμ„ λ³€κ²½ν•˜λŠ” 것이 μ±…μž„μ— 영ν–₯을 λ―ΈμΉ˜μ§€λ§Œ λͺ¨λ“ˆμ˜ 일뢀 μ±…μž„μ—λŠ” 영ν–₯을 λ―Έ μΉ˜μ§€ μ•ŠλŠ” 경우 ν•΄λ‹Ή μ±…μž„μ€ λ‹€λ₯Έ λͺ¨λ“ˆμ— λ°°μΉ˜λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. μ±…μž„ μ±…μž„ λΉ„ μ²΄ν•˜λŠ” ㅏ ㅏ λ³€κ²½ μš”μ²­ 영ν–₯을받지 μ•Šμ•˜λ‹€ λΉ„ μˆ˜μ • κ°€λŠ₯μ„± μ „μˆ  λ³€ν™” n 영ν–₯을 λ°›μ§€ μ•ŠλŠ” μ±…μž„ 뢄리 n λͺ¨λ“ˆμ˜ μ±…μž„ A와 Bκ°€ λ™μΌν•œ λͺ©μ μ„ μˆ˜ν–‰ν•˜μ§€ μ•ŠλŠ” κ²½ 우 μ„œλ‘œ λ‹€λ₯Έ λͺ¨λ“ˆμ— λ°°μΉ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€
  • Defer binding: λŸ°νƒ€μž„ 등둝 ->등둝을 κ΄€λ¦¬ν•˜κΈ° μœ„ν•œ μΆ”κ°€ μ˜€λ²„ν—€λ“œ λΉ„μš©μœΌλ‘œ ν”ŒλŸ¬κ·Έ μ•€ ν”Œ 레이 μž‘μ—…. p ꡬ성 파일 n μ‹œμž‘ μ‹œ λ§€κ°œλ³€μˆ˜ μ„€μ • p λ‹€ν˜•μ„± λ©”μ„œλ“œ 호좜의 λŠ¦μ€ 바인딩

    ReliabilityλŠ” β€œμ£Όμ–΄μ§„ ν™˜κ²½μ—μ„œ νŠΉμ • λͺ©μ μ„ μœ„ν•΄ μ§€μ •λœ μ‹œκ°„λ™μ•ˆ κ³ μž₯ 없이 운영될 수 μžˆλŠ” ν™•λ₯ β€λ‘œμ¨ μ‹œμŠ€ν…œμ˜ μ„œλΉ„μŠ€κ°€ μ§€μ •ν•œ λŒ€λ‘œ μ˜¬λ°”λ₯΄κ²Œ 전달될 ν™•λ₯ μ„ λ§ν•©λ‹ˆλ‹€.
    AvailabilityλŠ” β€œμ£Όμ–΄μ§„ μ‹œμ μ—μ„œ μš”μ²­λœ μ„œλΉ„μŠ€κ°€ 제곡되고 운영될 수 μžˆλŠ” ν™•λ₯ β€λ‘œμ¨ μ‚¬μš©μžκ°€ μ„œλΉ„μŠ€λ₯Ό μš”μ²­ν–ˆμ„ λ•Œ μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•  수 μžˆλŠ” ν™•λ₯ μ„ λ§ν•©λ‹ˆλ‹€.
    두 개의 차이점에 λŒ€ν•˜μ—¬ μ•„μ‹œκ² λ‚˜μš”? μ‹œμŠ€ν…œμ΄ 응닡을 ν•˜λ©΄ 일단 Availabilityλ₯Ό λ§Œμ‘±ν•˜λŠ” 것이고 μ˜¬λ°”λ₯Έ 결과값을 μ£ΌλŠ”μ§€ μ•ˆ μ£ΌλŠ”μ§€μ™€λŠ” 상관이 μ—†μŠ΅λ‹ˆλ‹€.
    μ˜¬λ°”λ₯Έ 결과값을 μ£ΌλŠ”μ§€μ— λŒ€ν•΄μ„œλŠ” Reliabilityμ—μ„œ 적용이 λ©λ‹ˆλ‹€.
    Availabilityμ—μ„œλŠ” μ‹€νŒ¨(Failure)κ°€ μ€‘μš”ν•˜λ©° μ‹€νŒ¨κ°€ 될 수 μžˆλŠ” 였λ₯˜λ₯Ό 사전에 νŒŒμ•…ν•˜λŠ” 것도 μ€‘μš”ν•˜κ³  μ‹€νŒ¨κ°€ λ°œμƒν•  경우 볡ꡬ와 수리λ₯Ό μ–Όλ§ˆλ‚˜ λΉ λ₯΄κ²Œ ν•˜λŠ” 냐도 μ€‘μš”ν•©λ‹ˆλ‹€.
    λ”°λΌμ„œ λŒ€ν‘œμ μΈ μ ‘κ·Ό λ°©λ²•μœΌλ‘œλŠ” 쀑볡(redundancy), μ‹€νŒ¨ 감지λ₯Ό μœ„ν•œ λͺ¨λ‹ˆν„°λ§, μ‹€νŒ¨ 감지 μ‹œ 볡ꡬ(μžλ™ λ˜λŠ” μˆ˜λ™) 등이 μžˆμŠ΅λ‹ˆλ‹€.
    κ²°ν•¨κ²€μΆœ(Fault Detection)
  • Ping/echo : ν•˜λ‚˜μ˜ μ»΄ν¬λ„ŒνŠΈμ—μ„œ κ²€μ‚¬λŒ€μƒ μ»΄ν¬λ„ŒνŠΈλ‘œ 이벀트 λ°œμƒ
  • λͺ¨λ‹ˆν„° : μ‹œμŠ€ν…œμ˜ λ‹€μ–‘ν•œ λΆ€λΆ„(ν”„λ‘œμ„ΈμŠ€, I/O, λ©”λͺ¨λ¦¬ λ“±)의 μƒνƒœλ₯Ό λͺ¨λ‹ˆν„°
  • HeartBeat : ν•œμͺ½μ—μ„œ 심μž₯박동 λ©”μ‹œμ§€λ₯Ό 보내면 λ‹€λ₯Έ μͺ½μ—μ„œ 청취함, 심μž₯ 박동 λ©”μ‹œμ§€κ°€ μ—†μœΌλ©΄ 전솑 μ»΄ν¬λ„ŒνŠΈκ°€ μ‹€νŒ¨ν•œ κ²ƒμœΌλ‘œ κ°„μ£Ό
  • νƒ€μž„ μŠ€ν…œν”„ : μ΄λ²€νŠΈκ°€ λ°œμƒν•œ 후에 μ¦‰μ‹œ μ΄λ²€νŠΈμ— local checkλ₯Ό μ„€μ •
  • sanity checking : μ»΄ν¬λ„ŒνŠΈμ˜ λ™μž‘ λ˜λŠ” 좜λ ₯의 μœ νš¨μ„±μ΄λ‚˜ 합리성을 검사, νŠΉμ •ν•œ μ •λ³΄μ˜ 흐름을 κ²€μ‚¬ν•˜κΈ° μœ„ν•΄ μΈν„°νŽ˜μ΄μŠ€μ—μ„œ 주둜 μ‚¬μš©
  • 쑰건 λͺ¨λ‹ˆν„°λ§(Condition Monitoring) : ν”„λ‘œμ„ΈμŠ€λ‚˜ λ””λ°”μ΄μŠ€μ˜ 쑰건을 κ²€μ‚¬ν•˜κ±°λ‚˜ 섀계 μ‹œμ— 이뀄진 가정을 쑰사
  • Voting : 같은 일을 ν•˜λŠ” μ„Έ 개의 μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‚¬μš©ν•˜μ—¬ λ™μΌν•œ μž…λ ₯을 λ°›μ•„μ„œ νˆ¬ν‘œ λ‘œμ§μ— μžμ‹ μ˜ 좜λ ₯을 보내 μ„Έ 개의 좜λ ₯ μƒνƒœ μ‚¬μ΄μ˜ λΉ„ 일관성을 μ°Ύμ•„λ‚΄λŠ”λ° μ‚¬μš©
  • Self Test : μ»΄ν¬λ„ŒνŠΈκ°€ μ •ν™•ν•œ μ˜€νΌλ ˆμ΄μ…˜μ„ ν•˜κ³  μžˆλŠ”μ§€ 슀슀둜 ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰

였λ₯˜λ³΅κ΅¬(fault recovery)

  • Active redundancy : λ³‘λ ¬λ‘œ λ™μΌν•œ μž…λ ₯을 λ°›μ•„μ„œ μ²˜λ¦¬ν•˜κ³  μ˜ˆλΉ„ λ…Έλ“œλŠ” ν™œμ„± λ…Έλ“œμ™€ 동기적 μƒνƒœλ₯Ό μœ μ§€
  • Passive redundancy : ν•˜λ‚˜μ˜ ν™œμ„±λ…Έλ“œλ§Œ μœ μ§€
  • Spare : μ˜ˆλΉ„ λ…Έλ“œλŠ” μ‹€νŒ¨ 볡ꡬ가 λ°œμƒν•  λ•ŒκΉŒμ§€ μž‘λ™ν•˜μ§€ μ•ŠλŠ”λ‹€.
  • Shadow operation : μ΄μ „μ˜ μ»΄ν¬λ„ŒνŠΈλ₯Ό 그림자 λͺ¨λ“œλ‘œ λ™μž‘ν•˜κ²Œ ν•œ ν›„ ν•΄λ‹Ή μ»΄ν¬λ„ŒνŠΈλ₯Ό ν™œμ„± μ—­ν• λ‘œ 볡귀
  • State resynchronization :
  • Checkpoint / rollback : μ‹€νŒ¨κ°€ λ°œμƒν•˜λ©΄ λ°”λ‘œ μ΄μ „μ˜ μ•ˆμ •μ μΈ μƒνƒœλ‘œ rollback μˆ˜ν–‰

였λ₯˜λ³΅κ΅¬(

μ£Όμ–΄μ§„ μ‹œκ°„ μ•ˆμ— μ‹œμŠ€ν…œμ— λ„λ‹¬ν•œ μ΄λ²€νŠΈμ— λŒ€ν•œ 응닡을 μƒμ„±ν•œλ‹€.
응닡 μ‹œκ°„μ„ κ²°μ •ν•˜λŠ” μš”μΈμ€ λ‹€μŒκ³Ό κ°™λ‹€.

  • μžμ› μ†ŒλΉ„(resource comsumption)
  • μ°¨λ‹¨λ˜μ–΄ μžˆλŠ” μ‹œκ°„ (blocked time)
  • μžμ›κ²½μŸ
  • μžμ›κ°€μš©μ„±









SecurityλŠ” 곡격을 μ €μ§€ν•˜κ³  κ°μ§€ν•˜κ³  λ³΅κ΅¬ν•˜λŠ” 것이닀.
λŒ€ν‘œμ μœΌλ‘œ λ‹€μŒκ³Ό 같은 ν•­λͺ©μ΄ μžˆλ‹€.

  • μ‚¬μš©μžμΈμ¦
  • μ‚¬μš©μžμΈκ°€
  • λ°μ΄ν„°κΈ°λ°€μ„±μœ μ§€
  • μΌκ΄€μ„±μœ μ§€
  • λ…ΈμΆœμ œν•œ
  • μ ‘κ·Όμ œν•œ
    곡격감지(detecting attacks)
  • μΉ¨μž…νƒμ§€μ‹œμŠ€ν…œ : λ„€νŠΈμ›Œν¬ νŒ¨ν„΄ 비ꡐλ₯Ό ν†΅ν•œ 감지
  • νŒ¨ν‚· 필터링 기반 : ν”„λ‘œν† μ½œ, TCP ν”Œλž˜κ·Έ, νƒ‘μž¬λŸ‰(payload) 크기, μ£Όμ†Œ, 포트번호
  • μΉ¨μž…νƒμ§€λ₯Όμœ„ν•΄ν•„μš”ν•œκ²ƒλ“€
    • μΉ¨μž…νƒμ§€μ„Όμ„œ
    • μ΄λ²€νŠΈμ €μž₯μ„μœ„ν•œλ°μ΄ν„°λ² μ΄μŠ€
    • 뢄석및보고λ₯Όμœ„ν•œλ„κ΅¬
    • μ œμ–΄μ½˜μ†”
      곡격볡ꡬ
  • μƒνƒœνšŒλ³΅
  • κ³΅κ²©μžμ‹λ³„ : κ°μ‚¬κΈ°λ‘μœ μ§€




μƒν˜Έμš΄μ˜μ„±μ€ 2개 μ΄μƒμ˜ μ‹œμŠ€ν…œμ΄ μΈν„°νŽ˜μ΄μŠ€λ₯΄ ν†΅ν•˜μ—¬ μ˜λ―ΈμžˆλŠ” 정보λ₯Ό μ–Όλ§ˆλ‚˜ μœ μš©ν•˜κ²Œ κ³΅μœ ν•˜λŠ”μ§€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 정도이닀.
Locate

  • Discover Service : directory μ„œλΉ„μŠ€λ₯Ό ν†΅ν•˜μ—¬ μ„œλΉ„μŠ€ μœ„μΉ˜λ₯Ό 검색
    Manage Interface
  • Orchestrate : νŠΉμ • μ„œλΉ„μŠ€λ₯Ό 운영 및 쑰율
  • Tailor Interface : μΈν„°νŽ˜μ΄μŠ€μ— κΈ°λŠ₯을 μΆ”κ°€ν•˜κ±°λ‚˜ λΉΌλŠ” 것
    [좜처] μ•„ν‚€ν…μ²˜ μ „μˆ  (Tactics) |μž‘μ„±μž myitmento














μ „μˆ κ³Ό κ±΄μΆ•νŒ¨ν„΄