검색어 기반시스템/프로젝트관리에 대한 글을 날짜를 기준으로 정렬하여 표시합니다. 관련순 정렬 모든 글 표시
검색어 기반시스템/프로젝트관리에 대한 글을 날짜를 기준으로 정렬하여 표시합니다. 관련순 정렬 모든 글 표시

2009년 5월 18일 월요일

이 바닥을 못 벗어난다.

우리나라 소프트웨어 개발자들은 자신이 처음부터 일해온 바닥을 못 벗어나는 경향이 있습니다.

처음에 게임회사에서 일을 시작한 개발자는 계속 게임회사에서 일하고, 금융회사, 보안회사, 장비회사, SI회사 등 쉽게 그 바닥을 못 벗어나곤 합니다. 

이러다 보니 개발자가 이직 시 선택의 폭이 좁아지고, 분야가 조금만 바뀌어도 자신의 Value가 확 줄어드는 현상이 일어나곤 합니다.이런 일이 비일비재하게 일어나는 것을 보면 개발자의 전문성이란 어디에 있는 것인지 궁금하지 않을 수 없습니다.

금융에 대한 전문지식을 많이 가지고 있고, 게임에 대한 많은 지식을 가지고 있는 것을 개발자의 전문성이라고 볼 수도 있습니다. 또 그러한 Domain 지식이 없으면 개발을 할 수 없다고 단정적으로 얘기를 하는 개발자도 많습니다.

소프트웨어 엔지니어가 소프트웨어를 개발하기 위해서는 크게 2가지의 지식이 필요합니다.

그 중 하나는 이미 앞에서 언급한 Domain 지식입니다.

그리고 또 하나는 Software Engineering 지식입니다.

Domain 지식은 개발 분야가 바뀌면 거의 쓸모가 없는 산업 지식이고, Software Engineering 지식은 개발 분야가 바뀌어도 항상 사용되는 지식들입니다.

Domain 지식은 너무 광범위해서 나열을 할 수는 없습니다.

하지만 Software Engineering 지식은 무엇인지 설명할 수 있습니다.

요구분석, 설계, 구현, 테스트, 소스코드 관리, 버그 관리, 프로세스 등 소프트웨어를 개발하기 위한 일련의 지식들입니다.

물론 소프트웨어를 개발하기 위해서는 Domain 지식과 Software Engineering 지식 모두가 필요합니다. 하지만 흔히 접하는 현상을 보면 개발자들이 점점 Domain 지식이 치중하는 경향이 있습니다. Software Engineering에 대한 전문성을 떨어진 상태에서 Domain 지식만 점점 늘어가니 당장 일은 잘하고 있는 것 같아도, 동료나 후배들과 협업이 잘 안되고, 프로젝트 규모가 조금만 커져도 문제가 있고, 이직 시에는 심각한 가치 하락이 발생합니다.

그럼 어떻게 해야 할까요? 소프트웨어를 개발하면서 자연스럽게 얻게 되는 Domain 지식에만 의존해서는 안됩니다. Software Engineering 지식을 꾸준히 발전시켜서 소프트웨어 전문가가 될 수 있도록 해야 합니다. Software Engineering에 능통한 소프트웨어 전문가가 된다면, 어느 소프트웨어 회사를 가더라도, 여전히 전문가로서 높은 가치를 가지고 개발을 할 수 있습니다. 새로운 분야로 이직을 하더라도 Domain 지식은 일을 하는 과정에서 차츰 배워 나갈 수 있습니다. 

그리고 Domain 지식에 능통한 개발자에게만 의존해서 개발이 진행되는 소프트웨어 회사는 매우 큰 리스크를 안고 있는 겁니다. 그런 개발자가 한 명만 퇴사를 해도 회사는 큰 위험에 봉착합니다.  

결국, 회사를 위해서도, 개발자들을 위해서도 개발 개발자들의 머리 속에 들어 있는 Domain지식에 의존하기보다는 적절한 개발 프로세스 및 시스템을 기반으로 개발을 해야 합니다.

2009년 1월 28일 수요일

이클립스 프로젝트 필수 유틸리티 개정판 : Subversion, Ant, JUnit, Trac



자바 개발자를 위한 책을 소개합니다.

---------------------------------------------------------------------------

Trac을 비롯한 필수 유틸리티로 프로젝트 환경에 단비를 내리는 책 

