2016년 1월 24일 일요일

분석 #1 소프트웨어의 분석의 본질은 무엇인가?


이 포스트는 필자가 이제 시작하려는 실전 소프트웨어 "분석" 시리즈의 첫 번째 포스트이다. 이전에 포스트한 SWEBOK의 분석단계에 대한 번역을 하면서 소개를 했지만 이 시리즈에서는 현실에 더 가깝고 실리콘밸리에서의 경험을 바탕으로 실무에서 도움이 될 자세한 내용을 적으려고 한다.

소프트웨어는 인류역사상 가장 복잡한 지식산업이다. 지식산업의 특징은 한 사람이 여러 사람을 모은 것 보다도 뛰어날 수 있다. 페이스북의 주커버그가 개발자 1명이 100명보다 더 뛰어날 수 있다고 했다. 바둑이나 체스와 같은 지식 활동에서도 상급자 한 명이 하급자 100명이 합한 것을 이길 수 있다. 이런 지적차이가 없이 백명을 합해서 한명을 이길 수 있다면 노동산업일 것이다. 그럼 소프트웨어의 어떤 부분이 이렇게 큰 차이를 만들어 낼까를 항상 염두에 두면서 지적인 생각을 많이 해야 하는 단계가 언제일까 하는 답을 스스로 찾기 바란다.
   
소프트웨어를 개발할 때 분석, 설계, 구현 단계가 있다는 것은 누구나 다 들어 보았을 것이다.. 그런데 현실에서 제대로 행하기는 쉽지 않다. 분석이라는 단어가 너무 추상적이기 때문이다. 분석을 항상 하면서도 자기는 분석을 안한다고 생각하는 실리콘밸리의 개발자도 있고 분석이 무엇인지도 모르면서 자기는 분석 잘한다고 하는 국내의  개발자도 있다. 마치 야구선수에게 만류인력법칙을 아냐고 물어보면 모른다고 할 것이다. 하지만 공이 떨어지는 궤도를 가장 잘 파악해서 잡아내는 것을 보면 만류인력을 몸으로 잘 실행하고 있는 것이다. 실행면에서 는 물리학교수보다 더 잘한다. 증기기관차를 발명한 사람들도 열역학이 생기기도 전에 발명했다. 그 만큼 분석이라는 단어는 극히 추상적인데다 이론과 현실의 착각에서 부터 모든 사람들이 다르게 해석하고 평가할 수 있는 위험한 단어이기도 하다. 각자 생각하는 분석의 정확한 정의가 다를 수 밖에 없지만 여기서는 실리콘밸리에서 행하는 통상적인 분석을 가정하고 진행한다.

분석을 제대로 하지 않고도 지금까지 소프트웨어 개발자로서 개발하는 데 지장이 없다면 분석이 꼭 필요한 것인가? 이는 내가 인생을 살아가는데 있어서 학교는 꼭 가야하는가? 라는 질문과 비슷하다. 학교를 가지 않아도 생존하는 데는 문제가 없었고 가끔 크게 성공하기도 한다. 결국은 필수냐 아니냐의 문제가 아니고 선택의 문제라고 할 수도 있다. 그런데 경쟁을 해야 한다면 얘기가 다르다. 취미생활이라면 적당히 해도 되고 잘하든 안하든 문제가 없지만 다른 사람과 경쟁을 해서 이겨야 한다면 최선의 방법을 택해야 한다. 필요하다 아니다의 문제가 아니고 경쟁에서는 최선의 방법이 필수가 된다.

소프트웨어를 개발한다는 것은 지적산업이라는 점에서 자동차를 만드는 것이나 그림을 그리는 것과 같다.하는데 그렇다면 개발하는데 지식산업다운 모습을 가져야 한다. 그림을 그리기 전에 스케치를 해야 한다거나 자동차를 만들기 전에 설계를 해야 한다거나 심지어는 옷을 만들기 위해서도 디자인을 해야 한다면 아무도 이의를 제기하지 않는다. 너무 당연하기 때문이다. 그런데 소프트웨어에서 분석을 해야 한다고 하면 안하기 위해 핑계를 대며 노력하는 것이 국내의 현실이다. 억지로 시켜야 할 수 없이 대충 한다. 물론 제대로 잘 하고 있는 가는 나중에 얘기할 또 다른 큰 이슈이기 때문에 여기서는 넘어간다. TV를 보다보면 동물농장이라는 프로에서 가끔 위험에 처한 동물을 구조하려는 경우가 있다. 그런데 동물들이 자신을 위한 것인데도 순순히 구조를 받아들이는 것이 아니라 구조를 당하지 않으려고 갖은 발악을 한다. 이 경우와 비슷하다.

폭포수방법론이니 애자일 방법론이니등 방법론과 분석의 필요성을 연관지어서 생각하는 것은 원칙과 방법론을 혼동해서이다. 폭포수나 애자일 벙법론이 좋다 나쁘다 할 수 있는 것은 아니다. 잘못 해석하면 해악을 끼칠 수가 있다.  애자일 경우에는 분석을 하지 않아도 된다는 착각을 심어주기 딱 좋은 사상을 가지고 있다. 마크 트웨인의 말처럼 건강에 관한 책은 오타로 인해 죽을 수도 있다는 말처럼 착각을 불러 일으켜 해를 끼치기 좋게 되어 있다. 분석의 본질을 이해하기 위해서는 당분간 방법론에 대한 생각을 하지 않는 것이 좋다. "Unteach" 라고 생각을 비워보자. 어렵지만 방법론을 배웠더라도 잠시 안 배운 것처럼 머리에서 지우도록 하자. 구글에서도 분석작업을 하지 않고 설계부터 하는 경우도 많다. 많다기 보다는 겉으로 그렇게 보인다. 필자도 이전에 그랬었다. 그래서 겉으로 보기에 분석작업을 하지 않는다고 생각한다면  착각이다. 하기는 하되 경우에 따라 방법이 다른 것이다. 지금까지 필자가 평생동안 수 백번의 프로젝트를 해 왔지만 똑같은 정형화돤 기법으로 분석을 하는 경우는 없었다. 즉 어떤 샘플이나 템플릿을 보고 작성할 수 는 없다는 것이다. 원칙을 이해해야 하기 때문에 추상적이고 혼란이 생긴다.

