달력

05

« 2012/05 »

  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
요즘 차량을 소유하신 분들은 대부분 차량용 네비게이션을 가지고 계십니다. 길을 잘 모르는 곳을 가거나 아는 길이라 하더라도 교통량 등을 분석해서 가까운 길 또는 요금이 적게 나오는 길을 안내해주기 때문에 자주 사용합니다.

많은 운전자분들이 네비게이션에 의지해 운전을 많이 하고 계시지만 갑자기 공사를 하거나 자연재해로 길이 막혔을 때와 같은 경우에 네비게이션의 말을 들으면 오히려 목적지에 더 늦게 도착하는 경우도 발생합니다. 이러한 이유로 운전자는 경험에 의거해서 네비게이션이 알려주지 않는 다른 길로 돌아서 목적지로 가기도 합니다.

이럴때 우리가 원하는 네비게이션의 동작은 어떤 것일까요? 아마도 내가 실수든 아니면 의도된 행위이든 관계없이 현재 위치로부터 목적지까지의 새로운 경로를 탐색해주길 바랄 것입니다. 만약 더이상 길이 없는 막다른 길로 들어섰을 경우에는 다시 돌아가는 경로를 탐색해주어야 할 것입니다. 

운전자의 경우를 살펴봅시다. 정해진 시간에 목적지까지 물건을 배달해야 한다고 가정해보겠습니다. 이때 운전자가 선택할 수 있는 경우는 다양합니다.

1. 네비게이션의 도움없이 목적지까지 운전한다.
2. 네비게이션의 안내대로 목적지까지 운전한다.
3. 네비게이션의 도움을 받되 상황에 따라 경험에 의거해 운전한다.

이 외에도 여러가지 방식이 있을 것입니다. 하지만 어떠한 경우이든 중요한 것은 정해진 시간안으로 목적지에 물건을 배달해야 한다는 것입니다.  이를 지키지 못하면 책임이 발생하게 됩니다.

 
아키텍트의 역할

IEEE 1471에 따르면 미션을 목표로 하는 시스템이 존재하고, 이 시스템이 미션을 만족시킬 수 있는 하나의 아키텍처가 필요합니다. 이러한 아키텍처를 수립하는 것이 아키텍트의 가장 중요한 역할입니다.

즉, 목적지까지 최적의 경로를 찾아주는 네비게이션과 같습니다. 프로젝트 조직이 비록 잘못된 길에 들어서서 헤매고 있더라도 전부 갈아엎고, 다시 만들라고 하는 것이 아니라 현재 상태에서 요구사항을 만족시킬 가장 적합한 아키텍처를 수립을 해야합니다. 현재의 아키텍처 구조가 요구사항을 도저히 만족시킬 수 없는 경우 막다른 길에서 U턴을 지시하는 네비게이션처럼 새로운 아키텍처 구조를 도입을 해야합니다.


물론 성능이 나쁜 네비게이션을 운전자를 더 힘들게 하듯, 잘못된 방향을 제시하는 아키텍트는 프로젝트 조직을 힘들게 할 수도 있습니다. 그래서 아키텍트는 문제의 의도와 본질을 꽤뚫어볼 수 있는 통찰력과 뛰어난 기술력 등이 요구됩니다. 


PM의 역할

PM의 가장 큰 역할은 프로젝트를 관리하는 것입니다. 프로젝트의 구성요소는 크게 범위(scope), 비용(cost), 일정(Time)입니다. (하나 더 하자면 품질요소도 있습니다.) 즉, 이러한 프로젝트 구성요소를 잘 관리하여 정해진 비용에 정해진 일정에 원하는 기능을 가진 (고객이 수용하는)적당한 품질의 시스템을 만들어낼 수 있도록 관리를 하는 것이죠.

PMBOK에 따르면 할 일이 참 많습니다.

1. 통합관리
2. 범위관리
3. 일정관리
4. 원가관리
5. 품질관리
6. 인적자원관리
7. 의사소통관리
8. 위험관리
9. 조달관리

헉헉... 나열하는 것만으로도 숨이 차네요. 이것만 하느냐? 아닙니다. 이것들을 전체적인 프로젝트 흐름에 따라 관리해야 합니다.

시작 -> 계획 -> 실행 -> 모니터링 및 컨트롤 -> 완료



비유하자면 위에서 말한 운전자와 같은 역할을 합니다. 정해진 시간(일정)안에 정해진 목적지까지 물건을 배달(범위)해야 합니다. 그렇게 하기 위해서는 목적지도 확인하고, 차량이 고장나지 않도록 점검도 하고, 기름도 충분히 있는지 확인하고, 물건도 잘 실었는지 확인해야 합니다.

만약 배달하지 하지 못하면 운전자는 '책임'을 져야합니다. 물론 운전자는 길이 막혀서 또는 네비게이션이 잘못된 경로를 알려줘서 배달하지 못했다고 말할 수 있습니다. 그렇다고 해서 네비게이션에게 책임이 돌아가는 것이 아니라 가장 큰 책임은 운전자에게 돌아갑니다.


책임 영역의 분리

관심사의 분리(
Separation of Concerns)라는 것이 있습니다. 프로그래밍 설계나 아키텍처 설계를 할 때 지켜야할 원칙입니다. 이 원칙을 지키지 않으면 변경에 대처하기도 힘들고, 영향을 받는 부분도 많아집니다. 아주 작은 프로그램을 만든다면 이러한 원칙을 지키지 않는다 하더라도 어느정도 대처를 할 수 있을 것입니다. 하지만 현재의 프로젝트는 작다고 하더라도 과거의 그것과는 비교할 수 없을 정도로 커졌습니다.
 