이 책은 Trac(위키와 이슈 트래커), Subersion, Mylyn, Subclipse 플러그인, CVS, Ant, JUnit을 사용해서 자바 프로젝트 환경을 개선하는 책이다. 이 책의 내용은 유틸리티의 설치와 사용법 그리고 이클립스에서 유틸리티를 통합해서 사용하는 방법에 중심을 두고 있다. 

마지막 장에서 다루는 프로젝트는 책에서 다루는 모든 유틸리티와 플러그인을 사용해서 실제 개발 프로젝트를 보인다. 어떻게 개발자의 프로젝트 환경을 변화시키는지 직접 확인할 수 있다. 

이클립스 필수 단축키 수록
독자 Q&A 포럼: http://eclipseforum.net/ 

프로젝트 유틸리티란 무엇이고 이 책에서는 무엇을 다루었는가? 

프로젝트 유틸리티(Project Utility)란 말 그대로 프로젝트에 도움을 주는 유틸리티란 얘기다. 그리고 이클립스에 기반을 둔다는 것은 프로젝트 유틸리티가 이클립스에 통합되어 활용이 가능하다는 것을 의미한다. 

다음은 이 책에서 다루는 용도에 따른 프로젝트 유틸리티의 분류다.

  • 버전 관리 시스템: 소스나 문서 등의 파일이나 폴더를 공유하고 이력을 관리하는 시스템
    => CVS, Subversion, Subclipse 플러그인
  • 빌드 자동화 시스템: 빌드, 배포 등의 반복 작업을 자동화하는 시스템
    => Ant
  • 테스팅 시스템: 단위 테스트를 자동화, 정규화하여 코드의 안정성을 확보하는 시스템과 프레임워크
    => JUnit
  • 이슈 관리 시스템: 버그나 이슈 등을 한 곳에 모아 관리하는 시스템
    => Trac용 Issue Tracker, Mylyn
  • 위키: 온라인 협업 문서화 시스템
    => Trac용 Wiki
그리고 이 책의 초판과 달라진 점은 다음과 같다.
  1. CVS, Ant, JUnit의 새로운 버전의 설치와 사용법 그리고 이클립스에서의 사용법
  2. Subversion과 Subclipse 플러그인의 설치와 사용법 그리고 이클립스에서의 사용법
  3. Trac용 Wiki의 설치와 사용법, Wiki 문법 그리고 이클립스에서의 사용법
  4. Trac용 Issue Tracker의 사용법 그리고 이클립스에서의 사용법
  5. Mylyn과 Mylyn Trac connector의 설치와 사용법
  6. TOW를 이용해서 간단히 Trac과 플러그인을 설치 및 설정하는 방법
    (TOW는 오픈 소스 프로젝트로 Trac의 사용 환경을 간단히 구축할 수 있는 패키지다. 현재 저자가 이 프로젝트에 참여하고 있다.)
  7. 이클립스 필수 단축키(잘라서 붙여놓고 볼 수 있다)
이러한 이 책의 내용들이 "유틸리티를 왜 사용하고 또 어떻게 사용할까?"를 궁금해하는 독자들에게 답을 줄 것이다

----

이 책에 대한 A/S는 http://eclipseforum.net/ 에서 한다고 합니다.

예약구매 페이지는 한빛미디어에서 합니다.

2008년 12월 8일 월요일

우리 개발자는 뭐든 뚝딱 잘 만들어요.

소프트웨어를 개발하기 위해서는 기본적으로 갖춰야 할 인프라스트럭쳐시스템(Infrastructure System, 기반시스템)에 대해서 이미 본 블로그에 글을 올린 적이 있습니다.

그런데 여러 회사를 만나보니 이러한 시스템 중에서 일부를 직접 만들어서 사용하려는 경우를 종종 접하게 됩니다.

이런 회사를 "Tool company"라고 부릅니다.

자신들의 주력 제품이 아니고 개발하기 위해서 필요한 툴들을 만들어서 사용하려는 회사를 말합니다.
물론 워낙 특수한 형태의 툴로서 세상에 존재하지 않거나 구할 수가 없는 예외적인 경우도 있습니다.
하지만 개발 프로세스에 일반적으로 필요한 시스템들은 직접 만들어서 사용한다는 것은 큰 문제입니다.
특히, 버그관리시스템이나 프로젝트관리시스템을 만들어서 사용하거나, 만들려고 시도하는 회사가 많습니다.
그런 회사들은 이렇게 말합니다.

  • 우리회사는 다른 회사와 다르다. 우리는 임베디드 소프트웨어를 개발한다. 우리는 금융회사다. 우리는 게임회사다. 우리는 포탈이다. 이유도 많습니다.
  • 상용제품의 우리회사만의 요구사항을 만족할 수 없다.
  • 우리가 만들면 사용제품보다 더 잘 만들 수 있다. 
  • 우리 입맛에 딱 맞게 만들 수 있다. 그리고 필요할 때 언제든지 수정해서 사용할 수 있다.

특히, 개발자들이 이런 주장을 하는 경우가 흔합니다. 개발자들은 이런 것을 만드는 일을 만만하게 보는 경우가 많습니다. 경험이 적은 개발자들은 단순히 코딩해서 동작하도록 구현하는 것만 생각하는 경우가 흔합니다. 그 뒤에서 수십배의 일과 문제가 기다리고 있다는 것은 잘 모릅니다.
당장 원하는 기능의 툴을 만드는 것은 어려운 것이 아닙니다.
일단 툴을 만들어서 사용하기 시작하면 개미지옥에 빠져든 개미처럼 점점 빠져들며 헤어나오기 어려워집니다.
이렇게 만들어진 툴도 하나의 소프트웨어로서 유지보수가 필요해집니다. 기존의 버그도 잡아야겠고, 사용하다가 불편하면 계속 수정사항을 요구합니다. 
만들 때는 간단해 보였는데, 쓰면 쓸수록 손 볼일이 많아집니다.
본연의 개발업무에 집중해야 할 개발팀이 내부 툴 유지보수 하느라 시간을 낭비하고 쓸수록 기능도 만족스럽지 않다는 것을 알게 됩니다.

일단 우리회사는 다른 회사와 다르다고 생각하는 것은 좁은 시야와 경험의 부족에서 오는 착각입니다. 그리고 상용제품이 우리회사의 요구사항을 만족할 수 없는 것이 있다면 회사가 바뀌는 것이 좋습니다. 이 경우 회사의 프로세스가 잘못되어 있을 확률이 99%이상입니다. 사소하게 보아 넘기는 기능 하나하나에 깊은 의미가 있다고 생각하고, 좋은 툴이라면 거기에 맞추겠다는 생각으로 회사의 프로세스나 조직, 문화 등을 먼저 다시 생각해보는 것이 좋겠습니다.  

좋은 툴을 도입하는 것은 단순히 비용을 절약하는 것을 떠나서, 회사의 개발 프로세스까지 선진화된 형태로 바꿀 수 있는 힘이 있습니다. 반대로 말하면 이러한 툴이 없이 제대로 된 개발 프로세스로 개발을 하는 것이 불가능하다는 의미이기도 합니다.

이러한 것을 만들어서 쓰려는 "Tool Company"가 되어서는 안되고 좋은 툴을 찾아서 전사적으로 사용하면서 선진적인 개발프로세스와 문화를 받아들이는 자세가 필요합니다.

2008년 12월 4일 목요일

우리나라에는 전지전능한 슈퍼 개발자가 있다.

여러 소프트웨어 회사를 컨설팅하다보면 아주 많은 개발자들을 만나게 됩니다. 
그 중에는 전지전능한 슈퍼 개발자를 만나게 됩니다.

코딩, 설계, 분석, 테스트, 기획, 고객 전화응대, 고객 지원, 프로젝트 관리, 일반 관리, 아키텍처 등등 엄청나게 많은 일을 하는 개발자들을 보게 됩니다.
이들은 대부분 팀장 쯤 됩니다.

어떻게 생각하시나요? 
바람직해 보입니까?
"나도 그런 전지전능한 개발자야 돼야지"라는 생각이 드십니까?
혹시 지금 이렇게 모든 분야의 일을 다 하고 계시나요?

이것은 One man company 얘기가 아닙니다. 
개발자가 100명이 넘는 회사도 이러한 경우를 여럿 봤습니다.
대부분은 회사가 성장과정에서 적당한 때에 조직을 변화시키지 못하고 그냥 달려온 경우입니다.
이런 경우 전지전능한 개발자가 대부분의 기술과 이슈를 꽤 뚫고 있어서 조직이 그럭저럭 굴러갑니다. (개발자들은 몰라도 사장님은 고민 많으실 겁니다.)
모든 길은 로마로 통하듯 모든 기술적인 이슈도 이 전지전능한 개발자를 통해야 해결됩니다.
이런 개발자가 나가면 회사는 망할 것만 같습니다.

이러한 상황이 정상일까요?

어떤 사람도 서로 완전히 다른 Skill set들을 필요로 하는 일들을 동시에 다 잘 수행해 낸다는 것은 불가능합니다. 아주 작은 회사라면 그렇게 해야지요. 다른 대안이 없으니까요.

이렇게 모든 일을 다하는 전지전능한 개발자는 그 모든 업무를 다 잘 못하고 있다고 봐야 합니다. 그건 애초에 불가능합니다.
이들은 예전에는 뛰어난 개발자였습니다. 하지만, 개발 이외의 일들을 하나씩 떠 맡으면서 각 분야의 일들의 전문성이 점점 떨어지게 됩니다. 그리고 각 일의 Switching cost가 만만치가 않습니다. 이일하다 저일하다하면 그냥 시간이 지나가버리지요. 톰 디마르코는 몰입에는 15분의 시간이 필요하다고 했습니다. 전화한번만 받아도 15분은 그냥 추가로 까먹는거죠.

심지어는 테스트, 고객 전화응대, 고객 지원까지 한다는 것은 100원의 돈을 받으면서 20원짜리 일을 하는 것과 같습니다. 그런 일은 싸게 고용할 수 있는 사람을 시켜야지요. 그리고 기획 같은 일은 전문성이 부족하여 제대로 수행하지도 못합니다. 

결국 이 개발자는 다른 소프트웨어 회사에 가면 별로 가치 없는 개발자가 되고 맙니다. 분야가 달라지면 Domain Knowledge에 의한 경쟁력을 잃고, 개발 실력도 경력에 걸맞지 않게 떨어지고 어느 것 하나 특출난게 없게 됩니다. 관리자로 가야 할까요? 그래서 회사에 꼭 붙어 있으려고 하고, 정치를 하면서 세력을 키우고, 회사의 개혁이나 변화를 반대하고, 골치덩어리 영웅이 되고 맙니다.

회사는 이들에 의존도가 커져서 리스크를 감당할 수 없는 수준에 이르게 됩니다.
이들이 등돌리면 회사는 휘청합니다. 

이것이 개발자 탓일까요? 아니면 회사 탓일까요? 
네, 회사 탓입니다. 회사는 개발자가 실력을 발휘할 수 있도록 여건을 조성해주고 훈련도 시켜줘야죠.
그런데 맨땅에 개발자가 북치고 장구치고 다 하다 보니까, 어쩌다보니 그렇게 된 것이지요.

그럼 어떻게 해야 할까요?

조직이 작을 때부터 나중에 커질 때를 대비해야 합니다.
조직이 커지면 언제든지 분리하기 쉬운 업무부터 띄어낼 수 있도록 말입니다.
이렇게 하려면 갖춰야 할 것이 3가지 있습니다.

이는 "프로세스"와 "기반시스템" 그리고 "문서"입니다.

이 3가지가 있어야 개발 조직이 전문적으로 움직일 수 있습니다.
단 제대로 갖춰야지요. (제대로의 의미는 너무 많이 설명해야 하니 앞으로 계속 올리는 글에서 설명하도록 하죠, 그리고 사실 문서는 프로세스에 포함된 것입니다.)

혼자 일을 하더라도 "스펙"을 작성하고 "설계문서"도 작성하고 "Test Case"도 만들어 놓습니다. 물론 남에게 일을 시키는 것보다는 간소화 할 수 있습니다.
인도에 외주를 줄만큼 자세히 작성하는 것은 낭비죠.
그리고 적절한 개발 프로세스를 만들어서 조직이 커질 때마다 그에 알맞게 계속 발전시켜나가야 합니다.
그리고 "소스코드관리시스템"과 "버그(이슈)관리시스템"은 무조건 제대로 갖추고 있어야 합니다.
이 모든 것은 혼자 소프트웨어 회사를 한다고 해도 갖추고 있어야 합니다.

프로세스, 문서 얘기가 나오니까 오히려 개발이 늦어질 것 같은가요?
혼자 개발을 해도 이것들은 꼭 필요합니다. 개발이 더 빨라지고, 제품의 품질도 올라가죠.

왜?

지금 이해가 가지 않는 분이라면, 여기서 납득을 시켜드릴 수는 없습니다. 
제 책(소프트웨어개발의 모든 것)을 읽어보시거나 저를 찾아오시면 친절하게 설명드리겠습니다.
각설하고..

그렇게 준비가 되고 나면 회사 커지면 직무를 하나씩 전문화시켜야 합니다.
우선 "테스트팀"을 만드십시오. 회사가 작다면 이들이 Technical Support(고객지원)도 병행할 수 있을 겁니다. 
물론 테스트 직무도 전문화를 시키십시오. Random Test가 아닌 제대로 된 절차에 의한 테스트를 할 수 있도록 훈련시켜야 합니다. 그 방법은 제 책을 포함해서 시중에 좋은 책들이 얼마든지 있습니다.