분석의 본질은 무엇인가를 실행하기 전에 전체적으로 생각해 보는 것이다. 방법은 그 다음 문제이다. 학교숙제와 같이 한번만 하고 끝날 프로젝트는 굳이 분석에 많은 투자를 하지 않아도 규모가 작기 때문에 큰 피해가 없다. 구동만 되면 된다는 사상이다. 하지만 피해는 크지 않지만 비효율적인 것은 사실이다. 필자는 학교숙제를 비롯헤 간단한 문제를 풀 때로 분석을 하고 설계를 한다. 형식은 때에 따라 다르다. 하지만 아무리 간단해도 분석을 해야 더 빠르다는 것을 몸으로 알고 있다. 국내 개발은 대부분 한탕주의 식으로 진행한다. 미래에 대한 고려를 할 필요가 없는 "이번만 끝내면 된다"는 환경에서는 당연할 수도 있다. 이 세상 모든 일에는 좋은 점과 나쁜 점이 있다. 외국 속담에 어떤 남자가 마음에 드는 예쁜 여자와 결혼을 하고 싶은데 그 여자와 결혼을 하려면 추한 쌍동이 자매를 같이 데려가야 한다는 조건이 있다. 국내에서 문화적으로 성행하게 된 한탕주의 개발이 좋은 점은 다음 차세대 프로젝트를 금방 다시 할 수 있기 때문이다. 개발자들의 수요가 더 많이 필요하고 돈이 잘 도니 경제가 잘 돌아간다고 미화할 수 있다. 그러나 그런 모순적인 방법은 곧 냉혹하고 무서운 현실에 부딪치게 된다. 바로 국제 경쟁력이다.

국내 경쟁력은 별 문제가 없다. 잘못한다고 해도 회사가 개발비용이 조금 많이 들고 품질이 나빠서 고객이 떨어져 나갈 것이다. 하지만 경쟁자도 그렇다면 큰 문제가 아니다. 도토리 키재기이기 때문이다. 그렇지만 치명적인 한계가 온다. 그 한계는 바로 글로벌 경쟁애서 뒤떨어지는 것이다. 그러다 보면 소프트웨어 산업이 황폐화 되고 장기적으로 개발자나 회사나 국가나 모두 피해를 입는다. 그 이유도 모르니 문제를 엉뚱한 데서 찾고 많은 노력을 기울여도 한계가 있다. 지적산업의 특성을 모르기 때문이다.

구글 같은 글로벌 기업에 가 보면 젊은 개발자나 5,60대의 나이 많은 개발자가 똑같이 많다. 감원을 시킬때는 Seniority 라는 방식으로 젊은 사람부터 내보내는 것이 통상적이다. 젊은 사람들은 다시 구할 수 있지만 경력자는 다시 구하기가 어렵고 회사에서 리더가 없어지는 것이기 때문에 타격이 크다. 경력이 많을 수록 전체를 보는 통찰력이 있고 오랜 경험으로 시행착오를 줄인다. 젊은 병졸이 힘이 좋을 지는 모르지만 전쟁을 수행할 수는 없다.
백발이 성성할 때 까지 오래 일하고 연봉이 높아지려면 코딩을 줄이고 전체를 보는 지적인 분석과 설계를 해야 한다. 코딩하는 인력은 나이가 들면 젊은 개발자들에게 떨어질 수 밖에 없다. 믿기 싫더라도 인간의 신체가 그렇게 되어 있다. 젊었을 때 잘 할 수 있는 것이 있고 나이가 들어 잘 할 수 있는 것이 있다. 젊은 사람의 기술만으로는 그 가치가 오래 가지 않는다. 지적으로 성숙해 지고 전체를 볼 수 있는 역량이 바로 백발 개발자의 가치이다.


분석을 "요구사항 분석"등과 같은 단편적인 용어로 표현하면 100% 잘못된 상상을 하게 된다. 분석은 절대로 남을 따라하거나 어떤 것을 흉내 내서 되는 것이 아니다. 대충해서도 안된다. 바둑을 대충 두면서 이기기를 바란다면 망상이다. 목적에 따라 적절한 수준으로 해야 중요한 가치가 있다. "적절히" "적당히"는 다르다. "적절히"는 현실을 고려한 유연성을 의미하지만 "적당히"는 소프트웨어에서 만병의 근원이다. "행동하기 전에 충분히 생각하고 적어서 정확히 표현해라." 하는 것이 지금의 추상적인 수준에서 분석의 본질에 대해 말할 수 있는 표현이다

여기서는 지식산업의 핵심과 소프트웨어에서의 어떤 부분이 지식산업의 핵심일까 하는 것을 생각해 보는 기회로 하자. 앞으로의 포스트에서는 여러 관점에서 구체적으로 들어가 보자



댓글 없음: