Skip to content

Latest commit

 

History

History
129 lines (78 loc) · 9.38 KB

File metadata and controls

129 lines (78 loc) · 9.38 KB

1장 서론

🔎 Survey and Question - 훑어보고 질문하기

소제목 훑어보기

  1. 소프트웨어 아키텍처란?
  2. 아키텍트에 대한 기대치
    1. 아키텍처 결정을 내린다.
    2. 아키텍처를 지속적으로 분석한다.
    3. 최신 트렌드를 계속 따라간다.
    4. 아키텍처 결정의 컴플라이언스를 보장한다.
    5. 다양한 기술과 경험에 노출된다.
    6. 비즈니스 도메인 지식을 보유한다.
    7. 대인 관계 기술이 뛰어나다.
    8. 정치를 이해하고 처세를 잘한다.
  3. 아키텍처의 교차점 그리고...
    1. 엔지니어링 프랙티스
    2. 운영/데브옵스
    3. 프로세스
    4. 데이터
  4. 소프트웨어 아키텍처 법칙

사전 질문 / 내용에 대한 예언

소프트웨어 아키텍처란?

소프트웨어 아키텍처란 서비스를 안정적으로 제공하기 위해 구축된 거시적인 시스템을 의미할 것으로 생각된다.

다만, 단순히 구동되고 있는 네트워크 상의 컴포넌트들과 그들의 관계를 의미하는 것만이 아니라, 실제로 이러한 시스템을 구축하고 유지보수하고 있는 개인들과 각종 환경적 요인들까지 포괄적으로 의미할 것으로 보인다. 앞단에서는 동일한 서비스로 보여도 개인/팀/기업의 판단에 따라 뒷단에서는 다양한 양상이 존재할 것으로 예상된다.

아키텍처에 대한 기대치

아키텍처를 구성하기 위해 아키텍트에게 요구되는 역량과 기대되는 바에 대한 이야기로 보인다.

아키텍트는 주어진 요구사항을 충족하는 아키텍처를 구성하기 위한 결정을 내린 이후에, 실제로 구축된 아키텍처를 다양한 척도로 분석해야 한다.

또한 아키텍트는 자신이 구축하는 서비스 자체에 대한 도메인 지식을 함유하되, 그와 동시에 자신들이 살고 있는 시대의 소프트웨어 생태계의 최신 트렌드를 참고할 수 있어야 한다. 다양한 기술과 경험을 기반으로 다양한 각도에서 사고할 수 있는 역량을 함양해야 할 것이다.

마지막으로 아키텍트는 개인이 아니라 집단의 일원으로서 활동하며, 거시적인 의사결정을 내리는 것이 핵심 업무인 만큼 뛰어난 커뮤니케이션 스킬, 대인 관계 능력, 처세 능력이 요구된다.

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

소프트웨어 아키텍처와 간접적으로 관련이 있는 요인들에 대해 설명할 것으로 보인다.

아키텍트가 속한 조직의 엔지니어링 관행, 업무 프로세스, 서비스 운영 방식 및 인프라/데브옵스 등에 대해 이야기할 것으로 보인다. 또한 아키텍처 구성을 위해 필요한 의사결정을 위해 어떠한 데이터가 필요한지에 대해서도 언급할 것으로 보인다.

소프트웨어 아키텍처 법칙

소프트웨어 아키텍처 및 아키텍트가 가급적 준수해야 하는 법칙들에 대해 설명할 것으로 생각된다.


📝 Read - 읽어보고 답변하기

소프트웨어 아키텍처란?

예상과는 달리 개인,팀과 같은 환경적인 요인보다는 소프트웨어 아키텍처를 구성하는 세부 요인들에 대한 설명이 주를 이루었다.

아키텍처에 대한 기대치

저자들은 아키텍트를 한 문장으로 정의하는 것이 어렵기 때문에 유능한 아키텍트에게 기대되는 바에 대해 단순 나열하였다.

아키텍트는 단순히 결정을 내리는 것이 아니라 기술 선택을 '가이드'해야 한다는 내용은 예상하지 못한 내용이었다.

컴플라이언스 보장이란 개발팀이 아키텍처 결정과 설계 원칙을 개발팀이 제대로 준수하고 있는지 지속적으로 확인하는 것이라고 함.

기술 폭의 중요성에 관한 내용은 예상에 부합했다.

유능한 아키텍트가 되기 위해 리더십 및 협상 능력의 중요성을 강조한 것이 인상적이었다.

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

소프트웨어 아키텍처와 간접적으로 관련이 있는 요인들에 대한 설명일 것으로 예상했다.

실제로는 소프트웨어 아키텍처의 범위가 확장됨에 따라 그 범위에 추가적으로 포함되게 된 요인들에 대한 이야기에 가까웠다.

용어들에 대한 소개가 많았는데 정리하자면 다음과 같다. 엔지니어링 프랙티스와 소프트웨어 개발 프로세스도 별개이며, 소프트웨어 개발 프로세스는 소프트웨어 아키텍처에 영향을 미치지 않지만 서로 공생관계인 아키텍처 스타일과 엔지니어링 프랙티스 조합이 존재는 하다고 하였다.