그리고 개발자가 많아지면 관리자를 나누고, 기획, 프로젝트 관리자, 빌드/릴리즈 역할을 나눠 나갈 수 있을 겁니다. 

아직 "프로세스", "기반시스템", "문서", 이런 것들을 갖추고 있지 않은 회사라면은 조직을 어떻게 바꿔도 결국 그 전지전능개발자에게 커뮤니케이션이 다 몰리고 리스크는 여전할 것입니다.

이렇게 회사를 바꾸려면 개발자나 회사나 모두 "성장통"을 감내해야 합니다.
개발자는 현재 자신이 하는 일에만 가치가 있다고 생각하면 안됩니다. 좀더 큰일을 하기 위해서 과감하게 현재의 일을 버리고 자신이 가장 잘하는 일에 집중해서 더욱 가치를 높여야 합니다.
회사는 이 과정에서 임시적을 생산성이 떨어집니다. 이 기간이 짧게는 5,6개월에서 길게는 1년이 갈 수도 있습니다. 부작용을 최소화 하기 위해서 점진적인 변화를 할 수도 있고, 전문가를 영입하여 한번에 바꾸는 방법도 있습니다.

회사 안에 있으면 경영자나 개발자나 이러한 상황을 잘 느끼지 못하는 경우가 많습니다.
개구리를 냄비 안의 찬물에 넣고 서서히 데우면 뜨거워서 견지디 못하는 순간이 될 때까지 잘 느끼지 못하는 것과 같은 거죠.
그냥 익숙해지는 겁니다.
이런 경우 외부의 전문가가 회사를 분석하는 것이 효과적일 때가 많습니다.
궁금하신 내용이 있으면 언제든지 E-mail([email protected])으로 연락주세요. 궁금증을 시원하게 풀어드리지요. 

장문의 글을 읽어주셔서 감사합니다.

2008년 11월 5일 수요일

기반시스템(Infrastructure System)을 사용하고 계신가요?

기반시스템(Infrastructure System) 용어를 들어보신 적이 있나요?

기반시스템(Infrastructure system) 소프트웨어를 개발하는데 꼭 필요한 기초 환경입니다.
여러분들도 쓰고 계시는 것이 있을 겁니다소스코드를 CVS 저장하고 버그를 관리하기 위해서Bugzilla Mantis 사용하고 있다면 바로 그러한것들이 기반시스템(Infrastructure System)입니다.
이러한 것들은 매우 다양한 분야에서 소프트웨어 개발을 돕고 있습니다.

기반시스템 없이는 생산적으로 소프트웨어 개발할 없습니다기반시스템은 소스코드를 안전하게 보관해주고프로젝트 구성원 간의 의사소통을 원활하게 해주는 등 프로젝트의 모든 활동이 잘 진행되도록 돕습니다개발자들을 편하게 해주고불필요하게 노력을 낭비하지 않게 해주며개발에 집중할 있게 해줍니다성공적인 프로젝트는 거의  적절한 기반시스템 하에서 개발 된 것이라고 보면 됩니다.

기반시스템에는 좋은 오픈 소스(Open Source) 솔루션이 아주 많습니다세계적인 소프트웨어 회사들도 기반시스템으로 오픈 소스 솔루션을 애용하고 있습니다특별한 이유가 있는 경우가 아니라면 비싼유료 제품을 사서  필요가 없습니다.

그러면 수많은 기반시스템 중에서 무엇은  필요하고 어떤 것은 당장 필요하지 않을까요?
이는 회사에 따라서 상황이 달라질  있습니다.

아래 그림은 각 기반시스템의 난이도와 효과를 설명한 것이다오른쪽으로 갈수록 도입이 쉽고도입 쉽게 적응할  있는 시스템이다또 위로 갈수록 도입 시 효과가 크고 프로젝트에 많은 영향을 미치는 것들이다아직 아무런 시스템을 도입하고 있지 않는 회사라면 오른 쪽 윗부분의 영역에 있는 시스템부터 차례대로 도입하는 것이 좋을 것이다.

아직 소스코드관리시스템과 버그관리시스템을 사용하고 있지 않다면 가능하면 빨리 도입해야 합니다  기반시스템은 어떤 소프트웨어 회사이건 필수적으로 필요하기 때문입니다


2008년 10월 29일 수요일

책소개 - 소프트웨어개발의모든것(All of Software Project)



