본문 바로가기

관심사/독후감

Object-Oriented Reengineering Patterns: 객체 지향 리엔지니어링 패턴

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

리엔지니어링 프로젝트는 제한된 시간과 자원을 효율적으로 활용하여 최대의 효과를 창출하는 것이 중요하다. 객에게 가장 중요한 가치를 제공하는 시스템 요소부터 리엔지니어링하여 프로젝트의 성공 가능성을 높이는 전략이다.

  • "가장 가치 있는 것"의 정의 및 중요성:
    • 정의: 가장 가치 있는 것은 리엔지니어링 프로젝트의 궁극적인 목표와 고객의 비즈니스 요구사항을 충족하는 데 가장 중요한 시스템 요소를 의미한다.
    • 중요성: 제한된 자원으로 최대의 효과를 내기 위해서는 가장 중요한 문제부터 해결해야 합니다. "가장 가치 있는 것" 부터 리엔지니어링하면 다음과 같은 이점을 얻을 수 있다.
      • 프로젝트의 성공 가능성 향상:
        • 초기 단계에서 가시적인 성과를 보여줌으로써 고객과 이해 관계자들의 지지를 확보하고, 프로젝트의 성공 가능성을 높일 수 있다.
      • 핵심 문제에 대한 집중:
        • 덜 중요한 문제에 시간을 낭비하지 않고, 시스템의 핵심 가치를 개선하는 데 집중할 수 있다.
  • 조기에 빠른 피드백 확보:
    • 가장 중요한 부분부터 개발하고 테스트함으로써, 시스템 개선에 대한 피드백을 조기에 확보하고, 이를 반영하여 시스템을 더욱 효과적으로 발전시킬 수 있다.
  • "가장 가치 있는 것" 식별하는 방법
    • 고객과 소통
      • 가장 변경이 잦았던 기능이 가장 가치있을 가능성이 높다.
      • 많은 관심과 노력이 집중된 기능을 찾자.
    • 팀 내 소통