지금 세상은 어떻습니까? 이제 세상은 넓어졌고, 운전자가 잘 알고 있는 길이라 하더라도 네비게이션의 도움을 받는 시대에 우리는 살고 있습니다. 이제 더이상 운전자가 모든 것을 다 알아서 하는 세상은 과거의 추억으로 남겨진 것이죠.

세상이 복잡해지고 커진만큼 고객이 요구하는 비즈니스 요구사항 또한 복잡해지고 커졌으며, 이제는 혼자서 모든 일을 처리할 수 없는 소프트웨어 프로젝트들이 우리 앞에 존재하고 있습니다. 프로젝트 안에서의 책임 영역을 명확하게 구분해야 프로젝트의 성공 확률을 높힐 수 있는 것이지요. 


아키텍트와 PM... 그리고 팀

아키텍트와 PM은 분명히 다릅니다.(기사참조) 이를 인지하여 기술책임과 관리책임을 분리하고, 서로의 역할에 충실하며 힘을 합칠 때 소프트웨어 프로젝트는 지금보다도 좀 더 성공할 확률이 올라가지 않을까 생각합니다. 

네비게이션이 현재 상태에서 최적의 경로를 잘 알려주고, 운전자는 이를 참고로 길을 결정합니다. 그리고 네비게이션이 알려주는 대로 무사히 길을 가기 위해서 차량정비, 기름, 물건 등을 신경써야 합니다. 유사시 네비게이션이 알려주는 길이 비록 틀린다 하더라도 경험에 의거해 다른 길을 찾거나 다른 사람에게 길을 물어보기도 해야합니다. 네비게이션의 입장에서는 최대한 운전자의 요구에 맞는 경로를 끊임없이 알려주고, 그 방향대로 가도록 안내방송으로 인도해야 합니다.

혼자가 아닌 아키텍트와 PM이 팀을 이루어 팀웍을 발휘할 때 우리의 프로젝트는 올바른 길로 갈 것입니다. 



ps. 바쁜 와중에도 오늘 시간을 내주신 '신승환'님께 감사드립니다. ^^
(블로그주소 : http://www.talk-with-hani.com/)
 

저작자 표시 비영리 동일 조건 변경 허락
크리에이티브 커먼즈 라이선스
Creative Commons License

'기타' 카테고리의 다른 글

네비게이션과 운전자 그리고 아키텍트와 PM  (2) 2011/08/11
포지셔닝  (2) 2011/06/27
IT업계에서의 학습 튜토리얼 아이디어(1)  (2) 2010/08/13
웹개발환경  (0) 2010/06/28
직장 예절, 잊지 말자!  (0) 2010/04/11
프로젝트 진행하기  (2) 2009/12/22
Posted by 스쿨쥐
2011/06/27 17:29

포지셔닝 기타2011/06/27 17:29

사회에서 나를 특별한 존재로 인식시키기란 쉬운 일이 아닙니다. 그렇기 때문에 남과 차별화된 무엇인가를 찾게되고, 그것을 통해 나를 드러내게 됩니다. 그렇다면 어떻게 나를 차별화할 수 있을까요? 아마도 다음과 같은 방법으로 가능하게 할 수 있을 것입니다.

1. 내가 좋아하는 것이 무엇인지 찾습니다.
2. 내가 최초인 것이 무엇인지 찾습니다.
3. 내가 최고인 것이 무엇인지 찾습니다. 

 
사실 이러한 내용은 마케팅 분야의 고전 '포지셔닝'이라는 책을 읽고, 생각해본 것입니다. 기업의 포지셔닝처럼 개인의 경쟁력에 있어서도 이러한 원칙은 동일하게 적용되기 때문입니다.
(참조 : http://www.yes24.com/24/goods/2302353?scode=032&OzSrank=1)



현재 제가 포지셔닝을 하고 있는 기술 분야는 '소프트웨어 테스팅' 입니다. 부가적으로 '아키텍처'와 '클라우드'에 관심을 많이 두고 있기도 하죠. 

업무 분야에 대한 포지셔닝은 '금융(은행, 증권, 보험)' 쪽을 생각하고 있습니다. 물론 '조선/해운'분야도 매력적인 분야임이 틀림없구요. 

앞으로 10년... 위에 언급한 포지셔닝을 잘 해내서 나의 포지셔닝을 확고히 하고자 합니다. 포지셔닝 자체가 목표가 아니죠. 제 꿈을 이루기 위한 수단이 포지셔닝일 뿐입니다.

제가 우주를 정복하고자 하는 이유는 우주를 정복하면 세상을 바꿀 수 있기 때문입니다. 지금보다도 더 나은 세상을 위해서... 
저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

'기타' 카테고리의 다른 글

네비게이션과 운전자 그리고 아키텍트와 PM  (2) 2011/08/11
포지셔닝  (2) 2011/06/27
IT업계에서의 학습 튜토리얼 아이디어(1)  (2) 2010/08/13
웹개발환경  (0) 2010/06/28
직장 예절, 잊지 말자!  (0) 2010/04/11
프로젝트 진행하기  (2) 2009/12/22
Posted by 스쿨쥐
우리 IT 업계 뿐만이 아니라 대부분의 직종에서 직무나 직위에 대한 학습은 제대로 이루어지고 있지 않습니다. 그렇기 때문에 조직이 가지고 있는 노하우가 신입사원들에게 잘 전달되지도 않고, 직급이나 직책이 바뀌었을 경우 무엇을 해야하는지 해매는 경우가 굉장히 많습니다. 이는 곧 조직의 생산성 저하로 나타나게 됩니다.

이런 경우 어떻게 하면 좋을까요?


문제가 뭐야???

현재 IT업계에서 학습이 제대로 이루어지고 있지 않는 이유에는 다음과 같은 것들이 있습니다.

1. 현재 프로젝트 상황이 중요하다. 일정도 부족한데 언제 학습을 하느냐? 회사는 학교나 학원과 같은 교육기관이 아니다.
2. 내 일도 밀려있다. 그런데 학습을 도와주어야 하느냐?

물론 이외에도 여러가지 있을 수 있습니다. 하지만 근본적인 이유는 "프로젝트 현장에서 학습을 도와준다는 것은 곧 프로젝트의 실패의 원인 중 하나가 될 것이다. 나는 그 책임을 지기 싫다." 입니다.


그래서???

하지만 저는 위의 이유에 반대를 합니다.

첫째, 프로젝트가 실패를 하게 된다면 이는 모두의 책임입니다. 모두들 잘잘못을 따지기 바쁘지만 어쨋든 실패한 프로젝트입니다. 목표를 달성하지 못한 것이죠. 

둘째, 프로젝트에서 학습이 동반되지 않는다면 오히려 프로젝트가 실패하는 확률이 늘어납니다. 프로젝트에 새로운 사람이 들어오고 프로젝트에 적응을 해야합니다.(신입이든 경력이든) 그 적응과정을 순수히 개인능력에만 맡긴다면 적응할 수 있는 확률이 줄어들고, 적응을 하지 못한다는 것은 곧 인원교체로 이어지며 악순환이 반복되게 됩니다. 그러면 당연히 프로젝트 전체의 생산성은 줄어들게 되고, 이는 곧 프로젝트의 실패를 예고하는 것이 됩니다.

그렇기때문에 프로젝트 현장에서는 학습도 함께 이루어져야 합니다. 위에서도 언급했듯이 회사는 교육기관은 아닙니다. 무턱대고 학습을 도와주는 것은 분명히 잘못된 것이죠. 프로젝트의 비즈니스 목표를 반드시 인지하고 그 비즈니스 목표를 달성할 수 있도록 하는 학습이 이루어져야 합니다.


어떻게???

프로젝트에 신입사원이 한명 투입되었다고 가정합시다. 지금까지는 경력위조(신입임에도 불구하고 최소 2-3년차로 투입되는 현실...)로 들어왔기 때문에 누구나 봐도 초보인 줄 알면서도 그냥 일을 던져줍니다. 그리고는 PM와 PL은 기도하죠. 제발 이번 신입사원은 똘똘해서 알아서 잘 해주길 바랄뿐이야... 마치 로또를 기원하는 것처럼요. 하지만 신입사원은 잘 해내지 못합니다. 

그럼 신입사원의 학습을 도와주면서 프로젝트 목표를 향해서 달려가봅시다.

여기서 잠시 살펴볼 내용이 있습니다. "실용주의 프로그래머"의 저자 중 한명인 앤디 헌트는 다른 저서 "실용주의 사고와 학습"이라는 책에서 다음과 같이 말하고 있습니다.

초보자는 해당 기술 영역에서 사전 경험이 거의 없는 사람입니다. 
...
그렇지만 초보자들도 상황에 관계없이 통하는(context-free) 규칙이 있으면 효과적으로 일할 수 있습니다. 쉽게 말해서 레시피(recipe)가 필요한 것입니다.
...
학습은 실세계의 경험과 조화될 때 가장 효과적입니다. 
...
단순히 몇 가지 '베스트 프랙티스(best practice)'를 초보자에게 가르친다고 되는 것이 아닙니다.
...

여기서 힌트를 얻었습니다. 즉, 프로젝트 환경은 신입사원(초보자)을 학습시키기 가장 좋은 장소이며, 이를 통해 프로젝트를 성공으로 이끌 수 있을 것이라 판단하였습니다. 그래서 신입사원에게 대리급 직원을 붙여서 학습과 업무를 동시에 진행해 나가는 것입니다. XP에서 말하는 "짝 프로그래밍"을 학습의 일환으로 삼는 것입니다. 그러면서 업무를 처리하는 방법, 즉 레시피를 알려주는 것이죠.


1. 대리급 직원이 신입사원과 함께 개인개발환경을 마련합니다. 이를 통해서 신입사원은 개발환경에 대해서 배우며 어떻게 구축을 해가는 지 배워갑니다. 단, 대리급 직원이 설치해주어서는 안되며, 옆에서 설명만 하고 신입사원이 직접 설치를 합니다.

2. 아주 간단한 업무를 하나를 받습니다. 그리고 이 업무에 대한 테스트케이스(완료에 대한 정의)를 적어둡니다.

3. "짝프로그래밍"으로 진행합니다. 먼저 대리급 직원이 10분간 드라이브를 합니다. 그리고 신입사원이 20분간 드라이브합니다. 이런식으로 하나의 완전한 기능을 구현하고 2번에서 만들었던 테스트케이스를 만족하는지 확인 후 완료처리를 합니다. 작업해가는 과정을 간단한 텍스트로 메모하면서 진행하는 것도 나중에 신입사원이 혼자할 때에 큰 도움이 됩니다.

4. 짧게는 2~3일, 길게는 1주일동안 3번 작업을 반복합니다. 물론 프로젝트에서 감수할 수 있는 일정이 있겠지만 너무 짧게 잡는것은 좋지 않습니다.

5. 이제 업무를 혼자 진행할 수 있도록 맡깁니다. 하지만 반드시 진행상황을 보고하도록 합니다. 흐름을 방해하지 않기 위해서 오전에 한번, 오후에 한번 확인하는 것도 한 방법입니다. 그리고 의문사항이 있으면 언제든 질문을 할 수 있도록 편안하게 해줍니다. 무서운 것은 실수가 아니라 무응답입니다. (은행 홈페이지에서 계좌이체를 했는데 응답없음이라는 글귀를 만나게 되면 어떤 느낌이 드십니까???)

이렇게 하면 프로젝트에 신입사원이 들어와도 적응할 수 있는 확률이 높아지고 프로젝트의 성공확률은 올라간다고 생각됩니다. 제가 생각하기에는 "짝프로그래밍"을 통한 학습으로 발생하는 대리급 직원의 생산성 손실비용보다 빈번히 발생하는 신입사원의 교체비용으로 인한 생산성 손실비용이 더 크다고 판단됩니다.

사실 위의 과정에 대해서 참조한 메타포가 있습니다. 바로 게임이죠. 보통 온라인 게임사이트에 가입을 하고 게임을 시작하면 보통 다음과 같은 과정을 거칩니다.

1. 게임 케릭터를 선택한다.

2. 게임을 쉽게 접할 수 있도록 튜토리얼 모드로 이동한다. (또는 초보자 마을)

3. NPC로부터 도움과 함께 간단한 퀘스트를 진행하면서 게임 인터페이스를 익히고 게임에 대한 룰을 이해한다.

4. 튜토리얼을 마치면 정식 게임모드로 돌입한다.

이러한 과정을 프로젝트 현장에 적용시켜 본 것입니다. NPC의 역할은 대리급 직원이 담당하고, 간단한 퀘스트는 복잡하지 않는 업무와도 같습니다.

이러한 방법으로 학습을 도와준다면 분명 효과가 있을 것입니다. 만약 경력자가 들어온다면 직무에 따라 다릅니다. 직무가 기능 구현에만 종속된다면 위의 방식을 따르되 굉장히 간단하게 될 것입니다. 신입사원보다 배우는 것이 빠를 뿐더러 경험이 있기 때문에 더 빠르게 적응합니다. 다만 PL급이거나 다른 직원을 관리하는 업무까지 맡게 된다면 조금 다릅니다. 위의 방법이 적절하지 않겠지요. 그에 대해서는 다음 포스팅을 통해서 알아보도록 하겠습니다. 

이번 포스팅은 여기까지이며, 다른 포스팅을 통해서 프로젝트에서의 다른 직무를 맡게 되었을 때 학습 방법과 회사 내에서 조직 생활을 할 때 직급별로 어떻게 학습을 해나가야 할 지에 대해서 하나하나 살펴나가겠습니다.





저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

'기타' 카테고리의 다른 글

네비게이션과 운전자 그리고 아키텍트와 PM  (2) 2011/08/11
포지셔닝  (2) 2011/06/27
IT업계에서의 학습 튜토리얼 아이디어(1)  (2) 2010/08/13
웹개발환경  (0) 2010/06/28
직장 예절, 잊지 말자!  (0) 2010/04/11
프로젝트 진행하기  (2) 2009/12/22
Posted by 스쿨쥐
2010/06/28 09:39

웹개발환경 기타2010/06/28 09:39


1. 브라우저
- 인터넷 익스플로러
- 파이어폭스(플러그인 : firebug, web developer)
- 크롬

2. 문서관련
- MS Office
- Adobe Acrobat & Adobe Reader

3. 개발도구
- JDK
- 메이븐
저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

'기타' 카테고리의 다른 글

포지셔닝  (2) 2011/06/27
IT업계에서의 학습 튜토리얼 아이디어(1)  (2) 2010/08/13
웹개발환경  (0) 2010/06/28
직장 예절, 잊지 말자!  (0) 2010/04/11
프로젝트 진행하기  (2) 2009/12/22
애자일(agile) 개발 방법이란?  (0) 2009/12/22
Posted by 스쿨쥐
2010/04/11 18:40

직장 예절, 잊지 말자! 기타2010/04/11 18:40

  1. 윗분들이 어떠한 것을 검토를 요청하셨다면 공개적인 답변보다는 개인적인 소통수단을 사용하는 것이 좋다.
  2. 공식적인 행사에는 그에 걸맞는 차림을 해야한다.
  3. 술자리와 같은 자리일수록 더더욱 예의를 지키자.

계속정리 중...

저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

'기타' 카테고리의 다른 글

IT업계에서의 학습 튜토리얼 아이디어(1)  (2) 2010/08/13
웹개발환경  (0) 2010/06/28
직장 예절, 잊지 말자!  (0) 2010/04/11
프로젝트 진행하기  (2) 2009/12/22
애자일(agile) 개발 방법이란?  (0) 2009/12/22
상급자처럼 일하라  (2) 2009/12/21
Posted by 스쿨쥐
2009/12/22 20:35

프로젝트 진행하기 기타2009/12/22 20:35

프로젝트를 처음 진행을 하다보면 어떤 일을 해야할 지 막막한 경우입니다. 때에 따라서 전혀 엉뚱한 작업을 하기도 합니다. 불과 이틀 전까지도 저는 소위 말하는 삽질을 하고 있었지요. 막상 프로젝트나 반복을 진행하려니 무엇을 해야할 지 어떻게 해야할 지 제대로 하고 있는지 알 수 없었습니다. 

이런 저런 삽질을 하고 연구소장님의 가이드 하에 조금씩 저만의 프로젝트 진행 가이드를 잡아가기 시작했습니다. 그래서 생각을 정리하는 차원에서 이 글을 남깁니다.

이름하여 스쿨쥐의 "프로젝트 가이드" 짜잔!!!

1. 무엇을 할까?

프로젝트의 목표가 무엇인지, 해당 프로젝트 또는 반복에서 내가 해야 할 일이 무엇인지 생각합니다. 어떻게라는 것은 생각하지 마세요. 무엇을 할 지만 생각하세요. 구현 가능성? 이런 것은 생각하지 마십시오. 그냥 내가 해야 할 일이 무엇인가? 고객이 무엇을 원하는가? 이 생각만 하세요. 

실제 프로젝트에서는 "요구사항 분석"이 이 항목에 해당할 수 있습니다.


2. 개념 모델 그리기

자, 이제 무엇을 할 지는 결정되었습니다. 그럼 해야할 일에 대해서 개념 모델을 그려보세요. 그리고 그 개념들간에 관계 또는 행위들을 글로 표현해보세요. 


위의 그림처럼 각 개념을 만들고 개념들간의 관계를 표현하세요.


3. 도메인 모델 그리기

개념모델을 기초로 해서 도메인 모델을 그립니다. 모양이 유사할 수도 있고, 조금 달라질수도 있습니다. 

도메인 모델에서 생각해야 할 점은 도메인 모델을 통해서 내가 해야할 일(기능)이 구현 가능한가? 쉽게 구현할 수 있는가?를 따져보는 것입니다. 

코드 또는 sql까지 완벽하게 따지라는 뜻은 아닙니다. 비지니스적으로 또는 ERD를 통해서 내가 원하는 기능을 위한 데이터 또는 기능이 구현 가능한지 여부를 확인하면서 도메인 모델을 만들라는 뜻입니다. 또한 각각의 레퍼런스나 키의 관계정도만 표시를 하시면 됩니다. (아래 예제는 이해를 위한 그림으로 관계가 논리적이지 않을수도 있습니다. 이런식으로 한다라는 예제로 이해해주세요.)



4. 비지니스 용어로 시나리오 구성

도메인 모델을 통해서 구현가능하다는 것이 입증되었습니다. 그렇기때문에 비지니스 용어로 어떤 시나리오가 생기는지 구성합니다.

1. 반을 구성합니다.
2. 선생님은 시험을 출제합니다.
3. 학생은 출제된 시험에 응시합니다.

주의할 점은 비지니스 용어를 사용해야 하는 것이지 애플리케이션 단위의 용어를 사용해서는 안됩니다. 즉, "반을 구성한다"고 표현해야 하는 것이지 "반을 생성한다. 또는 반을 등록하고, 선생님과 학생들을 입력한다."고 표현해서는 안됩니다.

그리고 UI 메타포를 통해서 시나리오를 생각해보는 것도 한 방법입니다.


5. 스토리 작성

시나리오 구성대로 가장 중요한 스토리를 작성합니다. 실제 내가 해당 시스템의 사용자라고 가정하고 어떤 일을 할지, 어떤 작업을 할지, 무엇이 정말 필요한지를 고려하면서 스토리를 작성합니다. 

주요 스토리를 작성한 후에는 "1. 무엇을 할까"에서 정했던 할일이 빠진 것이 없는지 확인하고, 스토리로 추가합니다.

스토리는 지금 이후에도 필요시 언제든지 추가할 수 있으며, 언제든 제외할수도 있습니다. 



6. 반복 계획 세우기

스토리 중에서 이번에 해야할 일들을 선택합니다. 이 과정에서 스토리의 중요도, 규모(또는 기능점수), 비지니스 가치, 예상시간 등을 구체화합니다. 그리고 반복 계획이 수립되면 하나씩 해가면서 애자일 개발방법을 적용해나갈 수습니다. 


지금까지 애자일을 통해서 프로젝트를 어떻게 진행할 것인지에 대해서 설명을 했습니다. 물론 시스템 아키텍처, SW 아키텍처, 개발환경 등은 제외하였습니다. 그 이유는 프로젝트 초기에 한번만 해야하는 작업이며, 이는 별도의 순서로 정할수도 있고, 프로젝트 초기의 반복에서 스토리의 하나로 정할수도 있습니다.  전적으로 진행하는 사람 마음이죠.


여러분들은 어떻게 프로젝트를 진행하시나요???

저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

'기타' 카테고리의 다른 글

웹개발환경  (0) 2010/06/28
직장 예절, 잊지 말자!  (0) 2010/04/11
프로젝트 진행하기  (2) 2009/12/22
애자일(agile) 개발 방법이란?  (0) 2009/12/22
상급자처럼 일하라  (2) 2009/12/21
무엇이 사람을 움직이게 하는가?  (0) 2009/12/04
Posted by 스쿨쥐
2009/12/22 19:29

애자일(agile) 개발 방법이란? 기타2009/12/22 19:29

소프트웨어 개발 공정은 건축 공정에 많이 비유를 합니다. 요약하자면 상담을 통해서 고객의 요구를 분석하고 요구가 확정된다면 설계도를 만들 것이고, 그 설계도에 따라 건물을 지을 것입니다. 그리고 완공 후에는 사후 관리를 하게 될 것입니다.

이러한 건축의 절차를 소프트웨어 개발에 적용시킨 것이 바로 폭포수 모델과 같은 전통적인 개발 방법론입니다.

그림과 같이 요구사항분석, 설계, 구현, 테스트, 유지보수 등의 단계를 거치게 됩니다. 시간에 지남에 따라서 전통적인 개발 방법론의 한계를 드러내기 시작했습니다.

건축의 경우 설계도면을 만들고 시공에 이미 들어가면 고객이 요구사항을 함부로 바꿀 수 없습니다. 그 이유는 요구사항을 바꾸게 될 경우 다시 만들기 위해서는 엄청난 비용이 발생하기 때문입니다. 하지만 소프트웨어 개발은 다릅니다. 말 그대로 소프트(soft) 해야 하기 때문에 요구사항 변경에 대처할 수 있도록 방법을 모색해야 했습니다.

즉, 현재에 이르러 요구사항은 건축과는 달리 확정적이지 못하고, 변경 가능하며, 복잡합니다. 그래서 건축을 메타포로 한 개발방법론이 지금의 소프트웨어 개발에는 잘 들어맞지 않게 되었습니다.

현재의 소프트웨어 개발은 건축과 같은 딱딱한 방법론이 아닌 유연성 있는 개발 방법이 필요하게 되었습니다. 혹시 정원을 가꾸어 본 적이 있으십니까? 우리가 흔히 알고 있는 정원을 가꾸는 방법이지요. 정원은 한번에 가꿀 수 있는 것이 아닙니다. 조금씩 다듬어가며 점점 원하는 형태를 찾아갑니다. 이처럼 지금에 있어서 소프트웨어는 요구사항이 100% 확정적으로 도출할 수 없습니다. 그것이 가능하다면 전통적인 방법이 더 효율이 좋습니다. 그렇게 때문에 현재까지 나와있는 요구사항으로부터 설계를 하고 구현을 한 후 고객에게 검증을 받고 거기서 나온 피드백을 바탕으로 점점 요구사항과 설계, 구현 등을 구체화시켜 나가는 방법이 지금의 소프트웨어 개발에 있어서는 더 적합합니다. 그래서 나온 것이 반복적 개발 방법론입니다.

반복적 개발 방법론 중 가장 널리 알려진 것이 바로 UP입니다. UP(Unified Process)는 반복적으로 프로젝트를 진행하되 정해진 프로세스의 절차대로 진행하는 것입니다.

그림과 같이 반복적으로 개발을 이끌어나가고 있기는 하지만 정해진 프로세스(비즈니스 모델링에서부터 개발까지)에 따라 진행되고, 반복이 진행됨에 따라서 비중이 바뀝니다. 예를 들어 첫 번째 반복에서는 비즈니스 모델링이 비중이 컸다면 이 후 반복으로 진행될수록 개발 및 테스트에 대한 비중이 점점 크게 차지하게 됩니다.

프로젝트를 이끌어가는 기업의 입장에서는 UP가 굉장히 좋은 개발 방법론이었으나, 실제 개발하는 개발자(또는 개발팀)의 입장에서는 적용하기가 쉽지 않았습니다. 이유는 굉장히 방대한 부분을 UP에서 제공하고 있으나, 이를 반드시 따라야 한다는 오해와 전반적인 내용을 잘 알고 있지 않으면 시작하기 어렵다는 점 때문에 도입하기가 쉽지 않았습니다.

그래서 좀 더 개발 활동에 실용적으로 사용할 수 있는 방법을 생각하게 되었는데, 그것이 바로 애자일(Agile) 개발 방법입니다. 애자일(Agile) 개발 방법은 개발자가 지켜야 할 프로세스를 하나하나 정의하지 않습니다. 다만 변화하는 요구사항에 대해서 능동적으로 대처하는 것을 목표로 하고 있습니다. 그 중 대표적인 것이 바로 XP(eXtreme Programming)입니다.

XP는 고객에게 고객이 원하는 소프트웨어를 전달하는 것을 목표로 하고 있으며, 반복 내에서 지속적인 리팩토링과 TDD를 통해서 고객의 요구사항을 효과적으로 반영할 수 있도록 합니다. 또한 개발자 사이의 의사소통을 원활히 하기 위해서 짝 프로그래밍을 하며, 코드와 동떨어지거나 읽어보지 않을 의미 없는 문서는 만들지 않는 것을 원칙으로 합니다.

또 다른 애자일 방법으로는 스크럼(Scrum)이 있습니다. 작은 개발팀, 짧은 개발 주기를 통해서 점진적으로 소프트웨어를 개발하는 데 중점을 두고 있습니다. XP와 매우 유사한 개발 방법을 취하고 있습니다. 백로그(Backlog)는 XP의 스토리, 스프린트는 XP의 주기와 매우 흡사합니다.


XP와의 차이점은 요구사항 변경에 대해서 XP는 항상 리팩토링을 통해서 항상 수정 가능한 상태를 유지하면서 변화를 수용하겠다는 입장이지만 스크럼의 경우에는 요구사항 변경을 시스템에 즉시 반영하기 힘들기 때문에 빠르게 발견하여 처리하자는 관점에서 접근합니다.


출처 : (주)넥스트리소프트

저작권 : 이 글의 저작권은 (주)넥스트리소프트에 있음을 알려드립니다.

저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

'기타' 카테고리의 다른 글

직장 예절, 잊지 말자!  (0) 2010/04/11
프로젝트 진행하기  (2) 2009/12/22
애자일(agile) 개발 방법이란?  (0) 2009/12/22
상급자처럼 일하라  (2) 2009/12/21
무엇이 사람을 움직이게 하는가?  (0) 2009/12/04
구입희망 도서목록  (0) 2009/11/30
Posted by 스쿨쥐
2009/12/21 10:19

상급자처럼 일하라 기타2009/12/21 10:19


정말로 일을 잘하고 싶다면, 그리고 인정을 받고 싶다면 자신의 일만 해서는 다른 사람들과 차별화하기 힘듭니다. 그래서 많은 공부를 하고, 노력을 하고, 어떻게 하면 내 능력을 인정을 받을 수 있을까 생각하게 됩니다.

여러가지 방법 가운데 가장 쉽게 목표를 세울 수 있는 것이 바로 상급자처럼 일하기가 아닐까 생각합니다. 사원이라면 대리처럼, 대리라면 과장처럼 일을 하는 것입니다. 물론 그렇게 하기 위해서는 탄탄한 기본 능력이 필요합니다. 축구에서 패스, 드리블, 트래핑이 안되는 사람에게 433 전술을 이해하고 실행하라고 하면 어려운 일이기 때문이죠. 

기본 능력이 되고, 노력을 한다는 가정 하에 이제는 상급자처럼 일하는 것입니다. 저의 지금 위치는 사원입니다. 그럼 대리처럼 일을 해야겠지요. 우리회사 대리님들을 보면 무척이나 바쁘십니다. 프로젝트 하랴, 야간 강의 준비하랴, 사원들에게 모르는 것을 가르쳐주시랴, 때로는 PL의 입장에서 일을 하시기도 합니다.

자, 이제 2009년 한해도 거의 끝나가는 시점이네요. 올해 저의 목표중 절반은 이룬 것 같습니다. 내년 목표 줄 하나는 대리로 진급하고, 좀 더 커뮤니티 활동을 많이 하며, 사내에서도 그리고 사외에서도 인정받는 프로그래머가 되는 것입니다. 그러기 위해서는 내년을 기다릴 것이 아니라 지금 이 글을 쓰고 있는 순간부터 직급은 사원이나 대리라는 생각으로 일에 전념해야겠습니다. ^^
저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

'기타' 카테고리의 다른 글

프로젝트 진행하기  (2) 2009/12/22
애자일(agile) 개발 방법이란?  (0) 2009/12/22
상급자처럼 일하라  (2) 2009/12/21
무엇이 사람을 움직이게 하는가?  (0) 2009/12/04
구입희망 도서목록  (0) 2009/11/30
MySQL 명령어 모음  (0) 2009/11/26
Posted by 스쿨쥐
2009/12/04 22:08

무엇이 사람을 움직이게 하는가? 기타2009/12/04 22:08

오랜만에 가지는 휴일입니다. 몸이 좀 좋지 않아 자바 카페의 정모를 뒤로하고 집에서 쉬던 중 가만히 있을 수 없어서 항상 가는 강컴에 들렀다가 "Behind Closed Doors"라는 책의 좋은 서평에 신승환님의 글이 있어서 우연히 그 분의 블로그에 가게 되었습니다.

글을 하나하나 읽다가 특히 마음에 와 닿는 글이 있었습니다. "사람을 움직이는 힘"에 관한 글이었는데 특히 부동산 컨설턴트의 이야기가 큰 감명이더군요.

제가 가장 부족한 부분이 이러한 것이 아닌가 합니다. 기술적인 또는 전공 지식에 집착한 나머지 가끔은 경영자의 입장에서 내가 너무 기술적으로 집착하여 ROI(투자 수익)이 낮은 개발자가 되지 않을까... 또는 고객의 진정한 의도를 파악하지 못하여 잘못 개발하고 있는것은 아닌가... 이런 생각이 들때도 많았습니다. 

또 다른 예로는 학생시절 해왔었던 프로젝트들이 저의 기술적 욕심에 의해서 실패한 사례도 많았고 당시 프로젝트 이후에 관계가 서먹해지는 경우도 있었습니다.

이러한 저의 경험을 바탕으로 그 글을 읽었을 때 많은 생각이 들었습니다. 비록 지금은 갓 1년 넘은 2년차 사원이긴 하지만 앞으로는 대리로 승진도 할 것이고, 경험을 쌓아 점점 직위도 높아질 것입니다. 전 제 직업을 아주아주 좋아하기 때문에 돈 때문이 아니라 저의 정체성을 위해서라도 오랫동안 하고 싶습니다.

만약 그렇게 오랫동안 하려면 현재의 제 일에 충실하면서 앞으로의 대비를 해야합니다. 제가 부족한 부분이 이런 것이었습니다. 제가 존경하는 연구소장님의 글에 따르면 지금까지의 저는 사냥꾼 스타일이었습니다. 항상 잘못된 줄 알면서도 성격을 고치기란 참 힘든 일이더군요.

지금 이 글을 남기고 있는 순간의 느낌이 너무나도 아쉬워서 글을 남깁니다. 다음에 제 자신이 이 글을 다시 보았을 때 지금 이 느낌을 받을 수 있었으면 좋겠군요. 항상 이럴 때 국어능력의 한계를 느낍니다. (나름 문과출신인데 ㅠㅠ)
저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

'기타' 카테고리의 다른 글

애자일(agile) 개발 방법이란?  (0) 2009/12/22
상급자처럼 일하라  (2) 2009/12/21
무엇이 사람을 움직이게 하는가?  (0) 2009/12/04
구입희망 도서목록  (0) 2009/11/30
MySQL 명령어 모음  (0) 2009/11/26
회의할 때 명심하자.  (0) 2009/11/20
Posted by 스쿨쥐
2009/11/30 15:05

구입희망 도서목록 기타2009/11/30 15:05

1. 프로그래밍 일반 / Code
  • 새로보는 프로그래밍 언어(에이콘)
  • Short coding(한빛)
  • Beautiful Code(한빛)
  • 컴퓨터 프로그램의 구조와 해석(인사이트)
  • 한권으로 끝내는 정규표현식(한빛)

2. Java
  • Think in Java 4th(사이텍)
  • 자바프로그래밍 언어 한글4판(케이앤피북스)

3. 디자인패턴 / 아키텍처
  • 오브젝트 디자인(인포북)
  • 버그 패턴과 자바(인포북)
  • Bitter Java(인포북)
  • 패턴지향 소프트웨어 아키텍처(지앤선)
  • SOA : 서비스지향 아키텍처(에이콘)
  • SOA구축 : 엔터프라이즈 아키텍처를 고려한(에이콘)

4. UML
  • UML Distilled 3E(홍릉)

5. 소프트웨어 개발
  • 애자일회고(인사이트)
  • 린 소프트웨어 개발의 적용(위키북스)
  • 린 소프트웨어 개발(인사이트)
  • 소트웍스 앤솔러지(위키북스)
  • 사용자 스토리(인사이트)
  • 익스트림 프로그래밍(인사이트)
  • 서브버전을 이용한 실용적인 버전관리
  • 실용주의 프로그래머를 위한 프로젝트 자동화 : 빌드, 디플로이, 모니터링
  • 프로젝트가 서쪽으로 간 까닭은(인사이트)
  • 불확실성과 화해하는 프로젝트 추정과 계획(인사이트)
  • 사랑하지 않으면 떠나라(인사이트)
  • 구글을 지탱하는 기술(멘토르)
  • 소프트웨어 개발의 모든것(페가수스)
  • 대한민국 개발자 희망보고서(한빛)
  • Git, 분산 버전 관리 시스템(인사이트)
  • The Art of Game Design(에이콘)
  • 고약한문제, 합당한해결(인사이트)
  • 실전 예제로 살펴보는 집단지성 프로그래밍(인사이트)
    자바 개발자와 시스템 운영자를 위한 트러블 슈팅 이야기 (한빛)
    자바 개발자도 쉽고 즐겁게 배우는 테스팅 이야기(한빛)
    MongoDB 완벽 가이드 (한빛)
    JUnit in Action 2nd(인사이트)
     
6. 원서
  • Domain Specific Languages(마틴파울러)
  • Expert One-on-One J2EE Design and Development
  • Domain Driven Design
  • Domain Driven Design Using Naked Object
  • Data Model Resource Book 1~3권
  • Analysis Patterns(마틴파울러)
  • Data Model Patterns : conventions of Thought
  • Data Model Patterns : Metadata Map
  • POSA 1~4권
  • writing solide code
  • Behind Closed Doors
  • Head first Statistict
  • Nature of Order(크리스토퍼 알렉산더) 1~4

7. Web
  • 제프리 젤드만의 웹표준 가이드(위키북스)
  • 방탄 Ajax(에이콘)
  • 프리젠테이션 젠(에이콘)
  • 프리젠테이션 젠 디자인(에이콘)
  • 웹 디자인 2.0 고급CSS
  • CSS 비밀 메뉴얼(한빛)
  • 웹사이트 최적화기법(ITC)
  • Head First JavaScript(한빛)
  • Adobe Flex3 실전 트레이닝북(위키북스)
  • Book2Book 웹기획, 사용자를 배려하는 합리적인 생각(한빛)
  • Ajax 보안(에이콘)
  • Beautiful Web Design(인사이트)
  • CSS 완벽가이드(위키북스)
  • 프로그래밍 플렉스3(ITC)
  • 리팩토링 HTML(에이콘)
  • 사용자 경험 스케치(인사이트)
  • 스티브크룩의 사용성평가, 이렇게 하라(위키북스) 
  • 스케일러블 웹사이트 구축(위키북스)  
    The Design of Sites 한국어판 : 고객 중심 웹 기획을 위한 웹사이트 디자인 패턴 107 바이블 (에이콘)

8. 보안
  • 해킹, 속임수의 예술(사이텍)
  • 해킹, 침입의 드라마(사이텍)
  • 디지털 보안의 비밀과 거짓말(나노미디어)
  • 웹 해킹 패턴과 대응(사이텍)
  • 구글 해킹(에이콘)
  • 웹 애플리케이션 해킹 대작전(에이콘)
  • 웹 해킹&보안 완벽가이드(에이콘)
  • 리버싱 : 리버스 엔지니어링 비밀을 파헤치다.(에이콘) 
  • 업계가 감추려고 하는 컴퓨터 보안의 진실(와우북스)   
    이거 불법 아냐? : 일상을 파고드는 해킹 스토리(위키북스)
     

9. 기타
  • 승부의 기술(굿모닝 미디어)
  • 맨큐의 경제학
  • 미래를 만든 Greeks(인사이트)
  • 정의란 무엇인가(김영사)
  • 스마트스웜(김영사)
  • 시스프스를 다시 생각하다(위키북스)
  • 인바운드 마케팅(에이콘)

10. 서버
  • JBoss in Action
  • CentOS 리눅스 구축관리 실무
  • 리눅스 서버보안관리 실무 2E
  • 리눅스 커널 내부구조(교학사)
  • Operation System Concepts with Java(6E)
  • 리눅스 서버관리실무 바이블 1,2권

11. 데이터베이스
  • 비용기반의 오라클원리(지앤선)
  • OWI를 활용한 오라클 진단, 튜닝(한국 맥그로힐)
  • 오라클 실무 튜닝과 SQL패턴 학습(사이텍)
  • 데이터베이스 5판(피어슨)
  • 데이터 아키텍처 전문가 가이드(한국데이터베이스 진흥센터)
  • The Logical Optimizer((주)오픈메이드)
  • 오라클 성능 고도화 원리와 해법1,2((주)비투엔컨설팅)
    MongoDB 완벽 가이드 : NoSQL의 진수를 만나다(한빛미디어) 







저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

'기타' 카테고리의 다른 글

상급자처럼 일하라  (2) 2009/12/21
무엇이 사람을 움직이게 하는가?  (0) 2009/12/04
구입희망 도서목록  (0) 2009/11/30
MySQL 명령어 모음  (0) 2009/11/26
회의할 때 명심하자.  (0) 2009/11/20
자바스크립트 이벤트  (0) 2009/11/04
Posted by 스쿨쥐