마틴 파울러는 [1]에서도 소개했지만, "Refactoring"으로 유명하고, 여러 저서의 저자이기도 하다. 그는 애자일리스트로 엔지니어링 실천법(engineering practices)에 집중하는 익스트림 프로그래밍(Extreme Programming, XP)의 추종자이다.
마틴 파울러의 웹사이트에서 여러가지 소개하고 있는데, 소프트웨어 아키텍처에 대해 설명하는 글[2]도 포함되어 있다. 여기서 그는 소프트웨어 아키텍처는 소프트웨어 "시스템의 중요한 내부 설계"를 의미한다고 정의 하며, 좋은 아키텍처는 시스템이 "진화"할 수 있도록 지원해야 한다고 강조한다. 이것이 마틴이 이야기하는 애자일 소프트웨어 아키텍처의 핵심이라고도 할 수 있겠다.마틴은 이 글에서 팀이 좋은 아키텍처를 만드는 방법과 아키텍처 사고를 어떻게 개발 조직에서 장려해야 하는지에 대해서도 이야기하는데 그내용도 살펴 보자.
아키텍처의 진화
마틴 파울러의 웹사이트에서 진화적 아키텍처는 요구사항의 변화를 수용하고 지속적인 피드백을 통해 시스템이 개선될 수 있도록 지원한다고이야기 한다. 그리고, 소프트웨어 아키텍처가 일회성 계획이 아닌 지속적인 과정으로 설명한다. 그리고, 이를 위해서 다음 사항에 대해서 강조한다.
- 반복적 개발과 피드백 루프: 소프트웨어 개발 과정에서 짧은 반복주기를 통해 지속적으로 통합하고 테스트하는 방식을 사용함으로써, 아키텍처를 점진적으로 발전시키는 방법을 강조한다. 이는 고도의 협업과 지속적인 개선을 가능하게 한다.
- 피트니스 펑션의 활용: 아키텍처의 상태를 모니터링하고 진화의 방향을 가이드하는 데 사용되는 '피트니스 펑션' 개념을 사용하여 아키텍처의 건강을 측정하고 관리한다.
- 데이터 관리의 중요성: 진화적 아키텍처에서는 오래 지속되는 데이터의 처리가 종종 간과되기 쉬운 문제로, 이에 대한 강조를 통해 데이터 관리와 관련된 전략을 체계적으로 다루어야 함을 강조한다.
- 마이크로서비스와 도메인 주도 설계: 큰 단일 시스템을 더 작고, 독립적으로 관리 가능한 마이크로서비스로 분해하는 과정에서, 중요한 비즈니스 기능을 식별하고 이를 기반으로 서비스를 분리하는 전략을 사용한다. 이는 시스템의 유연성을 높이고, 변경 관리를 용이하게 한다.
마틴이 늘 강조하듯이 이러한 점들은 소프트웨어 아키텍처가 단순히 기술적인 문제가 아니라, 지속적인 비즈니스 가치를 창출하고 유지하는 중요한 역할을 한다는 것을 강조한다. 진화적 아키텍처 접근 방식은 변화하는 비즈니스 요구와 기술 환경에 효과적으로 대응할 수 있도록 돕는다고 설명한다.
팀이 만드는 좋은 아키텍처
마틴은 아키텍처가 팀에서 나온다고 믿는데, 팀이 좋은 아키텍처를 만드는 방법에 대해 다음과 같이 설명한다.
- 지속적인 학습과 피드백: 팀은 반복적인 피드백 루프를 통해 아키텍처를 지속적으로 개선해야 한다.
- 협업과 소통: 개발자 그리고 여러 이해관계자 간의 긴밀한 협업이 필요하다.
- 작은 변경의 관리: 아키텍처를 점진적으로 변화시켜야 하며, 이는 작은 단위의 변경을 통해 이루어져야 한다.
- 자동화와 테스트: 지속적인 통합과 테스트 자동화를 통해 아키텍처의 품질을 유지해야 한다
개발조직이 아키텍처적 사고를 가지는 방법
팀이 아키텍처 사고를 가지기 위해서 마틴은 다음 사항들을 강조하고 있다:
- 교육과 훈련: 팀원들에게 아키텍처 원칙과 패턴을 교육한다.
- 협업 문화: 개발자 간의 적극적인 협업을 촉진하여 아키텍처 관련 논의를 장려한다.
- 피드백 루프: 정기적인 코드 리뷰와 피드백을 통해 아키텍처 품질을 유지하고 개선한다.
- 실험과 혁신: 새로운 아이디어와 접근 방식을 실험할 수 있는 환경을 조성한다.
참고 문서
[1] 로버트 마틴 vs. 마틴 파울러, https://technical-leader.tistory.com/94
[2] Martin Fowler, "Software Architecture Guide", https://martinfowler.com/architecture/
'Software Architecture' 카테고리의 다른 글
Large Language Model의 추상화 (0) | 2024.07.03 |
---|---|
객체 지향 리엔지니어링 패턴: 1장 리엔지니어링 패턴 (0) | 2024.06.19 |
애자일 개발의 규모 확대 전략과 소프트웨어 아키텍처 (0) | 2024.05.29 |
3. 레거시 소프트웨어 때문에 힘드네요. (0) | 2024.05.20 |
2. 개선할 부분이 있는데 어떻게 할지 어렵네요 (0) | 2024.05.19 |