****한 8 개월간의 프로젝트가 끝이 났습니다. 단순히 소프트웨어를 개발하는 작업은 8개월 정도 소요됐지만 하드웨어를설계하고 OS를 올리고 하는 등의 응용 소프트웨어를 올리기 위한 작업은 더 시간이 소요됐습니다. 8개월 동안 생각해 보면 여러가지 문제가 있겠지만, 프로젝트 일정을늘어지게했던 원인 중에서 **프로그램 구조가 미치는 영향**에 대해서 생각해보았습니다. ****
보이지 않는 문제를 품고 있는 프로그램 구조.
*
*
**********
****
****프로그램 구조는 처음 프로그램을 설계할 때 생각하고 결정하게됩니다. 제가 이번 프로그램을 개발하면서 가장 주안점을 주었던 부분은 폼(Form) 상의 UI의 변화를 어떻게 쉽게 관리할 수 있을까 하는부분이었습니다. 그래서 처음에는 하나의 폼에서 몇개의 패널(Panel)을두고 그 안에서 컨트롤(Control)을 보여주고 숨기고 하면서 뷰를 전환하는 방식을 생각했습니다. 어차피 데이터 부분은 따로 관리하기 때문에 크게 생각할 필요가 없었고, 작은 4.3인치의 화면에서 여러 화면을 보여줘야 하기 때문에 화면전환 방식을 위와 같이 설계한 것이었습니다.
그런데 실제 코딩에 들어가서는 많은 문제가 생겼습니다. 그 중에 가장큰 문제는 다음 메뉴를 클릭해서 다른 화면으로 넘어가기 위해서는 더 많은 패널(Panel)이 필요했고, 한 패널내에서 동적으로 컨트롤을 추가하고 삭제하다보니 화면전환에서 많은 문제가 생겼습니다.
사실 프로그램을 개발하다 보면, 코딩을 실제로 하는 개발자는 프로그램구조가 잘못되었다는 사실을 어느 순간 본능적으로 느낄때가 있습니다. 개발해야 하는 부분은 많이 남았는데점점 더 복잡해지는 것을 느낄때 보통 그러는데, 저 역시 개발하면서 계속 화면전환에 대한 문제가 걸리다보니 본능적으로 ‘이건 아니다.’ 혹은 ‘이러다 큰일나겠다.’ 이런 생각이 들었습니다.
개발 완료 1주일전.
**
사실상 다음주가 시연임에도 불구하고 대부분의 개발이 끝난 상태에서도 계속 화면전환 부분이 문제가 생겼습니다. 그래서 1주일전에 과감히 프로그램 상의 핵심적인 부분인 화면전환구조를 바꾸기로 마음을 먹었습니다. 사실 다들 알다시피 프로그래머는 어느정도 개발이 진행된 상태에서는프로그램 구조를 바꾸기를 싫어합니다. 왜냐하면 자칫 잘못하면 일정을 못 맞출수도 있고 더 큰 버그를양산할 수 있기 때문입니다.
**
기존의 하나의 폼 안에서 여러개의 패널을 두던 구조보다는 모든 페이지 마다의UserControl 을 만들어서 각각 호출하는 방법이 좀더 화면 전환 시의 UI 컨트롤관리가 쉬울 것이라는 생각이 들었습니다. 물론 단점도 있었습니다.User Control 로 모든 페이지를 만든다는 것 자체도 부담이긴 하지만, 각각의 UserControl 클래스가 생기기 때문에 클래스간의 데이터 전달부분을 다 만들어야 하는 부담도 있었습니다. 결과적으로 보면 후자의 구조가 애초부터 제가 수행한 프로젝트에는 더 적합했던 프로그램 구조였습니다. 화면전환상의 더이상의 문제점은 생기지 않았이며, 데이터 전달 역시문제가 생기지 않았습니다.
개발자,당신은 이미 알고 있다.
**
프로그램 구조는 사실상 코딩을 하기 전에 정하게 됩니다. 상의를 해서정하는 경우도 있고 선임 개발자분들이 정하는 경우도 있는데, 코딩 단계에 들어가서 바뀔수 있는 경우가종종 있는것 같습니다. 개발자가 본능적으로 무엇인가 이상하다는 생각이 들때가 있습니다. 제 생각엔 그때가 프로그램 구조를 바꾸거나 고쳐야 하는 최적의 타이밍이라고 생각합니다. 제가 수행한 프로젝트는 프로그램의 크기가 크지 않아서 다행이었지만, 사실개발완료 1 주일 전에 프로그램 구조를 바꾸는 것은 왠만한 용자가 아니면 하기 쉽지 않습니다. 때문에 개발자 본인이 프로그램 구조가 문제가 있다고 느낄때 바로바로 요청을 해서 어디가 어떻게 문제가 될것이라고말하는 용기가 필요합니다. 프로그램의 복잡성이 높아질수록, 프로그램구조를 바꿀수 있는 기회는 더 없어집니다.
**
프로그램 구조가 프로젝트에 미치는 영향은 이루 말할수 없습니다. 프로젝트라는말의 정의 처럼 일정이 가장 중요하기 때문에 잘못된 프로그램 구조를 계속 가져가면 분명히 버그가 생기고 그로 인해서 프로젝트가 늘어지게 됩니다. 당연히 잔업과 야근이 생기게 되겠구요. 그래서 프로그램 구조를 처음만들때도 제대로 만들어야 하지만, 개발할 때에도 반드시 문제가 있다고 하면 구조변경을 고려해 봐야 합니다. 초기 단계에서 구조변경은 가능하고 그 여파가 크지 않지만, 말기단계에서 구조변경은 상당히 위험하고 프로젝트 일정에도 크게 영향을 미칠수 있습니다.
프로그래머들은 때때로 자신의 권한 영역 밖의 일에 대해서 언급하는 것을 극도로 싫어합니다. 그건 당신이 할일이니까, 그건 당신이 개발해야할 모듈이니까, 나는 내 부분만 제대로 작동하면 돼 라는 생각을 가질 수도 있습니다. 어떻게보면 맞는 말이지만, 프로그램 구조에 대한 부분은 그런 마인드를 조금은 버리고 옆에 있는 동료와 한번소통(Communication)의 장을 열어 보심이 어떨가 싶네요.