반디북
소프트웨어 아키텍처 101
Ch1
도은

1.1 소프트웨어 아키텍처란?

💡 아키텍처는 아키텍처 특성, 아키텍처 결정, 설계 원칙이 결합된 구조다.
  • 아키텍처 특성: 시스템이 가져야 할 중요한 성질들. 예를 들어 보안성, 성능, 확장성 등이 있다.
  • 아키텍처 결정: 시스템을 만들 때 지켜야 할 규칙들. 개발자가 무엇을 해도 되고 하면 안 되는지 정해둔 것.
  • 설계 원칙: 시스템을 만들 때 참고할 수 있는 지침들(가이드라인).

1.2 아키텍트에 대한 기대치

역할, 직책, 직무에 상관없이 소프트웨어 아키텍트에게 바라는 핵심적인 요구사항은 다음과 같다.

  • 아키텍처 결정을 내린다.
  • 아키택처를 지속적으로 분석한다.
  • 최신 트렌드를 계속 유지한다.
  • 아키텍처 결정의 컴플라이언스를 유지한다.
  • 다양한 기술과 경험에 노출된다.
  • 비즈니스 도메인 지식을 보유한다.
  • 대인 관계 기술이 뛰어나다.
  • 정치를 이해하고 처세를 잘한다. (🤔 ...?)
🌝 생각) 책에서는 아키텍트라고 표현하지만, 시스템을 메이킹하는 엔지니어의 역할이 될 것 같다.

아키텍처 결정을 내린다

  • 기술 결정을 가이드하는 사람이다.
  • 아키텍트는 기술 선택을 가이드하는 사람이지, 정해주는 사람이 아니다.
  • 아키텍트는 확장성, 성능, 가용성 등의 아키텍처 특성을 수호하기 위해 특정한 기술을 결정해야 할 때도 있는데
  • 이런 경우에는 그 기술을 지정한 행위 자체를 아키텍처 결정이라고 할 수 있다.

아키텍처를 지속적으로 분석한다

  • 끊임없이 아키텍처와 현재 기술 환경을 분석하고, 이를 개선하기 위한 해결 방안을 제시한다.
  • 이를테면, 3년 전에 정의한 아키텍처가 지금도 얼마나 현실성 있는지 평가

최신 트렌드를 계속 따라간다

  • 아키텍트는 항상 최신 기술과 업계 트렌드를 따라가야 한다.
  • 아키텍트가 결정한 것들은 대개 오래 지속되고 바꾸기도 어렵다.
  • 핵심 트렌드를 이해하고 계속 좇아갈 수 있어야 미래를 대비하고 올바른 결정을 내릴 수 있다.

아키텍처 결정의 컴플라이언스를 보장한다

  • 컴플라이언스 보장이란, 아키텍트가 정의하고 문서화하여 전달한 아키텍처 결정과 설계 원칙들을 개발팀이 제대로 준수하고 있는지 지속적으로 확인한다는 뜻이다.
  • 이곳저곳에서 아키텍처 결정을 준수하도록 하지 않으면 위반 사례는 곳곳에서 발생할 것.
  • 그 결과 아키텍처는 필요한 아키텍처 특성을 준수할 수 없게 되고 애플리케이션이나 시스템이 기대한 것처럼 동작하지 않을 것
🌝 생각) 준수하지 못하고 있는 케이스를 보는 것도 중요한 것 같다.
    왜 준수하지 못하는지 분석하고, 그 이유를 바탕으로 수정하는 결정을 내리는 것도 중요한 것 같다.

다양한 기술과 경험에 노출된다

  • 아키텍트는 다양한 기술, 프레임워크, 플랫폼, 환경에 노출되어야 한다.
🌝 생각) 아무래도 유명한 라이브러리 동향을 살필 수 밖에 없는 것 같다.
    개인적으로는 최근에 디자인 시스템 라이브러리들의 MCP 서버나 LLMs.txt 같은 것들을 찾아보고 있다.
    우선순위가 다르니 특정 분야에서 선두는 되지 못해도 뒤쳐지지 않는 것이 중요한 것 같다.

비즈니스 도메인 지식을 보유한다

  • 유능한 소프트웨어 아키텍트는 기술은 물론이고 문제 영역의 비즈니스 도메인도 잘 알고 있다.
  • 비즈니스 도메인 지식이 없으면 비즈니스의 문제점, 목표, 요구사항을 이해하기 어렵고
  • 비즈니스 요구사항을 수용할 만한 효율적인 아키텍처를 설계하기도 어렵다.

1.3 아키텍처의 교차점 그리고...

  • 소프트웨어 아키텍처의 범위는 점점 더 많은 책임과 관점을 아우르는 방향으로 확대

1.4 소프트웨어 아키텍처 법칙

💡 소프트웨어 아키텍처 제1법칙
    - 소프트웨어 아키텍처의 모든 것은 다 트레이드오프다.

💡 제1정리
    - 아키텍처가 트레이드오프 아닌 뭔가를 발견했다고 생각했다면
        그것은 아직 트레이드오프를 발견하지 못했다는 증거일 가능성이 높다.


💡 소프트웨어 아키텍처 제2법칙
    - '어떻게'보다 '왜'가 더 중요하다.
🌝 생각) 인정.!. 좀 더 미래에 도움이 될 것 같은 것을 택할 뿐..
    그래서 의사결정에 대한 내용을 잘 문서화하는 것이 중요한 것 같다.