오늘 제가 일하는 곳의 절친한 이사님과 소프트웨어 개발자들의 미래에 대한 이야기를 잠깐 했었습니다.  저 자신도 개발자 출신이라 최근의 급격한 변화가 가져올 소프트웨어 개발자들의 미래에 대해 언제나 큰 관심을 가지고 있기에, 약간은 전문적인 글이라 많은 분들이 보시지는 않겠지만 미래의 소프트웨어 개발에 대한 글을 하나 올려볼까 합니다.

1975년 소프트웨어 개발과 관련하여 전설적인 책이 한권 출간 되었습니다.  프레데릭 브룩스(Frederick Brooks)가 쓴 "The Mythical Man-Month"가 그것인데, 소프트웨어 공학을 공부하는 사람이라면 누구나 반드시 읽어야할 명저로 꼽힙니다.   이 책에서 주장하는 것 중에 가장 중요한 논지 중의 하나가 개발 프로젝트에 사람을 더 많이 쓴다면 과연 개발이 빨라질까에 대한 문제입니다.  결론은 그렇지 않다는 것인데, 이유는 사람들이 더 많이 관여될수록 커뮤니케이션에 비선형적인 오버헤드가 발생하기 때문이라는 것이죠 ...


소프트웨어 개발방법론의 진화

브룩스가 이 책을 쓰기 5년전에 터폴 모델(Waterfall Model)이라는 유명한 소프트웨어 개발방법론이 소개되었습니다.  이 방법은 기존의 공학적 기술개발에 이용되던 개발방법을 소프트웨어에 적용한 것으로, 일단 요구사항을 수집하고 (gathering requirements), 디자인을 한 뒤에 이를 구현하고 테스트를 하는 모델입니다.  이러한 절차가 순차적으로 진행됩니다.

사실 워터폴 모델은 소프트웨어 개발에 많이 이용되었지만, 지나치게 융통성이 없다는 치명적인 단점때문에 최근에는 실패한 모델로 간주됩니다.  소프트웨어 개발이라는 것이 기타 다른 공학적 개발과는 달리 요구사항이 정확히 정의되기가 쉽지 않고, 시간이 지남에 따라 조금씩 요구사항이 변화하는 요소가 크기에 한 번에 요구사항을 수집해서 디자인으로 들어가는 모델이 잘 맞지 않았던 것입니다.  가장 큰 이유 중의 하나가 요구사항을 내놓은 사람들은 소프트웨어가 쉽게 변경이 가능한 것으로 생각하는 경우가 많습니다.  그렇지만 실상은 일반적인 하드웨어나 마찬가지로 소프트웨어 역시 디자인과 구조가 있고, 이를 변경한다는 것이 그리 쉬운 일이 아니지요 ...

그렇지만 사회가 빠르게 발전하다보니 이러한 변경가능성은 점점 더 증가합니다.  그렇기에 변화를 제대로 담보해내지 못하는 소프트웨어 개발방법론은 퇴출될 수 밖에 없는 운명이 되었습니다.

이러한 문제를 해결하기 위해 1990년대 들어 다양한 새로운 개발방법론들이 소개가 되었는데, 이들을 통칭해서 보통 agile 개발방법론이라고 부릅니다.  세부적인 내용에 약간의 차이는 있지만, 전체적인 철학은 비슷합니다.  무엇보다 요구사항이 변화하는 것을 기본적으로 가정합니다.  그래서, 이를 어떻게 빨리 반영할 것인가를 중시합니다.  이를 위해서는 가능한 간단한 방법으로 쉽게 개발이 가능해야 합니다. 

