XL.jpeg

<aside> ✏️ 본 페이지는 마이클 킬링의 ⌜개발자에서 아키텍트로⌟ 를 읽고 기억하고 싶은 점을 필자 마음대로 정리한 글입니다.

</aside>

1부

1. 아키텍트의 역할

소프트웨어 아키텍트는 프로그래밍 외에도 여러 책임을 집니다. 아키텍트는 엔지니어링 관점에서 문제를 정의합니다. 소프트웨어 시스템을 구현 가능한 작은 조각으로 나누는 동시에 전체 시스템이 일관성 있게 동작하도록 큰 그림을 그립니다. 아키텍트는 품질에 영향을 주는 다양한 품질 속성 사이에서 균형을 잡아야 하며 어쩔 수 없이 늘어나는 기술 부채도 관리합니다.

1. 문제 정의

프로덕트 매니저, 프로젝트 매니저 등 모든 이해관계자와 협업하면서 비즈니스 목표와 요구 사항을 만든다. 기능 정의뿐만 아니라 품질 속성을 또 하나의 요구사항으로 만들어야 한다. 이 품질 속성대로 정해진 방향으로만 갈 수 있도록 제약하며 기능을 꾸준히 확인한다.

2. 시스템 분리, 책임 위임

시스템을 여러 조각으로 나누어 조각마다 품질 속성과 요구사항을 달성하도록 전략을 짠다.

작게 나누면 테스트, 원인 파악과 설계도 쉬워진다.물론 작게 나눈 조각들을 모아서 잘 동작하는지 확인하는 작업도 필요하다.

3. 트레이드오프

시스템은 기술 뿐만 아니라 사람, 프로세스, 비즈니스 요구사항 등 비기술적인 의미또한 포함한다.

아키텍트는 수많은 설계 결정 사항들 중에서 트레이드오프해야한다.

4. 기술 부채 관리

<aside> 💡 기술 부채 시스템의 현재 설계와 소프트웨어가 지속적으로 가치를 창출하기 위해 가져야만 하는 바람직한 설계 사이의 간극

</aside>

아키텍트는 기술 부채를 시각화하고 이해관계자 모두에게 어떻게 관리해야 하는지 도와준다.

5. 팀원의 설계역량 키우기

설계 기술과 구조를 팀원에게 공유해야 한다.

문서를 만들고, 함께 설계하고 건설적인 비평을 나누어야 한다.

2. 아키텍쳐

1. 필수 구조 정의

구조를 만든다는 것은 요소들끼리 관계를 형성하는 일이다. 구조에는 모듈, 컴포넌트/커넥터, 자원 할당의 세가지 타입이 있으며 동일한 타입 안에서 요소와 관계를 결합한다.