이번에 집필한 책입니다.

소프트웨어 개발의 전반에 대한 기초에 대해서 다루고 있습니다.
코딩을 어떻게 하느냐하는 내용이 아니고 소프트웨어 회사라면 당연히 갖춰야 할 기반시스템, 조직, 프로세스 등에 대해서 현실적이고 체계적으로 정리를 했습니다.

책을 쓰면서 가장 어려운 점은 가능하면 많은 소프트웨어 개발자들이 볼 수 있도록 난이도를 조정하는 것이었습니다. 어차피 책이라는 것이 모든 사람의 눈에 맞출 수는 없으니까요.

그리고 너무 자세한 내용을 기술하지 않은 이유는 그러기에는 수천페이지도 모자를 수 있고, Detail한 내용은 또 많은 경로를 통해서 얻을 수도 있고 일부는 스스로 공부를 하거나 훈련을 해야하는 것이라고 생각했습니다.

그래서 소프트웨어 개발 및 프로젝트를 전체적으로 볼 수 있는 책으로 구성을 했고, 추후 쓰게될 책이나 블로그를 통해서 점점 디테일에 접근을 해나가려고 합니다.

책을 읽으신 독자분이나 그렇지 않은 분이나 블로그를 통해서 소프트웨어 개발에 관한 어떤 얘기도 의견을 주고 받고 싶습니다.

책 소개를 한번 보시죠. 





 책소개
대한민국 소프트웨어 분야 권위자인 김익환 대표와 전규현 수석이 제시하는 소프트웨어 개발 필드매뉴얼! 
실리콘밸리의 GE, SUN Microsystems와 안철수연구소의 CTO 등을 거치며 소프트웨어 개발 분야의 야전사령관으로 활동해 온 김익환 대표와, ‘한글과컴퓨터’ ‘안철수연구소’ 등을 거치며 현장을 리드해 온 전규현 수석이 제시하는 ‘소프트웨어 개발 실행 지침서’이다. 

많은 소프트웨어 개발자들이 프로젝트 진행에 대해 제대로 배울 기회를 갖지 못한 채, 과거부터 해오던 방법을 그대로 답습하고 있다. 그런 상태로 매일 프로젝트에 투입되다 보니, 야근에 야근을 거듭해도 프로젝트가 언제 끝날지 모르는 상황에 빠져들곤 한다. 이 책은 그간의 이 같은 문제를 해결하고 소프트웨어를 성공적으로 개발하기 위해 반드시 알아야 할 ‘조직’ ‘프로세스’ ‘문화’ ‘기반시스템’ ‘방법론’에 대한 현장 실무 위주의 전략을 제시한다.
      
 
 
 저자 및 역자 소개
저자 : 김익환
소프트웨어 컨설팅 회사인 ABC Tech의 대표이자 카이스트 소프트웨어 전문가 과정 겸직교수. 서울대학교 공과대학을 졸업하였고 미국 산호세 캘리포니아 주립대학에서 전산학 학사, 스탠포드 대학에서 전산학 석사를 취득하였다. 미국 실리콘밸리의 GE, Sun Microsystems등에서 약 16년간 소프트웨어 실무경력을 쌓고 세계 150여 개 기업에 인터넷 통합 메시지 솔루션을 제공하는 ‘스탠포드 소프트웨어’를 설립하여 제품을 개발하고 회사를 운영하였다. 2000년 귀국 후에는 소프트웨어 분야 컨설턴트로 활동하며 ‘안철수연구소’의 부사장 및 최고기술경영자(CTO)로 근무하였다. 저서로 『대한민국에는 소프트웨어가 없다』, 역서로 『세상을 바꾼 32개의 통찰』이 있다.

저자 : 전규현 (Ray)
ABC Tech의 수석 컨설턴트이자 프로젝트관리전문가(PMP, Project Management Professional)이다. 연세대학교 공과대학을 졸업하고 ‘한글과컴퓨터’를 시작으로 ‘안철수연구소’에 이르기까지 약 15년간 수많은 소프트웨어를 개발하였고 Programming Engineer, Project Leader, Project Manager, CTO 등 소프트웨어 개발 분야의 다양한 역할을 두루 경험했다. 현재는 소프트웨어 개발 컨설턴트로서 소프트웨어 회사의 개발에 관한 문제들을 해결하는 일을 하고 있다.

 
 
 목차/책속으로
• 목차보기
 