방법론적인 측면에서 이러한 요구를 충족시키기 위한 테크닉으로 유명한 것들이 리팩토링(refactoring)테스팅(developer testing)입니다.  리팩토링의 경우 마틴 파울러(Martin Fowler)가 집필한 동명의 책으로 더욱 유명한데, 기본적인 아이디어는 기존 코드의 디자인을 동작하는 방식을 변경하지 않고 진보시키는 것입니다.  리팩토링이 가능하다면 변화에 대한 적응이 쉬워집니다.  마치 인테리어 디자이너가 소품을 이리저리 옮길 수 있는 것과 마찬가지로, 개발자가 코드 묶음을 이리저리 적용할 수 있게 하는 것이니까 말입니다.  마찬가지로 변경된 내용이 잘 동작하는지 알기 위한 방법으로 유닛 테스트라는 것이 많이 도입되었습니다.  각각의 테스트는 시스템의 단일 컴포넌트를 검증하는데 집중되어 있습니다. 

이러한 현대적인 소프트웨어 개발방법론은 과거의 개발방벌론에 비해 많은 문제들을 훨씬 쉽게 해결할 수 있도록 도와주었고, 비용절감이나 프로젝트 기간 단축 등의 가시적인 성과를 많이 거두었습니다. 


라이브러리랑 오픈소스 뒤지면 다 나온다 !

소프트웨어 개발을 하는데 있어 개발자들이 가장 공을 들이는 부분이 자신이 직접 디자인을 하고 코딩을 하는 것도 있겠지만, 상당한 시간을 적당한 라이브러리를 찾는데 씁니다.  사실 자바(Java)가 이렇게까지 성공을 한 것에는 언어 자체가 뛰어난 부분을 가지고 있다는 것을 부인할 수는 없지만, 개인적으로는 뛰어난 표준 라이브러리가 지속적으로 제공되었기 때문이라고 생각합니다.  웹 개발에 PHP가 엄청나게 쓰이는 것도 잘 만들어진 웹 관련 라이브러리가 많기 때문이지요 ...

이제 상당수의 프로젝트는 추가적인 개발의 내용이 그리 많지가 않습니다.  왜냐하면 찾으면 거의 나옵니다.  이러한 현상은 오픈소스 프로젝트들이 많아지면서 더욱 일반화 되었습니다.  표준 라이브러리에 없어도, 검색을 통해 오픈소스 프로젝트를 뒤지면 원하는 기능을 구현한 것들이 대부분 나옵니다.  사실 개발자들이 시간 많이 들여서 할 일들이 계속 없어지고 있습니다.


몇 명의 개발자들이 간단히 개발하고 서비스하는 세상

그렇다면 앞으로는 어떻게 될까요? 

이제는 소수 개발자들이 기존에 이용가능한 훌륭한 라이브러리나 서비스, 그리고 오픈소스 프로젝트를 연결해서 과거에 보기에는 무지하게 복잡해 보였던 것들을 쉽게 처리할 수 있는 세상이 오고 있습니다.  복잡하고, 길고, 훌륭해 보이는 긴 코드를 작성하는 개발자들에 대해 존경심이나 경외심을 가지기 보다는 어리석게 보게 될 것입니다. 

앞으로 개발자들의 삶은 어떻게 될까요?  아마도, 비즈니스와 서비스 자체를 잘 이해하고, 커뮤니케이션 능력이 뛰어난 사람이 성공할 가능성이 높을 것입니다.  짧은 시간에 이런 것들을 이해하면 쉽게 서비스를 개발할 수 있으므로, 이런 사람들은 많은 프로젝트를 쉽게 해결할 것이고 엄청나게 돈을 벌겠지요 ...  아마도 소프트웨어 개발자의 빈익빈 부익부 현상이 가중될 것입니다.  더 이상 개발에 많은 사람들이 필요하지 않게 되기 때문에, 중간 수준의 중산층(?) 개발자들이 살아남기가 어려워질것 같습니다.  상당수는 소위 말하는 파워유저들과 경쟁을 하지 않을까요?



WRITTEN BY
하이컨셉
미래는 하이컨셉, 하이터치의 세계라고 합니다. 너무 메마르고 딱딱한 이야기보다는 글로벌 시대에 어울리는 세계 각국의 이야기, 그리고 의학과 과학을 포함한 미래에 대한 이야기의 세계로 여러분을 초대합니다.

트랙백  2 ,