프로세스(소프트웨어 구축 방법)는 구조(소프트웨어 아키텍처)에 별다른 영향을 미치지 않음.

또한 데이터의 경우 아키텍처 구축에 있어 외부 스토리지에 대한 고려를 간과해서는 안된다는 점에 초점을 맞췄다.

아키텍트가 속한 조직의 엔지니어링 관행, 업무 프로세스, 서비스 운영 방식 및 인프라/데브옵스 등에 대해 이야기할 것으로 보인다. 또한 아키텍처 구성을 위해 필요한 의사결정을 위해 어떠한 데이터가 필요한지에 대해서도 언급할 것으로 보인다.

소프트웨어 아키텍처 법칙

아키텍처 및 아키텍트에 관한 가이드라인에 대한 이야기일 것으로 생각했으나 예상과는 다소 달랐다.

소프트웨어 아키텍처와 아키텍처 구성 자체의 필연적인 성질에 대한 이야기에 가까웠다.


💡 Recite - 노트하기

소프트웨어 아키텍트라는 직업에 대한 정의는 명확하지 않으며, 아키텍트의 역할 및 업무의 범위는 계속 확대되는 중이다.

소프트웨어 생태계와 소프트웨어 아키텍처는 본질적으로 동적이므로 특정 시점에서 어떠한 문제를 해결하였더라도 여전히 문제를 제대로 해결하고 있는지 꾸준히 재검증이 필요하다. 아키텍트가 내린 결정은 특정 시점의 문맥/맥락(context)으로서만 이해 가능하다.

소프트웨어 아키텍처란 아키텍처 특성, 아키텍처 결정, 설계 원칙이 결합된 구조다.

  • 아키텍처 특성(architecture characteristics)이란 시스템이 지원해야 하는 수많은 성질들을 의미한다. 확장성, 가용성, 탄력성 등이 그 예이다.
  • 아키텍처 결정(architecture decision)이란 개발 과정에서 반드시 지켜야 하는 규칙들을 의미하며, 시스템의 제약조건을 형성한다.
  • 설계 원칙(design principle)이란 개발 과정에서 기본적으로 권장되는 방법에 관한 가이드라인을 뜻한다.
  • 시스템의 구조(structure)란 마이크로서비스와 같이 구축된 시스템에서 사용하고 있는 아키텍처 스타일의 종류를 의미한다.

유능한 아키텍트에게는 8가지가 기대된다.

  1. 아키텍트는 회사 전체의 기술 결정을 가이드하는 사람이지, 일방적으로 결정해주는 사람이 아니다.
  2. 아키텍트는 애플리케이션을 지속적으로 적절하게 유지하는 능력을 지녀야 한다. 아키텍트는 아키텍처와 현재 기술 환경을 지속적으로 분석하고, 이를 개선하기 위한 해결방안을 제시한다.
  3. 아키텍트는 미래에 대비하고 올바른 결정을 내리기 위해 언제나 최신 기술과 업계 트렌드를 따라가야 한다.
  4. 아키텍트는 아키텍처 결정과 설계 원칙이 팀에서 제대로 준수되고 있는지 지속적으로 확인해야 한다.
  5. 아키텍트는 기술의 깊이보다는 폭에 집중하여야 한다. 다양한 기술을 거리낌없이 쓸 수 있고, 다양한 시스템과 서비스를 연동하는 방법을 알아야 한다. 다양한 경험에 노출되어 comfort zone을 넓혀나가는 것이 주요하다.
  6. 비즈니스 도메인 지식을 보유함으로써 문제를 적절하게 해결할 뿐만 아니라, 다양한 이해관계자들과 원활하게 소통하여 신뢰를 획득할 수 있어야 한다.
  7. 아키텍트로서 성공하기 위해서는 리더십 스킬 가장 중요하다. 아키텍트는 개발팀을 리드하여 아키텍처를 구현하는 사람이기 때문이다.
  8. 아키텍트는 협상 기술이 중요하다. 아키텍트가 내리는 수많은 결정은 사람들의 반발에 부딪히기 마련이기 때문이다.

아키텍처의 업무 및 책임의 범위는 갈수록 증가하고 있다.

  • 아키텍트의 설계가 구현 과정 및 소프트웨어 생태계에서 장기적으로 살아남기 위해서는 진화하는 아키텍처가 필요하다.
  • 소프트웨어 개발 프로세스는 실질적으로 구조(소프트웨어 아키텍처)에 영향을 미치지 않는다. 애자일하게 개발할 경우 상황에 따라 아키텍처가 지속적으로 변할 수 있음.

소프트웨어 아키텍처의 모든 것은 전부 트레이드오프다.

어떻게 문제를 해결했는지보다는 왜 그렇게 문제를 해결했는지가 더 중요하다.

😎 Review - 요약하기

아키텍트는 지속적으로 변화하는 소프트웨어 생태계 속에서 아키텍처를 구성하고 개선할 수 있어야 한다. 여기에 더해 뛰어난 리더십과 협상능력을 통해 실질적으로 팀을 성공적으로 리드 및 가이드할 수 있어야 유능한 아키텍트이다.