Thursday, June 19, 2008

not modified but refactorized

지금 하고 있는 작업은, 뭐랄까. 물론 개발도 하고 있지만, 소스의 교정작업을 하고 있다고 할까... 그런 류의 작업을 하고 있다. 웹 에이전시의 일을 하던 전 직장과는 완전히 대조적으로, 지금의 회사에서는 신규 개발의 안건은 굉장히 드물게 발생하고, 주된 작업이 기존의 시스템에 기능을 추가하는 작업이다.

꽤 오래전(java라면 2001년 정도?)의 현재도 운영중인 소스도 만날 수 있고, 그 뒤에 점점 Spring이니, Struts니 하는 것들이 추가된 코드들도 만나게 된다.
지금은 오픈 소스로 검증된 좋은 라이브러리들이 있지만, 그당시는 존재하지 않았기 때문에, 기능을 만들어서 사용하는, 즉 상당히 legacy한 코드들도 많이 있다.
예를 들면 지금은 ThreadLocal이라는 클래스가 기본으로 JDK에 포함되어 있고, 또 Scheduled Task도 Quartz라는 좋은 라이브러리가 있는데, 이것이 없었을 당시 만들어서 사용하던 코드들도 존재한다.


이중에는 잘 만든 소스도 있고, 잘 못만든 소스도 있다.
잘 못만든 소스도 기능만으로 보면 잘 돌아간다. (정말이지 이건 놀라운 일이다.) 테스트를 많이 했기 때문이다.
교정을 본다라고 하는 의미는, 기능면으로는 문제가 없지만, 비효율적으로 작성된 곳을 효율적으로 수정하는 일, 즉 Refactoring하면서 작업을 진행하고 있다. 이러한 일로는 Java의 경우만 보면;
  • final keyword 붙이기(위의 그림에도 final이 빠져있다!)
  • 중복해서 사용되는 String variables를 static final로 빼기
  • 너무 기다란 소스를 introduce하기
  • int <-> Integer의 Casting하는 부분 지우기
  • String 연산, 또는 StringBuffer를 사용한 곳을 StringBuilder로 바꾸기(필요한 곳만)
  • Spring 적용을 위해 non-Parameter Constructor 만들기(필요한 곳만)
  • new로 instance를 생성하는 곳을 Spring Bean Definition으로 변경하기
  • 변수 이름을 적절한 것으로 바꾸기(<- 상당히 많다. DTO, DAO, Entity의 구별이 전혀 안되는 변수부터, spelling이 잘못된 곳까지)
  • TestCase만들기
그런데, 어떡할 지, 아직도 망설이는 부분이 있는데, 만든 사람의 서명이 있는 부분이다.
거의 대부분의 소스의 제일 위에 이렇게 처음 작성한 사람의 이름이 적혀져 있다.

/**
* @author li-liu
* 作成日: 2005/05/02
*
*/

현재 일하고 있는 사람도 있지만, 지금은 이 회사에 없는 사람들이 더 많다. 원래 개발위주의 회사가 아닌 탓에, 외부의 회사에서 만들어져서 들여온 시스템이 많은 탓이다.

이 서명을 바꿔야 할까
그대로 놔두자니 꽤 소스의 모습이 많이 변형된 것들도 있고(몇 scroll이나 되는 그런 function들은 다 쪼개버렸고, action에서 db query하는 것들도 다 BL, DAO로 나눠버렸기 때문에!)
바꾸어서 내 이름을 적는다면 전체적인 설계를 내가 책임져야 하는 것 같고...

그래서 이렇게 추가해 버렸다.

/**
* @author li-liu
* 作成日: 2005/05/02
* not modified but refactorized by tonghyun-kim, 2008/03/03
*/

li-liu라는 사람(중국인이다)이 보면 기분이 나빠할 수도 있기 때문에 주의해야 하지만, 화일을 닫고 다음 화일로 넘어갈 때는 "and improved "라고 하는 말도 붙이고 싶은 충동이 생기는 것은 어쩔 수가 없다.

No comments: