반응형
불확실성과 화해하는 프로젝트 추정과 계획(마이크 콘) 이라는 책의 13번째 파트 에 해당하는 내용입니다.


릴리즈 계획이 뭐길래? 왜?  <-- 요거 제목으로는 어울리지 않죠? ㅎㅎ 릴리즈에 대해서 다들 알고 있을 건데.. 왜라니.. 쩝. ㅋ 

릴리즈 계획 과정은 이터레이션보다 더 긴 기간을 커버하는 아주 높은 수준의 계획을 생성하는 과정이다.
릴리즈를 내놓는 데는 통상 3개월에서 6개월의 기간이 소요되며, 이터레이션 길이가 얼마냐에 따라서 3회에서 12회 이상의 이터레이션이 필요하다.

첫 번째로 릴리스 계획은 제품 책임자와 팀원들로 하여금 릴리스 가능한 제품이 나오려면 얼마나 많은 작업이, 그리고 얼마나 오랜 시간이 필요할지 결정할 수 있도록 해준다. 제품이 더 빨리 릴리스 될수록(그리고 릴리스 시점에 제품의 질이 좋으면 좋을수록), 회사는 프로젝트로부터 더 빨리 수익을 거둘 수 있게 된다.
  -- 이런 내용들이 관리자들이 좋아하는 내용이죠? ^^;;

두 번째로 릴리스 계획을 통해 얼마만큼의 기간 동안, 어떤 기능이 개발될 것인지를 예측할 수 있다. 많은 회사들이 이 정보를 사용해 다른 전략적 계획들을 수립한다.

세 번째로 릴리스 계획은 개발팀이 어디로 가야할지를 보여주는 이정표 구실을 한다. 릴리스라는 개념이 없다면, 개발팀은 한 이터레이션에서 다음 이터레이션으로 끝없이 옮겨 다니게 될 것이다. 릴리스 계획 덕에 이터레이션들은 하나의 만족스로운 총체로 결합될 수가 있다. 이는 굳이 애자일 프로세스가 아니더라도, 반복적인 프로세스라면 기본적으로 고려해야할 사항이다. 
이런 계획이 없다면 프로젝트가 목적지 없이 표류할 가능 성이 생기고, 또 완료를 하더라도 기대했던 방향이 아닐 수도 있다.
그러므로 릴리스 계획이 필수적이며 이로인해서 프로젝트가 잘못된 길로 가는 걸 막아줄 수 있다.... 랍니다. ㅋ

릴리즈 계획
릴리스 계획 과정에서는 얼마만큼의 작업이 완료 될것인가를 결정해야 한다. 
날짜를 정해놓고 얼마만큼의 일을 할 수 있을지 생각해보는 것이 프로젝트의 시작일 수도 있고,사용자 스토리들을 만들어 둔 다음 그것들을 구현하는데 얼마나 오래 걸릴지를 생각해 보는 것으로 프로젝트를 시작할 수도 있다.
개발팀이 최초의 답을 얻고 나면 그 답은 해당 프로젝트에 대한 조직의 목표에 비추어 평가된다.
결국 제품을 개발하고 나면 기대한 만큼의 돈을 벌 수 있을 것인가? 아니면 돈을 절약할 수 있을 것인가? 시장에 성공적으로 진입할 수 있을 것인가? 만일 아니라면, 프로젝트 수행 기간을 더 늘리거나 줄여서 목표를 성취할 수 있을지도 모른다.

릴리스를 내놓기 위해 얼마나 많은 일을 해야 할지, 그리고 어떤 사용자 스토리들을 포함할지를 결정하는 것은 아주 직관적인 프로세스이다. 계획된 이터레이션 숫자에 개발팀의 예상 속도나 알려진 속도를 곱하면 얼마나 많은 일이 필요한지를 결정할 수 있다.

그 수치에 맞춰서 사용자 스토리의 수를 결정하면 된다. 가령 6개월 뒤에 새로운 제품을 내놓아야 한다고 해보자, 두 주짜리 이터레이션을 사용하기로 했다면, 릴리스 시점까지 13번의 이터레이션을 돌아야 할것이다.
개발팀의 속도가 스토리 점수나 이상적인 작업일 기준으로 20이라면, 전체 프로젝트의 규모는 13x20= 260점이 될 것이다. 제품 책임자와 개발팀은 그 점수를 놓고 모든 스토리들을 토론 해 본 다음 그 우선순위를 정해 260이 넘지 않는 한도 내에서 가장 가치 있다고 여겨지는 스토리들을 구현하기 위해 노력할것이다. 릴리스 계획은 보통 프로젝트 기간 동안 개발될 사용자 스토리의 목록 형태로 문서화된다.

여기쯤 읽을때 이런 생각을 해봤습니다.
위에서 개발팀의 속도를 20이라는 결과를 얻기 위해서는 무엇이 필요할까? 라는 것입니다.
이론상으로는 너무나도 쉬운 답을 얻을 수 있습니다. 실제로 팀원들과 스토리 보드 작성과 이터레이션 작성을 한 내용을 가지고 평가를 하면 됩니다.

하지만 제가 진행해본 결과( 전문 프로젝트 메니져가 아니라 너무 미숙 했을 수도 있지만 ) 정확한 추정이 힘들다는 것을 알게 되었습니다.

1. 전체 제품에 들어가야 하는 정확한 스토리를 뽑아 내기가 힘들다는것.
2. 프로젝트를 진행하면서 튀어나오는 이슈들이 발생할때 이것들이 스토리로 들어가기에 문제가 있는 경우들.
3. 스토리나 이터레이션 수행에 거짓이 있을때.( 보고를 위해 빈약한 부분을 채워 넣거나, 혹은 빼먹거나 하는 것들).

1번과 2번은 사실 프로젝트 수행 미숙에 해당하는 내용으로 볼 수도 있습니다.
3번은 너무나도 취약한 부분입니다. 부서내에서 업무 수행 보고를 부풀려 해야 하거나 할 때가 있습니다.
이런 문제들이 개입되다보면, 결국 이 개발팀의 속도 추정치가 불확실 해지고, 이는 전체 프로젝트 스케쥴에 큰 영향을 미치게죠.

그렇다 보니 개발 스케쥴을 신뢰 할 수 없게 되고, 관리자는 임의대로 스케쥴을 조정하게 되는 악 순환이 반복될 가능성이 있습니다.

당연히 개발팀장 역시 자신이 보고한 개발 스케쥴에 대해서도 자신감이 없으니 강력한 주장(?)은 더더욱 힘들게 됩니다.
저 역시 이런 오류들을 격다보니, 정확한 팀의 속도를 추정은 불가능 하더군요.


그래서 향후 새로운 프로젝트를 진행할 시에는 3번과 같은 경우는 없도록 해야겠다는 걸 뼈저리게 느꼈답니다.


릴리스 계획 과정 동안 어떤 개발자가 어떤 사용자 스토리나 작업을 수행할 것인지 명시하는 계획을 만들거나, 이터레이션 동안 어떤 작업이 어떤 순서대로 이뤄져야 하는지를 명시하는 계획을 만들지는 않는다. 릴리스 계획 과정동안 그 정도로 자세한 계획을 만드는 것은 위험한 일이다. 누가 무슨 일을 어떤 순서대로 할 것이냐 하는 문제는 그 작업을 할 사람이 결정하는 것이 좋고, 가능한 한 뒤로 미뤄두는 것이 좋다. 릴리스 계획에 명시되는 것은 사용자에게 전달될 기능의 명세인 사용자 스토리이지 실제로 수행될 개별적 작업들이 아니다. 
그런 것들을 릴리스 계획에 포함시키는 것은 너무 이른 일이다.
사용자 스토리들 가운데에는 개별적인 엔지니어링 작업들로 분할하기에는 충분히 이해되지 않은 스토리들도 있을 수도 있다. 
14장[이터레이션 계획 과정] 에서도 살펴보겠지만, 개발팀은 결국 릴리스 계획에 포함된 사용자 스토리들을 개별적인 작업들로 분할하게 된다. 하지만 그러한 분할 작업은 해당 스토리가 속한 이터레이션을 시작할 때까지는 하지 않는다.
 핵심이 될만한 키워드라서 강조 했습니다.  사실 프로젝트 계획을 세우다보면 너무 세부 사항까지 들어가게 되는데 이를 막고자 하는 예기 인듯 합니다.

만일 프로젝트나 조직 그리고 작업 환경이 허락한다면 릴리스 계획안에 부가적인 정보들을 당연히 포함시킬 수 있다. 일례로, 계획 이면에 깔려있는 어떤 핵심적인 가정들을 릴리스 계획에 명시해 둘 수도 있다. 그런 가정들로는 누가 개발팀에 포함되어야 하고, 이터레이션 길이는 얼마나 되어야 하고, 첫번째 이터레이션이 언제부터는 시작되어야 하고, 마지막 이터레이션은 언제까지 끝나야 한다는 등의 가정이 있을 수 있겠다. 제 21장 [계획과 소통]에서는 릴리스 계획에 대한 의견을 서로 나눌때 포함 시키면 좋은 부가적인 정보들에 대해서 설명한다.


만족 조건 결정 -> 사용자 스토리 추정 -> 이터레이션 길이 결정           -> 스토리 선정 및 릴리스 날짜 결정  
             ↑                                            속도 추정                                                          |
             |                                            사용자 스토리들 간의 우선순위 결정                       |
             +-----------------------------------------------------------------------------+


만족 조건 결정
릴리스 계획과정을 시작하기 전에 프로젝트의 성패 여부를 판정할 기준을 아는 것이 중요하다.
대부분의 프로젝트의 경우 가장 결정적인 기준은 절감되거나 창출되는 돈의 양이다. 프로젝트가 이런 재정적 목표를 만족할 것인지를 판단하기 위해 대부분의 프로젝트들은 일정과 범위 그리고 자원이라는 3대 기준을 사용한다. 그것은 제품 책임자가 정하는 만족 조건들이라는 것이 일정과 봄위 그리고 자원에 관한 목표들로 정의된다는 것을 의미한다.

제품 책임자는 릴리스 계획 과정에서 행해지는 미팅 때마다 이들 각각에 대한 목표들을 꺼내 보여줄 것이다. 가령 제품 책임자는 네 개의 테마에 대해(스토리 점수 기준으로 200점에 달하는)인원 추가 없이 3개월 안에 개발 완료를 바랄수도 있다. 각자의 기준들에 대해 전부 목표를 정해둘 수도 있지만, 보통은 하나의 기준이 지배적으로 작용한다. 즉, 일반적인 프로젝트들은 날짜를 맞추는 것을 목표로 하거나 아니면 기능을 맞추는 것을 목표로 한다는 것이다. 일정 중심적인 프로젝트는 특정한 날짜까지는 릴리스가 나와야 하는 프로젝트이며, 어떤 기능이 포함되어야 하느냐는 그렇게 중요하지 않다.
기능 중심적인 프로젝트는 가능한한 빨리 릴리스를 내놓고자 하는 프로젝트이긴 하지만, 어떤 기능이 제품에 포함되느냐가 보다 더 중요한 프로젝트이다.

만족 조건 결정이라는 것이 책의 내용으로도 잘 이해가 안되는 부분이군요. 과연 만족할만한 조건이란 것이 위에서 나열한 것들로 결정할 수 있는가? 그럼 일정이 중요하다고 한다면 만족할만한 조건이란 무엇인가? 예가 없으니 너무 막연하군요.


스토리와 릴리즈 날짜 선정

이 시점에는 개발팀의 이터레이션 당 속도를 알고 있는 상태일 것이고, 얼마나 많은 이터레이션이 필요할지에 대한 기본적인 가정은 되어 있는 상태일 것이다. 그렇다면 릴리스가 만족 조건들을 충족하도록 계획될 수 있는지 살펴볼 순서이다.
프로젝트가 기능 중심적이라면 모든 필요 기능들의 추정치를 합한 다음 그 값을 예상 속도로 나눈다. 그렇게 하면 필요한 기능 구현을 완료하는 데 필요한 이터레이션의 횟수를 구할 수 있다.
프로젝트가 일정 중심적이라면 달력을 보고 이터레이션의 횟수를 정한다. 이터레이션의 횟수를 추정된 속도로 곱하면 얼마나 많은 스토리 점수를 릴리스 안에 넣을 수 있을지 알 수 있다. 그리고 그 만큼의 점수나 이상적 작업일을 사용자 스토리의 우선순위 리스트에 적용하여 얼마나 많은 기능을 지정된 시간 안에 구현할 수 있을지를 알아낸다.
그 다음 물어야 할 질문은 릴리스 계획이 얼마나 상세해야 하는가이다.
어떤 팀들은 각 이터레이션 안에 무엇을 개발해야 하는지가 잘 드러나는 릴리스 계획 쪽을 선호한다. 어떤 팀들은 다음 릴리스까지 어떤 기능들을 개발해야 하는지 정도만 간단히 결정하는 쪽을 선호한다. 각 이터레이션 안에서 무엇을 해야 하는가는 나중에 결정하겠다는 것이다. 이 중 어떤 방식을 택할것이냐 하는 것을 릴리스 계획 과정에서 토의하고 결정하여야 한다.

각각의 접근 법에는 나름대로의 장단점이 있다. 분명한 것은, 특정한 기능을 특정한 이터레이션에 배정하는 작업은 더 많은 시간을 필요로 한다는 것인다. 하지만 그정도로 상세하게 작업하게 되면 여러 팀들이 협력하여 일을 진행해야 할 경우 유리하다. 한편,작업을 특정한 이터레이션에 할당하는 과정을 생략하면 상세함은 떨어질지라도 시간은 덜 잡아먹는다. 더욱이 어떤 작업을 어떤 이터레시션에 배정할 것인지를 미리 결정하더라도 이터레이션이 실제로 시작되는 시점보다는 적은 지식을 가진 상태에서 하게되는데, 프로젝트 진행과정에서 더 많은 지식을 축적하다 보면 계획은 변경되게 마련이다. 그사실에 비추어 본다면, 작업을 특정한 이터레이션에 배정하기 위해 시간과 노력을 들이는 것은 바람직하지 않다. 물론 프로젝트에 따라서는 그런 사전 작업을 할만한 가치가 있는 경우도 있다. 
필자가 적절한 타협점이라고 생각하는 방법은 , 첫 번째 이터레이션부터 세 번째 이터레이션까지는 각 이터레이션에서 어떤 작업을 수행할지를 미리 정하고, 릴리스 계획의 나머지 부분에 대해서는 하지 않는 것이다. 맨 처음 이터레이션에 작업을 할당해 두는 것은 당연히 의미가 있다. 이터레이션이 곧바로 수행될 것이라면 더더욱 그렇다.
전형적인 릴리스 계획 과정 동안에는 아주 많은 타협적인 질문들과 가정적인 질문들이 제기된다. 그러므로 다음 릴리스와 그 이터레이션동안 무엇을 넣고 무엇을 뺄지를 능숙하게 처리하기 위한 손쉬운 방법이 필요하다. 가장 좋은 방법은 모든 사람들이 배석한다는 가정하에, 사용자 스토리나 기능이 적힌 3x5 인치짜리 카드나 포스트잇 카드를 놓고 작업하는 것이다. 소프트웨어와는 달리 카드는 실체적이며 쉽게 공유될 수 있다.
릴리스를 계획하기 위해서 제품 책임자는 그가 생각하기에 제일 우선순위가 높아서 첫 번째 이터레이션에 들어가야 한다고 생각되는 항목들을 고른다. 카드는 어떤 스토리가 어떤 이터레이션에 들어가야 되는지 명확하게 드러나도록 배열된다.

그림.이터레이션에 들어갈 작업들을 열로 나누어 배열하기.
여기 그림이 이터레이션이 가로로 배열되고, 세로로 스토리들이 배열된 그림이 들어옴


릴리스 계획의 갱신

릴리스 계획을 만들어 두고 어딘가에 처박아 둔 다음 건드리지 않으면 곤란하다. 릴리스 계획은 수시로 점검되어야 하며 주기적으로 갱신되어야 한다. 개발팀의 속도가 일정하게 유지되고 이터레이션 계획 과정에서 뭔가 깜짝 놀랄 만한 사건이 발생하지 않으면 네 주나 여섯 주 정도는 릴리스 계획을 갱신하지 않고 놔두어도 괜찮지 않을까 생각할 수도 있다. 하지만 많은 프로젝트들은 이터레이션이 끝날 때마다 릴리스 계획을 재점검한다는 규칙을 지켜서 좋은 성과를 내고 있다.

사용자 스토리 선정
이번 릴리스에 약 48점 만큼의 스토리를 둘 수 있는 상황에서,
팀원들은 제품 책임자가 가장 낮은 우선순위를 준 "시스템 관리자는 사용자 그룹과 권한을 설정할 수 있다."는 스토리가 시스템에 반드시 필요한 스토리라는 사실을 지적하였다. 이 스토리는 3점짜리이다. 이스토리를 릴리스에 포함시키면 스토리 점수 총합은 49점이 되어 48점을 넘어버린다. 
48점이라는 것도 역시 추정이기 때문에 49점을 그대로 수용할 수도 있지만, 49점을 수용하지 않기로 개발팀이 결정했다고 한다면,
1점만큼의 스토리를 릴리스에서 빼야 한다. 그래서 8점짜리 스토리를 빼버리기로 결정하였다. 이로서 41점이 되었는데 남은 자리에 3점짜리 스토리를 추가할 수도 있게 되었다.
하지만, 제품 책임자는 41점으로 줄어든 만큼 개발 팀이 일정을 1점 만큼 앞당길 수 있다면, 추후에 8점짜리 스토리를 제품일정에 추가할 수 있을 거라 생각하여 추가로 3점짜리 스토리를 포함하지 않고 놔두었다.

여기서 41점 짜리로 그대로 놔둔것은 매우 좋은 선택인것 같군요.
첫번째로, 48점 짜리 릴리스를 41점으로 줄이고 일정을 당길 수 있다면, 계획보다 많은 리소스를 줄일 수 있을것입니다.
두번째로, 41점 짜리 릴리스가 되어 7점이 아깝다고 생각 할 수도 있겠지만, 사실 새로 추가하려는 3점 짜리는 이미 우선순위에서 밀린 3점짜리 스토리라는 것입니다. 즉, 프로젝트상 8점 짜리 스토리보다 우선순위가 밀리는 것인데, 그다지 중요하지 않은 3점 짜리가 이번 릴리스에 들어감으로 해서 8점짜리 스토리가 들어간 다음 릴리즈 시기를 앞당길 수 있는 기회를 없애버릴 수 있기 때문이죠.


이 글을 읽기 전까지는 저도 스토리와 이터레이션과의 관계에만 몰두해서 프로젝트를 진행하면서 스토리와 이터레이션을 단지 TODO 관리 정도로 밖에 사용을 못했는데( 사실 이것도 굉장히 효과가 있었습니다.)
프로젝트 전반적인 흐름과 어떻게 매칭을 해나가야 하는지에 대해 좀더 깊게 생각해보게 되었습니다.




반응형
무료 EBook download 
- 비록 몇개 챕터밖에 없는 듯 하지만, 도움은 좀 될것 같습니다.

http://blogs.msdn.com/b/microsoft_press/archive/2010/08/02/free-ebook-petzold-s-programming-windows-phone-7-special-excerpt-2.aspx

'개발 Note > it 이야기' 카테고리의 다른 글

html5 스터디  (0) 2011.01.07
모바일에서의 GPGPU 가능성.  (0) 2011.01.03
이름없는 개발자들  (0) 2010.07.02
구글TV 오픈플랫폼 아니다.[펌]  (0) 2010.06.18
Bada Wave Review - 16분간. in the italia  (0) 2010.06.02
반응형


보통 아주 새로운 또는 이슈가 될만한 소프트웨어(게임이든, 기타 웹이든, 플랫폼이든 모든 분야에서 )가 개발되고 나면 해당 프로젝트의 개발 팀장휘하 아주 유능한 개발자들은 업계나 메스컴을 통해 상당히 많은 주목을 받게됩니다.

또 해당 프로젝트의 결과물에 대해 여러 의견들이 인터넷을 통해 전파되고, 해당 프로젝트의 개발자들은 자기 분야에서 그 소프트웨어를 사용하는 사람들과 소통을 합니다.

이렇게 되면서 Follower(트위터에서 따옴  ^^) 와 같은 추종 세력들이 형성되고, 프로젝트의 각 모듈들에 대한 의견과 아이디어 문제점들을 피드백 받습니다.

그렇게 해서 요구사항들을 반영한 새로운 버젼을 발표하며 발전해 나가죠.



음...서두를 어떻게 꺼내야 할가 고민을 많이 했습니다. 

하지만 결국 평이한 서문으로 시작이 되는군요. ㅎ

그동안 소프트웨어 개발은 단순히 프로그래밍 이라고 생각을 해왔었습니다.

최근 플랫폼 개발에 참여하게 되면서 부터는, 설계와 표준 그리고 프레임워크 컨셉 및 향후 버젼 관리, 호환성 유지 방법등, 여러가지를 고민하게 되더군요.

그리고 플랫폼 개발이 완료되어 유저들과 개발자들에게 공개가 되고 , 상당히 들뜬(?, 사실은 걱정이 80%^^;;) 기분으로 인터넷이나 주변의 반응들을 살펴보게 되었습니다.

결국 제가 접한것은 인터넷에는 수많은 루머들만 떠돌고, 카더라 식의 비방 과 쉴드가 남발하고 있는 모습들!!!.
더더욱 중요한 것은 플랫폼을 만든 곳에서 제공하는 SDK를 이용해서 소프트웨어를 개발하고자 하는 사람들은 주변에서 찾아볼 수 없다는 것이었습니다.

첨에는 아.. 역시 우리나라 개발자들은 회사일에 너무 치여서 바빠서 따로 취미로 개발을 할 여력이 안되는 구나...
(반은 맞을거라 보여집니다. 회사일도 빡센데 집에와서 또 코딩한다는 건.... ㅡㅡ;;; 미쳤다는 소리듣기 딱 좋죠.) 

이런 생각을 했었습니다.


그렇게 몇주를 보내는 동안 가끔 인터넷에서 새로운 소식이 없나 찾아보고, 평이한 일상을 보내던 중 몇 일전 우연히 책한권을 읽다가 이런 생각이 들었습니다.

"외국 개발자들중에는 유명한 네임드 개발자들이 참 많아... 우리나라에도 개발쪽으로 매우 뛰어난 사람들이 있긴 있는데. "
라 생각하고 손 꼽으려 했는데, 당최 생각나는 사람이 없더군요.

사임당 워드 개발하신 강태진씨나 V3 개발자이신 안철수 연구소장님 정도 생각나네요.

아! 오해가 없으시길!!!!,  국내에 뛰어난 개발자가 없다는 의도로 쓴 내용은 아닙니다.
뛰어난 개발자들이 여러회사에 포진되어 있고, 밤잠 설쳐가면서 개발에 임하고 있다는 것도 알고 있습니다.

플랫폼 개발자라고 하면 사실 플랫폼은 혼자서 뚝딱 해서 만들어지는 것이 아닌바, 분명 세부모듈들에 대한 담당 개발자들이 따로 있고, 전체적인 아키택팅에 참여한 사람들도 있을것이며, 밑바닥 H/W 호환성과 튜닝, 그리고 소프트웨어 품질 테스트, 버젼 관리 등등 각각의 분야에서 다양한 많은 전문가들을 지칭하는 것일텐데,
지금 와서 보면, 이런 플랫폼을 개발했던 사람들이 대부분 , 외부 개발자 (플랫폼 이용자) 들과의 접촉이 거의 없고,  해당 모듈의 설계 컨셉이나, 향후 진행 방향 등에 대한 비전 공유나, 외부로 부터 받은 피드백에 대한 대응 계획 등에 대한 발언을 하지 않습니다.

이런 비전이나 발언들은 대부분 개발자가 하는게 아니라 회사 대표나 홍보팀 같은 단일화 된 창구를 통해서 이뤄지고,
플랫폼 개발자들을 통제하여 개발자가 발언한다는 것 자체가 거의 막혀있다고 봐야 합니다.

대한민국의 회사내에서의 개발자들의 위상이 낮기 때문에 어쩔수 없다고 해야 할까요.

또 개발자 개개인들도 자신이 작업한 내용을 발표하고 평가받고 비전을 제시하는 것에 대해 어색하고 미숙한 것도 일부 작용했으리라 보입니다.

원인이야 어찌 되었든지, 결국 제가 참여했던 오픈 플랫폼도 마찬가지라는 것입니다.
플랫폼을 개발하면서 정말 수많은 아이디어들을 내고, 개발하고 , 버그를 수정하고, 컨셉을 세우고 했지만, 개발자에게 남은것은 단지 소스만 남았습니다. 

나머지 외부에 우리가 새로운 플랫폼을 만들었다고 발표하는 것은 마케팅부서에서 , 새로운 플랫폼이 올라간 재품을 선전하는 것은 사장단이나 임원이, 디자인은 당연히 디자인팀이 하고, 개발자는 프로젝트가 끝난후 완전히 가려진다.

더군다나 개발자가 기술적인 부분에 대해서 자신의 노하우를 외부에 절대 공개할 수 없고, 심지어 피드백도 자유롭게 할 수가 없어집니다.

이를 생각하다보니, 블리자드의 블리컨즈 가 생각나더군요. - 개발자들과의 인터뷰.

그러면서 느끼는 것이 누군가 개발자들을 알리지 않으면 아무도 않 몰라주고 무덤에 묻히겠구나 라는 생각이 들더군요.

혹시, 이 글을 읽으신 개발자 분들 있다면, 

리플에 자신의 주변에 유능한 개발자분의 성함과 하시는 일을 적어주세요.
적어도 우리끼리라도 그사람들이 무슨일 하는지 알리자구요.!!!



반응형

가전기기,IT,Mobile 시장 어떻게 변해가는지 점치기가 점점 어려워지는군요.


S/W 기술력이 없는 제조 회사들은 고민없이 구글 TV로 올인 해도 되겠지만. 그렇지 못한 대형 회사들,
즉 자체 브랜드를 가지고 있고, 다른 회사들과 차별화를 가져가려는 회사들의 경우에는 심각한 고민을 하게 될것 같군요.


기존 안드로이드 OS로 TV S/W를 개발할 경우 안드로이드 마켓을 이용할 수 없고,
구글과 계약하자니, 종속적이 될것이고,
계약 한다 하더라도, 안드로이드 TV S/W 마켓도 이제 시작인데, 잘된다는 보장도 없고(이건 억지긴 하지만) 시작부터 종속적이 된다는 것도 좀 꺼림직 할것이고, 정말 보든 분야에서 본젹적인 S/W 전쟁이 시작되는 듯 하군요.

전초전을 보는 듯합니다.

향후 5년 뒤가 매우 기대되고 흥분됩니다.

실제로 H/W 기기에 대한 S/W 적인 인터페이스 정의들이 이뤄지고 이를 지원하기 위한 다양한 Framework 들이 나오고,
모든 가전기기, 정보기기 및, 심지어, Home, 자동차.. 등등도 S/W 로 조작이 가능한 시대가 오지 않을까?
합니다.





[기사 본문]

"구글TV 오픈플랫폼 아니다"‥ 삼성·LG '비상'
스마트폰 문제, 스마트TV로 튀나
박영례기자 young@inews24.com
삼성전자, LG전자 등이 구글TV 개발을 검토 중인 가운데 소니와 같은 구글TV를 개발하려면 구글과 별도 플랫폼 사용에 관한 계약을 맺어야 할 전망이다.

현재 구글은 인텔, 소니와 올 하반기 구글TV를 출시할 예정으로 현재 이에 맞는 TV플랫폼을 개발 중이다. 이는 오픈 플랫폼인 스마트폰과 같은 안드로이드 운용체계(OS)를 기반으로 하지만 구글이 TV용으로 별도 개발한 만큼 구글측과 협의 없이 무단 사용할 수 없다는 얘기다.

국내업체가 고전중인 스마트폰의 경쟁구도가 스마트TV까지 이어질 수 있어 주목된다.

18일 관련업계에 따르면 구글이 소니,인텔과 함께 올 하반기 '구글TV'를 출시할 예정인 가운데 구글TV 플랫폼은 스마트폰과 같은 오픈 플랫폼이 아닌 것으로 확인됐다.

구글이 별도 개발한 것으로 따로 사용계약을 해야 한다는 얘기다. 또 앱스토어 역시 안드로이드마켓만 허용한다.

구글코리아 관계자는 "구글 TV플랫폼은 안드로이드 OS를 기반으로 한 것은 맞지만 구글이 별도 개발한 만큼 오픈 플랫폼이 아니다"라며 "구글TV를 개발하려는 업체는 (라이선스 등과 같은) 계약을 맺어야 하고, 당연히 안드로이드 마켓만 허용한다"고 설명했다.

현재 스마트폰의 경우 지난 2007년 OHA (Open Hanset Alliance)가 안드로이드 OS를 공개하면서 누구나 모든 모바일 기기에 적용할 수 있는 개방형 플랫폼 형태를 띠고 있다.

OHA에는 단말기, 반도체, 통신서비스, 소프트웨어 개발 등 각 분야를 대표하는 총 65개의 회사들이 참여했다. 휴대폰 및 서비스 개발과 유통에 드는 비용을 절감하자는 취지에서 출발한 만큼 플랫폼도 개방형으로 가져갔다.

그러나 구글TV는 이들 연합체가 아닌 구글이 독자 개발한 안드로이드 OS 기반의 TV용 플랫폼을 사용하는 만큼, 개방형인 모바일 플랫폼과는 별개라는 뜻이다.

구글 플랫폼인 만큼 앱스토어 역시 안드로이드마켓만 허용한다. 삼성전자의 안드로이드폰인 갤럭시S가 안드로이드마켓은 물론 삼성앱스, T스토어등을 이용 할 수 있는 것과는 다르다.

◆삼성·LG전자 "고민되네"

구글의 TV플랫폼을 사용하지 않더라도 안드로이드 OS를 적용한 스마트 TV 개발도 가능한다. 실제 이미 안드로이드 OS 기반의 TV가 국내업체를 통해 개발된 상태다.

그러나 이는 안드로이드 OS를 이용한 '안드로이드 TV'로 구글플랫폼을 쓰는 '구글TV'와는 구분된다. 가장 큰 차이는 안드로이드마켓를 이용할 수 있느냐 없느냐의 문제다.

현재 구글은 안드로이드마켓 이용에 필요한 인증을 휴대폰에 집중하고 있는데다 자체 TV플랫폼을 가져가는 상황에서 다른 안드로이드 TV에 안드로이드마켓 이용을 허용할 지는 미지수다.

실제 국내업체가 개발한 안드로이드TV는 안드로이드 마켓을 이용할 수 없다. 해당업체가 별도 앱스토어를 만든 상태다.

반대로 구글TV는 안드로이드 마켓만 허용, 세트업체가 별도의 앱스토어를 가져가지 못한다는 문제가 있다.

이는 삼성전자와 LG전자가 스마트TV 시장을 겨냥, 이미 TV용 앱스토어를 선보였거나 선보일 예정인만큼 고민이 되는 대목.