Part1 소프트웨어 개발의 기초 
1. 기반시스템 
기반시스템이 잘 구축된 사례┃기반시스템이 잘 구축되지 않은 사례┃소스코드관리시스템┃빌드시스템┃버그관리시스템┃테스트관리시스템과 테스트 자동화툴┃프로젝트관리시스템┃요구사항관리시스템 
2. 조직 
프로젝트 구성원의 역할 ┃조직체계 
3. 개발방법론과 프로세스 
소프트웨어 개발방법론┃소프트웨어 개발 프로세스 
4. 사람 
인재 확보┃문서 작성 기술 
5. 문화 
동료 리뷰┃연구┃공유┃품질 우선┃규칙 준수┃장기적인 관점으로 보기 

Part2 소프트웨어 개발을 성공으로 이끄는 법 
6. 생애주기 모델을 제대로 선택하라 
폭포수 모델┃반복 모델┃XP 모델┃사시미 모델┃발전적 프로토타이핑 모델 
7. 개발 단계별 계획을 수립하라 
개발의 각 단계┃단계별 인원 투입┃단계별 일정 분배 
8. 프로젝트 활동을 확실하게 관리하라 
프로젝트 성공 기준 마련┃개발 계획┃일정관리┃요구사항 분석┃설계┃구현┃품질관리┃리스크관리┃인력관리┃의사소통관리┃원가관리
• 책속으로
 
이 책에 담긴 내용은 소프트웨어 개발 프로젝트에 직접적으로 참여하는 사람들뿐만 아니라 소프트웨어 회사의 경영자, 프로젝트관리자, 개발자, 상위관리자 등 모든 사람들이 알아야 할 내용 모두를 포함한다. 여기서 말하는 소프트웨어 회사는 소프트웨어 제품만을 개발하는 회사를 지칭하지 않는다. 팩키지 소프트웨어를 만드는 회사나 SI회사는 물론, 장비에 탑재되는 임베디드 소프트웨어를 만드는 휴대전화 개발사나 복사기 제조사, 방대한 전산 시스템을 가지고 있는 은행이나 증권사 등 소프트웨어를 개발하고 유지보수하는 모든 회사가 여기에 해당한다. 
--- p.10 

소프트웨어 프로젝트는 그저 열심히 수행한다고 해서 성공할 수 있는 것이 아니다. 회사와 직원들 모두에게 기초가 갖춰져 있지 않은 상태로 진행하는 프로젝트는 모래성 위에 쌓아 올린 탑과 같다. 아무리 훌륭한 프로젝트관리자라 하더라도 소스코드관리시스템이나 버그관리시스템도 없고, 테스터도 없고, 개발자들이 서로 리뷰를 해본 적도 없다면, 이들을 이끌고 프로젝트를 성공시키기란 기적이나 다름없다. 반면 기초를 잘 갖추고 진행하는 프로젝트는 튼튼한 탑과 같이 견고하다. 
--- p.24 

시중에는 수많은 소프트웨어 개발방법론이 넘쳐난다. 지금까지 알려진 방법론만 100가지가 넘는다. 인터넷에서 이에 대한 설명만 보고 Template을 복사해 와서 회사에 적용한다는 것은 기적에 가깝다. Template과 Sample만 보면 방법론을 적용하여 선진 개발 방식을 따라 할 수 있을 것 같지만, 착각이다. 제대로 된 방법론을 잘못 오해하여 적용하거나 특정 부분에 집착하여 전체를 놓치는 경우가 많다. 
한 가족이 살기 위한 집을 짓는데 고층 빌딩을 만드는 방법을 적용하면 안 되고, 그렇다고 개집을 만들 때처럼 대충 지어서도 안 된다. 개집을 만들 때는 대충 만들어도 되고, 안되면 다시 만들면 된다. 그러나 빌딩을 만들 때는 한 치의 오차도 없이 정확하고 정교한 방법을 사용해야 한다. 
--- p.118 

SRS는 이 책 전체에서 소개하는 많은 문서 중에서 가장 중요하다. 프로젝트를 성공으로 이끄는데 가장 중요한 핵심이기 때문이다. 만약 소프트웨어 프로젝트에서 문서를 딱 하나밖에 만들 시간이 없다고 하면 SRS를 만드는 것이 좋다. 
--- p.220 

개발자들은 가장 먼저 
● SRS를 작성해야 한다고 생각하고, 
● SRS를 작성하면서 모든 관련자와 철저히 리뷰를 하고, 
● 프로젝트관리자는 개발자들과 함께 1, 2일 단위의 상세 일정을 작성하고, 
● 테스트팀은 SRS를 보고 테스트 Suite를 만들기 시작하고, 
● 개발 리더들은 화이트보드나 종이를 펼쳐놓고 아키텍처에 대해 토론을 하며, 
● 구현 시 모든 소스코드는 당연히 리뷰를 하고, 
● 개발자는 매일 스스로 일정을 업데이트 하고, 
● 소스코드 작성은 일일빌드가 깨지지 않으면서 이루어지며, 
● 소스코드관리시스템과 버그관리시스템을 효과적으로 사용하며, 
● 알파, 베타 단계 별로 모든 프로젝트 관련자들이 유기적으로 움직이며, 
● 일정에 맞춰 완성도 있는 품질의 제품을 출시한다. 
위와 같은 활동들이 당연하다고 생각되고 몸에 배어야 한다. 이러한 것들을 규칙만으로 통제를 해서는 달성하기 어렵고 한꺼번에 모두 다 습득하기도 어렵다. 하나씩 익혀서 몸에 배었을 때 소프트웨어 프로젝트를 성공하는 원리가 보이기 시작하고 좋은 제품을 만들 수 있을 것이다. 
--- p.318
 
• 출판사 리뷰
 
경영자에서 개발자까지, 
소프트웨어 회사에서 반드시 알아야 할 핵심 노하우 

이 책 『소프트웨어 개발의 모든 것』은 소프트웨어를 성공적으로 개발하기 위해 반드시 필요한 기초에 대해 설명하고, 그러한 기초를 확실하게 활용하고 실행하기 위한 저자들의 노하우를 제시한다. 여기서 제시하는 내용은 회사가 크냐 작으냐에 따라 달라지지 않으며, 어떠한 형태의 제품을 만드느냐에 따라서도 달라지지 않는다. 
1부 ‘소프트웨어 개발의 기초’에서는 소프트웨어 회사에서 기본적으로 갖춰야 할 5가지, 즉 기반시스템, 조직, 프로세스, 기술, 문화에 대해 설명한다. 이 5가지는 우리나라 현실에 맞지 않는 딴 나라 얘기가 아니며, 실제 경험을 통해 가능하고 유용한 것들만 모아 놓은 것이다. 당장 이 5가지를 한꺼번에 갖출 수는 없겠지만 회사의 실정에 맞게 차근차근 모두 다 도입해야 하는 것도 분명하다. 
2부 ‘소프트웨어 개발을 성공으로 이끄는 법’에서는 개발방법론의 선택과 도입방법 및 절차를 설명하고, 소프트웨어 프로젝트의 기둥이라 할 수 있는 SRS(Software Requirements Specification) 작성의 중요성을 설명한다. 더불어 소프트웨어 개발의 각 단계별 계획 수립 방법과, 프로젝트 전반을 확실하게 관리하기 위한 저자들의 노하우를 제시한다. 
추천평
이 책은 단순한 소프트웨어 공학 책이 아니다. 저자의 25년 소프트웨어 개발 경험과 이론이 응축된 결과물이다. 이 책에는 미국의 실리콘밸리, 한국의 대표적 소프트웨어 회사 안철수연구소의 개발 프로세스와 개발 인프라를 만들고 발전시킨 경험이 담겨 있다. 소프트웨어 개발자나 프로젝트 관리자는 물론 개발 부서장, 기획자 등 소프트웨어 개발에 관련된 모든 사람들이 반드시 읽어봐야 할 책이다. - 강은성 (SK커뮤니케이션즈 커뮤니티개발실장)

소프트웨어를 구현하고 개발을 관리하면서, ‘어떻게 하면 여러 명이 이 일을 함께 잘 할 수 있을까?’ 하고 늘 고민해왔다. 결론은 ‘기본에 충실’이다. 이 책은 실용적인 도구, 프로세스, 문화에 대한 설명을 통해 어떻게 소프트웨어 개발의 기본에 충실할 수 있는 지를 알려준다. - 조재희 (휴맥스 혁신실 부장)

소프트웨어 개발을 직업으로 준비 중인 모든 신입 개발자들에게 가장 추천할 만한 입문서다. 이 책을 읽으면서 떠오른 한 가지 생각은, ‘우리나라 소프트웨어 개발자 중 과연 몇 명이나 이 책에 수록된 지식들을 숙지하고 있을까?’ 하는 의문이다. 국내 모든 소프트웨어 개발 종사자들이 꼭 한번 확인해보아야 할 책이라고 생각한다. - 민상윤 (KAIST 겸임교수, 솔루션링크 대표)


독자서평: