Whiteship's Note


롤러스케이트 구현



원문 : http://martinfowler.com/bliki/RollerSkateImplementation.html

롤러스케스 구현 agile 2007년 9월 9일 반응

애자일 개발의 핵심 요소는 어떻게 하면 조그마한 기능 집합으로 시스템을 가동할 수 있을지를 도모하는 것이다. 우리는 비즈니스 가치를 목적으로 소프트웨어를 만든다. 따라서 빠르게 시스템을 가동할수록 그로 인한 비즈니스 가치를 조금이라도 더 빨리 얻을 수 있다.

나의 동료 Dave Leigh는 이런 류에 해당하는 이야기를 해줬다.(이 이야기를 예로 들기 좋아한다.) 중개 회사에서 일을 하고 있을 때였다. 그들은 시장에 들여놓고 싶어하는 새로운 종류의 상품을 가져왔다. 소프트웨어가 할 일은 웹 페이지를 제공해서 고객들이 입력을 하면 뒷단의 시스템에 필요한 거래를 생성하는 것이었다. 그러나 Dave는 그보다 더 빨리 제품을 시장에 들여놓는 방법을 생각해냈다.

•    버전 1은 정적인 웹 페이지로 제품을 설명하고 연락을 할 수 있는 전화번호를 제공한다. 몇몇 임시직을 고용하여 고객의 전화를 받고 주문 정보를 뒷단의 시스템에 입력하도록 한다.
•    버전 2는 고객이 정보를 입력할 수 있는 웹 양식이다. 하지만 이 버전에서는 데이터를 뒷단의 시스템으로 이동시키지 않는다. 그 대신 웹 양식은 팩스를 생성한다. 그들은 임시적으로 팩스기기로부터 주문을 받을 사람을 더 고용하여 팩스의 정보를 가지고 뒷단의 시스템으로 정보를 입력하도록 한다. 팩스 기기가 좀 멀리 떨어져있기 때문에 롤러스케이트라는 용어를 붙였다.
•    버전 3은 웹 양식을 읽어서 뒷단의 시스템으로 직접 연결한다.

처음 두 개의 버전은 최고로 멋진 해결책이 아닐 수도 있다. 그러나 그들은 제품을 시장에 훨씬 더 빨리 내놓을 수 있었다. 롤러스케이트를 사용한 점진적인 개발의 또 다른 예는 생각이 나질 않는다. 그러나 그 이유는 필요가 없어서라기 보다는 상상력의 부족 때문일 것이다.
top


성능 최적화가 리팩터링인가?



RefactoringBoundary.

프로그램의 성능을 향상 시키기 위해서 변경을 가했을 때, 이것을 리팩터링으로 볼 수 있나요?

성능 최적화와 리팩터링은 둘 모두 프로그램에 같은 변경을 가하기도 하며, 특정한 변경은 둘 모두에 해당하기도 하지만, 이 둘을 별개의 것으로 구분한다.

이 둘을 구분하는 이유는 서로 다른 목적을 가지고 있기 때문이다. 리팩터링을 하는 목적은 코드를 좀 더 쉽게 이해하기 위한 것이며, 성능 최적화의 목적은 좀 더 빠르게 동작하도록 하는 것이다. (예를 들어) 변수 하나를 추가하는 것이 둘 모두를 위한 것이 될 수도 있겠지만, 그 작업을 어떻게 수행하느냐에 따라 본질적으로 둘 중 하나에 해당하게 된다. 리팩터링을 할 때는 코드를 깔끔하게 정리하는 것에 집중해야 한다. 이때, 변경을 성공적으로 수행했는지에 대한 판단은 프로그램을 더 쉽게 이해하도록 변경했는가에 대한 자신의 (주관적인) 평가에 기반하게 된다. 성능 최적화를 할 때는 성능에 집중해야 한다. 프로파일러를 이용하여, 변경을 가하기 전과 후의 성능을 비교함으로써 변경 작업이 진짜로 성능 향상에 도움이 되었는지 확인해야 한다. 만약 성능이 매우 중요한 상황이라면, 차후에 (컴파일러, VM 같은)환경이 변경 됐을 때 그것의 효율성을 다시 테스트 할 수 있도록 변경 사항을 로그로 남겨두어야 한다.

결론적으로 리팩터링과 성능 최적화는 서로 비슷하기도 하고, 다수의 변경을 공유하기도 하지만, 그들의 목적이 다르기 때문에 별개의 것으로 구분한다.

원문 : IsOptimizationRefactoring

top