더욱이 안드로이드 마켓만 가져가고, 플랫폼 사용에 라이선스 비용을 내면서까지 구글TV를 개발해야 하느냐는 내부에서 조차 의견이 분분한 상태.
자체 OS를 가져가거나 안드로이드 OS 기반으로 개발해 쓰자는 목소리가 힘을 얻는 분위기다.

실제 삼성전자는 구글TV 개발 대신 안드로이드 OS를 적용한 TV를 개발, 일단 호텔용 등으로 활용하는 방안을 검토하고 있다.

LG전자도 구글측과 만나 구글TV 개발을 협의했지만 이같은 이유로 난색을 표명했다는 후문. 대신 안드로이드 OS를 적용한 TV 개발을 검토 중이다.

삼성전자 관계자는 "스마트폰과 TV의 사용자환경 등이 다르다는 점 등을 감안할 때 구글TV 개발에는 내부에서도 시각차가 있다"고 설명했다.

LG전자 관계자는 "이미 자체 OS를 통해 인터넷TV를 선보인 만큼 구글TV가 아닌 이를 더 업그레이드해서 가져갈 수 도 있다“고 설명했다.

◆스마트폰 위기, 스마트TV 까지?

그러나 문제는 기존 인터넷TV OS로는 인터넷 사용도 위젯방식에 그쳐 구글TV와 경쟁에 한계가 있는데다 안드로이드 OS를 적용해 자체 개발하려면 적어도 1년에서 1년반 정도가 소요돼 시장진입이 늦어질 수 있다는 점.

가장 큰 문제는 안드로이드 마켓을 이용할 수 없다는 점이다. 애플도 TV 출시가 점쳐지고 있는 상황에서 막강한 앱스토어를 앞세운 애플은 물론 앱스토어를 적극 강화하고 있는 구글을 배제한 체 스마트TV 경쟁에서 우위를 가져가기는 쉽지 않을 것으로 보이는 때문이다.

자칫하면 스마트폰과 같은 시장 후발 진입, 애플리케이션 부족 등에 따른 문제가 스마트TV로 까지 이어질 수 있다. 스마트 TV, 휴대폰, 태블릿PC를 잇는 '3스크린 전략'을 감안하면 스마트TV는 결코 양보할 수 없는 시장이다.

그러나 구글 측 관계자는 "구글TV는사업 초기라 (플랫폼 사용에 따른) 구체적인 계약형태 등은 확정되지 않았다"며 "소니에 이어 많은 글로벌 업체들과 협력하기를 기대하고 있다"며 구글TV를 둘러싼 우려에 대한 확대해석을 경계했다.

반응형


바다폰(Wave) 리뷰중 가장 긴 리뷰인것 같습니다.
매우 자세하고, 그리고 능숙하게 설명을 하더군요.




반응형
system 내의 binary 호환성을 갖추기 위해서는 가장 먼저 고려해야 할 사항이 바로 ABI를 맞추는 것이다.
 
ABI 란? 
Application Binary Interface 의 약자로, 바이너리(binary), 즉 실행파일이나 라이브러리 간의 저수준(low level)의 인터페이스를 의미합니다.
호출형식이나 데이터 형식이 동일한 모듈들끼리만 모듈내의 함수 호출이나 데이터 사용이 가능해 지는 것이 당연하겠죠?
 
ABI를 결정하는 가장 큰 요소는 Compiler입니다. 
C++ Compiler의 경우, 각 compiler별로 name mangling 규칙이 다른데요.
이때문에 서로다른 compiler에서 만들어진 바이너리간의 호출이 불가능해질 수도 있게 됩니다.
                 name mangling 참조  
 
Compilervoid h(int)void h(int, char)void h(void)
Intel C++ 8.0 for Linux _Z1hi _Z1hic _Z1hv
HP aC++ A.05.55 IA-64
IAR EWARM C++
GCC 3.x and higher
Clang 1.x and higher[3]
GCC 2.9.x h__Fi h__Fic h__Fv
HP aC++ A.03.45 PA-RISC
Microsoft Visual C++ v6-v10 (mangling details) ?h@@YAXH@Z ?h@@YAXHD@Z ?h@@YAXXZ
Digital Mars C++
Borland C++ v3.1 @h$qi @h$qizc @h$qv
OpenVMS C++ v6.5 (ARM mode) H__XI H__XIC H__XV
OpenVMS C++ v6.5 (ANSI mode)   CXX$__7H__FIC26CDH77 CXX$__7H__FV2CB06E8
OpenVMS C++ X7.1 IA-64 CXX$_Z1HI2DSQ26A CXX$_Z1HIC2NP3LI4 CXX$_Z1HV0BCA19V
SunPro CC __1cBh6Fi_v_ __1cBh6Fic_v_ __1cBh6F_v_
Tru64 C++ v6.5 (ARM mode) h__Xi h__Xic h__Xv
Tru64 C++ v6.5 (ANSI mode) __7h__Fi __7h__Fic __7h__Fv
Watcom C++ 10.6 W?h$n(i)v W?h$n(ia)v W?h$n()v
 

 

ABI는 calling convention,  데이타 타입, 사이즈(size),argument , 등등에 대한 내용이 있습니다.

 

인텔의 경우 iBCS라는 인텔에서 정의한 표준을 정의 하고 있습니다.

 

 

 

 
 
EABI 란 ? 

Embedded ABI 

 

 

