관심사/독후감
Object-Oriented Reengineering Patterns: 객체 지향 리엔지니어링 패턴
americano_people
2024. 7. 26. 18:27
Object-Oriented Reengineering Patterns을 읽고 정리하자.
(1) 리엔지니어링 패턴
리엔지니어링 패턴이란?
기존 소프트웨어 시스템, 즉 레거시 시스템을 개선하고 현대화하기 위한 검증된 방법을 제시하는 것을 말한다.
리엔지니어링 패턴 기술문서 양식
- Name (이름)
- 동료와 의논하기 쉬운 이름의 형태로 짓자.
- Intent (의도)
- 패턴의 핵심을 간결하게 전달하는 것이 목적이다.
- 현재 상황에 적용 가능한지 여부를 판단할 수 있다.
- Problem (문제)
- 해결하고자 하는 특정 문제 상황을 제시한다.
- 독자가 자신의 상황에 패턴을 적용할 수 있는지 판단하는 데 도움이 된다.
- Solution (해결책)
- 문제에 대한 구체적인 해결 방안을 제시한다.
- 여기에는 디자인 원칙, 리팩토링 기법, 코드 예제 등이 포함된다.
- Resulting Context (결과 맥락)
- 해결책 적용 후 달라지는 상황을 설명한다.
- 패턴 적용의 이점과 잠재적인 단점을 이해하는 데에 도움이 된다.
- Known Uses (알려진 활용사례)
- 패턴이 실제 프로젝트에 적용된 사례를 제시한다.
- 독자의 이해를 돕고, 패턴의 효과를 보여준다.
- Related Pattern (관련 패턴)
- 함께 사용되거나 유사한 문제를 해결하는 데 도움이 되는 다른 패턴을 소개한다.
리버스 엔지니어링 VS 리엔지니어링
- 리버스 엔지니어링
- 기존 시스템 분석을 통한 이해에 초점을 맞춘다.
- What is this?
- 리엔지니어링 패턴
- 시스템 개선 및 재구축을 위한 설계 및 개발 지침을 제공한다.
- How to improve?
(2) 리엔지니어링패턴 방향성 수립
(1) Agree on Maxims:
시스템의 가치와 목표를 합의를 해야한다. 핵심 우선순위를 정하고, 기본 원칙을 세우자.
(2) Appoint a Navigator:
- 리엔지니어링 과정을 이끌어갈 책임자를 임명하자.
- 네비게이터를 임명해야하는 이유는 복잡한 프로젝트를 진행하는 동안 아키텍처 비전을 유지하기 위함이다.
- 시간이 지나면서 시스템 아키텍처는 새로운 요구 사항과 관련이 낮아지면서, 품질이 저하되는 경향이 있다.
- 네비게이터가 없으면 이전 시스템의 디자인과 아키텍처가 새로운 시스템에 스며들게 된다.
- 그러면서 점점 시스템을 복잡하게 만들고 유지 보수를 어렵게 만든다.
- 네비게이터는 새로운 아키텍처가 이전 시스템의 문제를 해결하고, 변화를 수용할 수 있도록 보장한다.
- 시간이 지나면 리엔지니어링 아키텍처의 시스템 디자인이 희석될 수 있다.
- 가장 가치있는 것을 먼저 처리하여, 초기 단계부터 핵심 문제에 집중해야한다.
(3) Speak to the Round Table:
- 리엔지니어링 과정에서 팀원 간의 지식 공유 및 의사소통은 매우 중요하다. 레거시 시스템에 대한 이해가 파편화되어있고, 시스템에 대한 지식을 가진 사람들의 경험에 의해 암묵적으로 내재화 되어 있기 때문이다.
- 이러한 맥락에서 원탁 회의 패턴은 팀원들이 정기적으로 만나 시스템과 프로젝트 진행 상황에 대한 정보를 공유하고, 문제 상황에 대한 공동의 이해를 구축하며, 앞으로 나아갈 방향을 조율하는 데 유용한 방식이다.
- 필요성
- 리엔지니어링팀은 시스템의 과거를 파헤쳐 숨겨진 정보를 발굴해야 한다. 이는 매우 귀중한 자산이기에, 팀 전체가 공유하고 활용해야 가치를 극대화할 수 있다.
- 진행방법
- 최소 주 1회. 원탁회의를 진행한다.
- 모든 참석자가 발언할 기회를 가져야하지만, 회의 시간이 길어지지 않도록 제한하는 것이 좋다.
- 핵심 내용을 공유해야한다.
- 자신이 수행한 작업, 새롭게 알게 된 사실, 직면한 문제, 다음 회의까지의 계획을 공유하자.
- 의사 결정 및 실행 계획 기록
- 회의록은 진행상황 추적에 유용하지만, 상세한 기록은 부담스러울 수 있다.
결정된 사항
과마감 기한이 있는 실행 계획
만 간략하게 기록하자.
- 격식 없는 분위기
- 자유로운 분위기 속에서 편하게 의견을 개진하고 질문할 수 있도록, 격식 없는 방식으로 회의를 진행하자.
- 효과
- 팀 동기화
- 팀원들은 원탁회의를 통해 서로의 작업 내용과 문제 상황을 공유하고, 프로젝트 진행 상황에 대한 공동의 이해를 형성할 수 있다.
- 지식 공유 및 확산
- 레거시 시스템의 암묵적인 지식을 팀 전체에 공유하고 확산하는 데 효과적이다.
- 의사 결정 속도 향상
- 지속적인 소통을 통해 의사 결정에 필요한 시간을 단축하고, 잠재적인 문제 상황에 대한 신속한 대응이 가능하다.
- 팀워크 향상
- 팀원 간의 상호 작용을 증진시키고, 공동의 목표를 향해 나아가는 협력적인 분위기를 조성하는 데 도움이 된다.
- 팀 동기화
(4) Most Valuable First
리엔지니어링 프로젝트는 제한된 시간과 자원을 효율적으로 활용하여 최대의 효과를 창출하는 것이 중요하다. 객에게 가장 중요한 가치를 제공하는 시스템 요소부터 리엔지니어링하여 프로젝트의 성공 가능성을 높이는 전략이다.
- "가장 가치 있는 것"의 정의 및 중요성:
- 정의:
가장 가치 있는 것
은 리엔지니어링 프로젝트의 궁극적인 목표와 고객의 비즈니스 요구사항을 충족하는 데 가장 중요한 시스템 요소를 의미한다. - 중요성: 제한된 자원으로 최대의 효과를 내기 위해서는 가장 중요한 문제부터 해결해야 합니다. "가장 가치 있는 것" 부터 리엔지니어링하면 다음과 같은 이점을 얻을 수 있다.
- 프로젝트의 성공 가능성 향상:
- 초기 단계에서 가시적인 성과를 보여줌으로써 고객과 이해 관계자들의 지지를 확보하고, 프로젝트의 성공 가능성을 높일 수 있다.
- 핵심 문제에 대한 집중:
- 덜 중요한 문제에 시간을 낭비하지 않고, 시스템의 핵심 가치를 개선하는 데 집중할 수 있다.
- 프로젝트의 성공 가능성 향상:
- 정의:
- 조기에 빠른 피드백 확보:
- 가장 중요한 부분부터 개발하고 테스트함으로써, 시스템 개선에 대한 피드백을 조기에 확보하고, 이를 반영하여 시스템을 더욱 효과적으로 발전시킬 수 있다.
- "가장 가치 있는 것" 식별하는 방법
- 고객과 소통
- 가장 변경이 잦았던 기능이 가장 가치있을 가능성이 높다.
- 많은 관심과 노력이 집중된 기능을 찾자.
- 팀 내 소통
- 고객과 소통