EABI( 임베디드 애플리케이션 바이너리 인터페이스 )는 임베디드 운영 체제 와 함께 사용하기 위한 파일 형식 , 데이터 유형, 레지스터 사용, 스택 프레임 구성 및 임베디드 소프트웨어 프로그램 의 기능 매개변수 전달에 대한 표준 규칙을 지정합니다 .

EABI를 지원하는 컴파일러는 다른 컴파일러에서 생성된 코드와 호환되는 개체 코드를 생성하므로 개발자는 한 컴파일러로 생성된 라이브러리를 다른 컴파일러로 생성된 개체 코드와 연결할 수 있습니다. 자체 어셈블리 언어 코드를 작성하는 개발자는 호환 컴파일러에서 생성된 어셈블리와 인터페이스할 수도 있습니다.

EABI는 임베디드 시스템의 제한된 리소스 내에서 성능을 최적화하도록 설계되었습니다. 따라서 EABI는 복잡한 운영 체제에서 커널과 사용자 코드 간에 이루어지는 대부분의 추상화를 생략합니다. 예를 들어, 더 작은 실행 파일과 더 빠른 로딩을 허용하기 위해 동적 연결을 피할 수 있으며, 고정된 레지스터 사용을 통해 더 컴팩트한 스택과 커널 호출을 허용하고, 권한 있는 모드에서 응용 프로그램을 실행하면 장치 드라이버를 호출하는 간접적인 작업 없이 사용자 지정 하드웨어 작업에 직접 액세스할 수 있습니다. EABI의 선택은 성능에 영향을 미칠 수 있습니다. 

널리 사용되는 EABI에는 PowerPC , Arm EABI   MIPS EABI 포함됩니다. C 라이브러리와 같은 특정 소프트웨어 구현은 보다 구체적인 ABI 형성하기 위해 추가적인 제한을 부과할 있습니다 가지 예는 ARM GNU OABI EABI이며 ARM EABI 하위 집합입니다.

 
 
Link: en.wikipedia.org
An embedded-application binary interface (EABI) specifies standard conventions for file formats, data types, register usage, stack frame organization, and function parameter passing of an embedded software program.
 
 
 
 
 
 
반응형

Framework 개발에서 조직과 관련된 part article에 재미있는 내용이 있어서 공유합니다.

 

 

Conways Law

- 여러분이 하나의 컴파일러를 만들기 위해 4개의 팀을 만든다면, 여러분은 4단계로 구분된 컴파일러를 얻게 될것이다.

 

이 내용이 무슨 예기인가 하면,

팀 구조가 소프트웨어의 구조가 된다는 것입니다. 따라서 당연히 팀을 구성한 후 요구사항을 분석한다면, 팀 구조에 맞춰 분석이 이뤄지기 때문에, 팀 구조 그대로 소프트웨어 구조가 나올 수 밖에 없다는 예기….

 

때문에 소프트웨어가 어떤 특성을 가지고 있는지 파악되기도 전에 소프트웨어의 큰 구조를 정해버리는 것과 같은 오류를 범한 것과 같다는 의미 입니다..

 

그래서 팀을 구성하기 이전, 프로젝트의 도메인 전문가나 구성원 전체가 모여, 프로세스를 정제한 후에 프로세스에 맞게 조직을 구성할 필요가 있다는 의미입니다.

 

 

[조직 구조에 따른 설계방법]

 

만약, 이미 조직이 구성되어있다면, 조직 구조와 문화를 이해해서 적합한 프레임워크를 구성해야 한다.

 

-       팀의 크기를 고려할 것

만약 프레임워크를 개발하는 팀은 작은 반면에 프레임워크를 사용하고자 하는 팀이 많다면 모든 팀의 요구사항을 들어주기는 거의 불가능하다그렇기 때문에 파레토의 법칙인 80/20 룰에 의거해서 프레임워크를 구성해야 된다. 프레임워크 사용자들이 가장 많이 활용하고 사용하는 부분들을 집중적으로 만들어야 한다.

반면 프레임워크를 구성하는 팀의 여유가 있어, 충분히 많은 기능을 설계할 수 있다면, 많은 요구사항들을 수렴할 수 있기 때문에 모듈간의 일관성을 유지하는데 초점을 두고 구축해야 한다.

일관성을 유지하기 위해서는 끊임없이 프로토타입을 만들고 Feedback을 받아 설계를 정제해야 한다.

 

-       조직의 문화를 고려해라.

만약 조직이 고객중심의 문화를 가지고 있는 화사라면, End-2-End 시나리오들을 먼저 추출한 후 시나리오를 잘 지원하기 위한 형태로 프레임워크를 설계해야 된다.

반면 기술을 중요하게 생각하는 하위 레벨의 회사라면, 기술의 변화를 쉽게 수용할 수 있게 확장성을 중요시 여겨 설계해야 한다.

 

-       조직의 의사 결정 메커니즘을 고려해라.

개별적인 맨 파워들을 중시하는 회사라면 대부분 Time to market을 잘 지원할 수 있어야 되므로 빠른 의사 결정이 지원하는 것에 중점을 두고 설계해야 한다. 또한 계층적인 조직구조를 가진 회사는 서로 간의 이질적인 의사 표현 방법을 통합하고 상호 운영하는데 초점을 맞추어야 할 것이다.

 

 

 

 

+ Recent posts