티스토리 툴바

블로그 이미지
소프트웨어 개발 경험을 공유하고 싶은 재밌게 사는 소프트웨어 엔지니어입니다^^

카테고리

Chungha Story (44)
Agile Experience (21)
My Family (4)
Life Style (8)
Programming (8)
Android (2)
Total25,694
Today5
Yesterday35
프로젝트 초반, 그리고 설계

상위설계(High Level Design)는 일반적으로 프로젝트 초반에 작성됩니다. 상위설계는 해당 프로젝트의 결과물의 근간이 되기 때문에 매우 중요하며 크게 변하는 경우는 드뭅니다. 어디까지나 상위설계이기 때문이죠. 뜬구름 잡는 얘기일 수도 있기 때문에 기술적으로 아주 세세하게 알지 못해도 작성할수 있는 경우가 있습니다. 하지만 상세설계(Low Level Design)에 접어들게 되면 구체적으로 많은 선택을 해야합니다. 골치 아프죠.
많은 경우에 어느 수준까지 작성해야 할지 갈피를 못잡고 방황하다가 적당히 보고 수준의 문서를 작성하고 구현에 들어갑니다. 결국 구현 따로 상세설계 따로인 결과물이 탄생하게 됩니다.

유지보수와 스파게티 코드 양산

유지보수중 스파게티 코드를 양산하게 되는 경우중 하나는 소스코드만 가지고 문제 해결을 할수 밖에 없는 경우 입니다. 아마 대부분의 경우가 이러할꺼라 생각됩니다. 근본적으로 문제를 해결하고 싶지만 근본적인 원인을 찾는데 도움이 될수 있는 큰 그림을 볼 수 있는 단서가 유지보수 단계에까지 남아있는 경우가 드물죠. 결국 기존 소스를 분석하다 지쳐서 땜빵코드를 삽입할수 밖에 없는 경지에 이릅니다. 제가 아는 대부분의 개발자는 땜빵코드를 삽입하는 것에 대해 부정적이지만 어쩔수 없이 하는 경우가 많습니다. 물론 저를 포함해서..


파일럿 프로젝트로 시작하는 '동작하는' 프로젝트

앞에서도 말씀드렸지만 상세설계를 어느 수준까지 작성해야할지 고민되는 경우가 많습니다. 저는 이를 해결하기 위해 프로젝트 초반에 파일럿 프로젝트를 진행합니다. 어떤 레퍼런스를 쓰던 일단 원하는 결과물을 얻기 위해 이것 저것 시도해보며 최종적으로 해당 기능들을 간신히 수행하는(하지만 있을건 다있는) '동작하는' 소스코드를 만들어 냅니다. 그리고 이것을 통해 프로젝트를 본격적으로 시작할때부터 '동작하는' 소스코드를 가지고 시작할 수 있게 합니다. 그리고 현재 수준에서 껍데기(Front-End) 바로 아래부분(Top)부터 추상화(Abstraction)을 통한 인터페이스 추출(Interface Extraction) 작업을 시작합니다. 추출된 인터페이스를 정리하면 매우 간단한(Class가 몇개 안되는) Class Diagram과 Sequence Diagram을 그릴수 있습니다. 이것이 상세설계서의 0.01 버전이 될수 있겠습니다. 이를 바탕으로 리팩토링을 하게 되면 인터페이스 추출이 완료된 상위 클래스를 제외하고는 나머지는 뚱땡이 클래스가 되어있겠죠. 이제 시작입니다.

Top-Down으로 진행되는 리팩토링, 그리고 지속적인 설계

리팩토링을 Top-Down으로 하게 되면 소스코드의 리팩토링 단위가 커지게 되므로 보통은 추천하지 않습니다. 하지만 설계는 Top-Down으로 할수록 깔끔해집니다.(제 의견입니다.) 가장 상위(Top)부터 시작하여 단계적으로 하위(Bottom)까지 진행되는 인터페이스 추출은 리팩토링을 지속적으로 하도록 유도합니다. 그리고 리팩토링된 소스코드는 항상 '동작하는' 상태여야 합니다. 그리고 결과물인 소스코드와 UML 문서는 최소 1명의 팀원과 리뷰를 합니다. 반복하다보면 뚱땡이 클래스들이 점점 분리되여 계층적인 클래스 구조를 만들게 될겁니다. 고럼 다음과 같은 프로세스가 만들어 집니다.


주기는 짧을 수록 좋다

저는 위의 주기를 하루에 최소 한번 할수 있도록 개발 계획을 수립합니다. (작은 마일스톤으로 쪼개는 방법은 다음에 써보도록 하겠습니다.) 그나마 주기가 짧아야 리팩토링 단위와 정리해야할 UML 문서의 단위가 작아집니다.

결과적으로 얻을 수 있는건..
  1. 항상 '동작하는' 소스코드
  2. 항상 정확하게 현재 소스코드를 큰 그림으로 파악(Static and Dynamic!)할 수 있는 딸랑 2종류의 UML Diagram
  3. 새로운 기능 넣기 전에 UML Diagram 으로 검토하는 습관...
  4. 바쁜 이슈처리 상황에서 근본적으로 문제해결을 할 수 있는 여유..
  5. 객체지향적 설계 능력?ㅡㅡ;;
그런데 결국은 뭐라도 해봐야..뭐가 다른지 압니다.

저작자 표시 비영리 동일 조건 변경 허락
Posted by sozu

Trackback | http://sozu.tistory.com/trackback/46 관련글 쓰기

  1. 2011/02/17 18:33

    Subject: 잘못된 설계와 빙산 클래스(Iceberg Classes)

    우연히 레거시코드 활용전략(Working effectively with legacy code)의 저자 마이클 C 페더스가 2005년에 쓴 글을 읽게됐습니다. 일부만 옮겨봤습니다. 잘못된 설계를 식별하는 방법에는 여러가지가 있다. 그중에서 늘 내가 강조하는 것은 public 메소드가 private 메소드보다 훨씬 적어야 한다는 원칙이다. 즉 클래스는 빙산과 같아야 한다. public 메소드가 한두개가 수면에 떠있다면 그 밑에 많은 private 메소드..

     삭제Tracked from 실용주의이야기(Pragmatic Story)

댓글을 달아 주세요

  1. 2011/02/16 10:49 k16wire  댓글주소  수정/삭제  댓글쓰기

    지속적인 설계라는 표현 맘에 드네요. ^^

지난주에 현업과는 관련이 없어 보이는 NHN에서 주관하는 개발자 컨퍼런스에 참석하였습니다.
업무에 직접적인 관련이 없다보니 영감이 늦게 밀려드는가 봅니다. 이제서야 회고를 해봅니다. (발표 내용에 대한 후기는 없답니다.ㅋ)

NHN은 어디로 가고 있나?

Deview가 끝나고 난 느낌은 "NHN은 이렇게 잘 하고 있구나" 정도였습니다. 솔직히 그 이상도 이하도 아니었습니다.
후기 경품이 탐이 났지만 딱히 쓸말이 없었습니다. 싸이트 가면 동영상이 모두 공개 되어있는데 후기를 쓰자니 거시기 했습니다.
그러던중 문득 이런 생각이 들었습니다. 왜 키노트 스피치를 좀 지루할 정도로 구구절절히 길게 하였을까? 
제가 추측한 이유는 NHN이 가고 있는 목표에 대해서 진심으로 구구절절히 공유하고 싶었기 때문입니다.
키노트 스피치가 끝난 후에 지인중 한분이 그러더군요. "그냥 애자일 한다고 하면 되지 않나?"
분명 NHN에서 하고 있는 활동들은 애자일스러웠습니다. 하지만 애자일이 NHN의 목표가 아니기 때문에 궂이 애자일을 한다고 할 필요가 없었던 것이라고 생각합니다.
이러한 관점으로 Deview의 강연들을 생각해보니 NHN이 가고자 하는 곳이 어디인지가 보이더군요.^^ 
그곳이 어디인지 제가 자세히 기술할수는 없지만 분명한건 NHN 내부 개발자만을 위한 천국은 아닐겁니다.

궂이 애자일 조직이라고 표현할 필요가 없다.

가끔 애자일을 짝 프로그래밍이나 테스트 주도개발, 스크럼등의 Best Practice로 여기시는 분들이 많습니다.
혹은 갓 입사한 회사나 팀에서 애자일을 모른다고, 애자일 팀이 아니라고 실망하는 신입 개발자분들도 있습니다.
수단과 목표가 약간 혼동되는 부분이라고 생각합니다. 애자일도 목표는 아니라고 생각합니다.
꼭 개발조직에 애자일이나 RUP, Waterfall, CMMI 등의 정체성이 명시적으로 존재해야 할까요? 그런건 정치판에서도 지겨운데...
우리가 원하는건 애자일 조직이 아니라 행복하게 개발할 수 있는 매우 효율적인 개발 조직일겁니다. (정확히 말하면 제가 원하는 것입니다^^)
물론 조직에 맞는 애자일스런 Practice를 만들어나가면 좀더 빠르게 그런 조직을 만들수 있을것입니다.
제가 말하고 싶은건 뭘 하면 애자일이고 안하면 애자일이 아니다 이런게 중요한게 아니다라는 것입니다.^^;;
개인적으로 '애자일'이란 표현보다 '실용적인'이란 표현이 더 좋습니다.ㅋ
이런 점에서 NHN의 발표에서 '애자일'이란 용어를 쓰지 않은 것은 현명한 선택이었다고 생각합니다.

기대되는 NHN의 행보

얼마전까지만 해도 NHN은 뒤뚱거리는 거대한 한국의 포털 기업으로만 생각했었습니다. 개발에 열정을 가졌던 친구가 NHN의 신입사원으로 입사한 후에 개발의 열정이 식어버린... 그냥 포털 대기업으로만 생각했었습니다.
하지만 Deview를 보면서 생각이 조금 바뀌었습니다. 열악한 한국의 개발 환경을 불평, 불만만 하는 사람들이 변화될 수 있도록 기여하는 기업이 되고 있다고 생각합니다. (우리 회사도 그런 기업이 될겁니다!^^)

스스로 바뀌어야 환경도 바뀝니다.^^

이상 짧은 회고였습니다;... 회고라기 보다는 주저리주저리 떠든;;ㅋ



NHN Deview 2010 동영상 다시 보기 및 자료 : http://deview.naver.com/2010/courses.nhn
저작자 표시 비영리 동일 조건 변경 허락
Posted by sozu

Trackback | http://sozu.tistory.com/trackback/45 관련글 쓰기

댓글을 달아 주세요

  1. 2010/12/13 11:32 ryuhayoung  댓글주소  수정/삭제  댓글쓰기

    청하 안녕~ ㅎㅎㅎ

  2. 2011/02/16 17:01 arload  댓글주소  수정/삭제  댓글쓰기

    모든 일원이 만족하면서, 개선해 나가고 있따. 나아지고 있다는 느낌. 성장하고 있다는 느낌을 주기는 정말 어려운거 같아요.
    이러한 시도는 정말 감탄할만 하죠. 애자일이 만능이 아니라. 조직도 만족하고, 조직 구성원도 만족하는 것.. 그게 정말 이상인거 같습니다. 다른이의 이상과 저희들의 이상은 다르니깐요.. :)

  3. 2011/02/18 20:21 sozu  댓글주소  수정/삭제  댓글쓰기

    스스로의 자세를 바꾸면 그 다른 이상들이 하나로 모여질수 있다고 생각해요^^

  4. 2011/11/24 21:44 뇨릉  댓글주소  수정/삭제  댓글쓰기

    "행복하게 개발할 수 있는 매우 효율적인 조직".. 저도 그런 조직을 꿈꾸는 1인입니다...^^;
    하지만 노력하는 만큼 잘 안되서 요즘은 지처가고 있는 중이랍니다...
    사람들의 마인드를 바꾸기가 쉽지 않더군요.. 제가 괜히 엄한데와서 하소연하는군요 >.<

    • 2011/11/25 15:51 sozu  댓글주소  수정/삭제

      반갑습니다! 윤청하입니다.^^
      저도 한때 지쳐있었는데, 요즘은 200%이상 활력소를 찾았습니다.
      제 경우엔 남을 보다가 제 자신에게 포커스를 바꿔보니 즐거워지고 생산성도 매우 높아졌습니다.
      그렇게 지내다 보면 남들이 호기심을 갖게 되더라구요. 어떻게 하면 저렇게 즐겁게 하나...
      이제 시작인거죠!

      고민은 나눌수록 잘 풀리는거 같습니다. 잘부탁드려요~

얼마전에 "창의적인 아이디어는 어디에서 오는가?" 라는 주제로 강연을 들은적이 있습니다.
강연자분의 결론은 다음과 같았습니다.
창의적인 아이디어는 새로운 것이 아니라 기존에 있던 것을 새롭게 보는 것이다.
창의적인 아이디어를 얻기 위해서는 내가 보고 경험한 것들을 새롭게 볼줄 알아야 하며, 
다른 사람의 말과 행동을 새롭게 볼줄 알아야 한다.
강연을 듣고 저는 다음과 같은 생각을 했습니다. 
항상 주위의 모든것에 호기심을 갖고 관찰하여 필요한 경우 내것으로 만들수 있어야 창조적인 인재가 될수 있다
결국 매우 상투적인(cliche) 결론이었습니다. 하지만 다시 생각해보니 개발자들에게 매우 필요한 능력일것 같다는 생각을 했습니다.

창의적인 개발자는 어떤 능력이 필요한가?

저는 다른 개발자들이 만들어 놓은 결과물을 분석하고 이해할줄 알며, 가져다 사용할 수도 있고 필요한 경우 개선될 수 있도록 기여할 수 있는 개발자가 창의적인 개발자라고 생각합니다.  혼자 모든 것을 만들어 내는 것 보다는 다수의 사람이 같이 만들어 내는 것이 더 창의적인 결과물이 될수 있기 때문입니다.
세계적인 오픈소스에 기여하지 않더라도 같은 회사내, 같은 연구소내, 같은 팀내의 다른 개발자들의 결과물들이 같이 공유하며 개선되고 성장 할 수 있다면 그 조직은 창의적인 개발 조직이라고 할수 있을 것입니다.
이러한 것들이 가능하려면 조직 내에 소스코드 오픈 문화, 개발자간의 신뢰 문화등이 밑바닥에 깔려 있어야 할 것입니다.
어렵지만 할 수 있지 않을까요? 전 애자일이 창조적인 조직을 위한 은탄환이라고 생각하지 않습니다. 
하지만 시도해볼만한 것임은 확실하다고 생각합니다.^^

Two Heads Are Better Than One.
저작자 표시 비영리 동일 조건 변경 허락
Posted by sozu

Trackback | http://sozu.tistory.com/trackback/44 관련글 쓰기

댓글을 달아 주세요

  1. 2010/09/13 09:43 noforest  댓글주소  수정/삭제  댓글쓰기

    공감~

  2. 2011/02/25 10:36 이장석  댓글주소  수정/삭제  댓글쓰기

    글 잘 보았습니다.
    좋은 하루 되십시오.

현재 제가 속한 팀은 아직 애자일 프랙티스를 전파하기에는 이른 시기입니다. 
고민 끝에 (사실 실제 고민은 몇초?;) 점진적 설계와 구현을 해보는것은 어떻겠냐고 같이 일하시는 윗분께 건의했습니다.
길지않은 토론 끝에 UML로 설계를 하고 이터레이션은 고정시키지 않는다는 전제하에 점진적 설계와 구현을 해보기로 했습니다.
제가 정한 한 이터레이션에서 해야할 일들은 다음과 같았습니다.
  1. 해당 이터레이션에서의 요구사항을 Use-case Diagram으로 작성 및 리뷰 (mandatory)
  2. Activity Diagram 및 Collaboration Diagram은 개인적으로 작성 (optional)
  3. 섬광탄 구현 (optional)
  4. Class Diagram 및 Sequence Diagram 작성 및 리뷰 (mandatory)
  5. 설계에 맞게 구현 (mandatory)
  6. 구현에 대한 짧은 회고 및 피드백으로 설계 수정후 구현 수정 - 반복 (mandatory)
  7. 데모 후 다음 이터레이션 (mandatory)

결과물은?
  • 프로젝트 기한 : 예상보다 1주일 정도 먼저 끝났음
  • 결과 바이너리 데모 : 원했던 기능 완료, 어느정도 안정화 됨
  • 설계 문서 : Use-case Diagram 1장, Class Diagram 3장, Sequence Diagram 3장 - 소스코드와 99% 일치

회고
  • 기존의 관행을 깨보았음 (사실 작은 프로젝트라 큰 의미는 없음)
  • UML 설계를 통한 설계 리뷰 및 공유는 정말 괜찮았음
  • 이터레이션을 고정시키는 것에 대해서 반감이 있는 경우에는 살짝 빼도 무리가 없어보임
  • 기존의 관행과의 협상에서 줄건 주고 얻어올건 얻어와야 함 (이렇게 안하면 애자일이 아니다 라는 고정관념을 버려야함
  • 섬광탄 구현이 UML 설계에 많은 도움이 되었음

결론 : 
나는야 행복한 개발자~
저작자 표시 비영리 동일 조건 변경 허락
Posted by sozu

Trackback | http://sozu.tistory.com/trackback/43 관련글 쓰기

댓글을 달아 주세요

쉬워 보이는 스크럼

작은 개발팀의 생산성과 품질에 대해서 고민해 본적이 있으신 분들이 스크럼에 대한 이야기를 들으면 적지 않은 분들이 상당한 영감을 받습니다. 그리고 바로 팀에 적용 할 수 있을 것 같은 뽐뿌를 받곤 하죠. 그중에 저도 포함되구요.
하지만 데일리 미팅이 그나마 만만할 뿐 프로덕트 백로그, 스프린트 미팅이나 회고, 백로그 추정등은 그렇게 녹록하지 않았습니다.

베스트 프랙티스 도입보다 더 중요한건 애자일 팀 만들기

스크럼의 구성요소들을 하나하나 뜯어보면 애자일 정신이 가득한 프랙티스들이 주류를 이룹니다.
즉, 애자일 개발팀이 아닌 팀에서 스크럼을 도입하려다 보면 데일리 미팅 정도야 하겠지만, 하나하나 적용시키다 보면 난관에 부딪힐때가 많습니다. 더 중요한것은 이러한 난관에 부딪힐때 해당 고민들을 팀원들과 풀려고 하는 것이 아니라 외부 모임(자신만의 세계, 개발자 친구나 개발자 포럼등)에서 풀려고 하는 것이죠. 즉, 적용하려는 리더 조차 애자일스럽지 못한 것입니다.

제 생각에는 갑작스럽게 스크럼을 바로 도입하는 것보다 애자일 개발팀이 되기 위해 하나씩 바꿔나가는 것이 좋다고 생각합니다.
애자일 개발팀으로써 살짝 자리를 잡은 뒤에 스크럼을 도입해보면 더욱 효과적일것 같습니다.
아래의 프로세스들이 팀에 살짝  정착되고 나서 스크럼을 도입한다면 더욱 효과적일것 같습니다.
  • 지속적인 피드백을 주고 받는 설계와 구현
  • 사용자 스토리를 이용한 요구사항 정리 
  • 업무 추정을 담당자에게 위임 
  • 빌드 자동화 / 일일 빌드 
저작자 표시 비영리 동일 조건 변경 허락
Posted by sozu

Trackback | http://sozu.tistory.com/trackback/41 관련글 쓰기

댓글을 달아 주세요

  1. 2010/08/19 11:45 k16wire  댓글주소  수정/삭제  댓글쓰기

    헨릭의 Scrum & XP 책의 앞에보면 회고부터 시작하라고 이야기 합니다. 저도 동의합니다. 회고를 통해 먼저 무엇인 좋고 나쁜지를 찾아보시는것도 좋은 방법일듯..

    • 2010/08/19 12:14 sozu  댓글주소  수정/삭제

      정말 중요한 것을 빼먹었네요^^;; 팀원들과 회고를 통해 접근하는 것! 정말 중요합니다~ 감사해요~^^

오늘 가산에 있는 LG전자 MC연구소에서 Agile Gathering이라는 제목으로 세미나가 있었습니다. 
여차저차 허락을 받고 점심도 안먹고 가산으로 넘어갔습니다. 

리더쉽은 자신이 선택하는 것

첫번째 시간은 애자일 컨설팅의 김창준 대표님이 애자일 적용(혹은 반대)를 위한 조직에서의 리더쉽에 대한 내용으로 워크샾을 진행하셨습니다. 워크샾은 시뮬레이션 형태로 진행되었습니다. 참석자들중 몇분은 관찰자의 역할을 맡고 나머지는 한 회사의 구성원(사장,이사,팀장,사원)이 되어 시장(market)의 요구사항에 맞는 시제품을 개발하는 것이었습니다. 처음에는 어색했지만 나중에는 완전히 몰입해서 정말 제품을 만들어야 한다는 중압감이 생겼습니다+_+! 
약 1시간 넘게 시뮬레이션을 진행한뒤에 피쉬보울 방법으로 회고를 진행하였습니다. 그중에서 가장 인상에 남았던 것은 김대표님이 말씀해주신 매니저와 리더의 다른점, 리더쉽의 본질, 리더쉽의 4가지 유형이었습니다.
매니저는 조직에서 정할 수 있지만 리더는 정해줄 수 없다. 리더는 지휘 여하를 막론(경영진에서 신입사원에 이르기까지)하고 누구나 될 수 있다. 단지 우리는 리더가 되는 것(혹은 리더쉽을 발휘하는 것)을 선택하는 것이다. 단지 안할뿐..
리더쉽은 모든 사람이 창의적으로 문제해결에 기여할 수 있게 환경을 개선하는 것이다. 이에는 4개지 유형이 있다.
motivation leadership, organization leadership, innovation-idea leadership, jig leadership...
애자일에 관심있다고 하는 사람들이 모여서 회사 제품 개발 시뮬레이션을 해도 잘 안되기는 마찬가지였습니다.
중요한건 자신이 현재 상황에서 리더쉽을 발휘할 것인지 아닌지를 선택하는 것입니다.
(다들 가만히 있는데 먼저 나서서 행동을 취하는 것도 리더쉽 입니다. (jig leadership))

짝프로그래밍, 잘하면 고효율~ 못하면 가문의 역적

두번째 시간은 LG CNS의 채수원 과장님이 짝프로그래밍에 대해서 발표해주셨습니다. driver-navigator 라는 패턴을 이용하여 짝프로그래밍 도입하는 것에 대해서 말씀해 주셨습니다. 물론 짝프로그래밍의 장단점, 사례도 말씀해 주셨습니다.
개인적으로 짝프로그래밍을 좋아하지만 사용가능한 분야 혹은 짝이 한정되어있다고 생각합니다. 
정말 필요한 경우에, 고효율이 예상되는 경우에만 사용하는 것이 바람직하다고 생각합니다.

스크럼 vs 칸반

세번째 시간은 LG전자의 MC연구소에 계시는 분이(이름이 기억..안..나..요;;..ㅠㅠ) 스크럼과 칸반에 대해서 아주 이해하기 쉽게 설명해 주셨습니다. 칸반은 아주 심플하게 다음의 3가지를 만족하면 됩니다.
  • Visual Card : 비쥬얼은 필수!
  • Limit Work-In-Progress : 한 스텝에서 동시에 진행될 수 있는 백로그를 제한
  • Measure Lead-time : 지속적으로 리드타임을 측정하여 최소가 될수 있도록 함
특히 칸반은 수시로 인터럽트(QA, 유지보수등)가 발생하는 개발팀에서 유용하게 사용되어 어질수 있다고 생각했습니다. 
즉, 스크럼과 칸반을 개발팀의 업무 특성에 따라 적절히 조합해서 사용한다면 좋을 것 같습니다.

회고

회고에 참석하지 못했습니다.ㅠㅠ 반성중.. 
김창준님이 진행하신 시뮬레이션에 대해서 좀더 자세한 설명이 있었으면 했습니다. (왜 손을 잡는지, 감옥의 역할은 무엇인지 등..)
색다른 경험이었고 즐거웠습니다. 근데 뭘 했다고 이렇게 졸립죠...ㅠㅠ;;
저작자 표시 비영리 동일 조건 변경 허락
Posted by sozu

Trackback | http://sozu.tistory.com/trackback/39 관련글 쓰기

댓글을 달아 주세요

  1. 2010/07/08 06:46 k16wire  댓글주소  수정/삭제  댓글쓰기

    감옥은 게임내 규칙을 위반해서 였던것 같습니다. 게임중 서기외에는 쓰면 안되는데 썼기 때문에..xper에서 했던 게임 기준입니다.

    • 2010/07/08 09:07 sozu  댓글주소  수정/삭제

      예 맞습니다^^ 이번에는 링크(손잡기)가 끊어진 상태에서 말을 했을 경우에 감옥에 갔습니다.
      궁금했던것은 이러한 룰이 있는 이유가 궁금했습니다~^^ 감사합니다~

  2. 2010/07/09 13:02 한주영  댓글주소  수정/삭제  댓글쓰기

    안녕하세요, Agile Gathering 에 참석하셨었네요.(wiki링크보고 따라왔습니다) 저는 아내 출산 때문에 참석하지 못해서 아쉬워요 ㅠ.ㅠ 블로그를 살펴보니 Agile에 관심이 많으신 것 같습니다. 앞으로는 좀더 작은 규모의 모임을 더 자주 가지는 쪽으로 진행했으면 하는데 앞으로 자주 뵐수 있으면 좋겠습니다 :)

    • 2010/07/12 13:09 sozu  댓글주소  수정/삭제

      반갑습니다^^ 이제 겨우 애자일에 대해 느낌을 갖게 되었습니다~
      아직 신규사원이라 매번은 힘들겠지만 항상 관심 갖도록 하겠습니다~^^

새로운 개발팀

이전 개발팀에서 이메일을 이용한 코드리뷰를 시행한 적이 있습니다. (2010/02/26 - [Programming] - 이메일로 코드 리뷰 하기)
혹시나 해서 요즘에도 잘 되고 있나 여쭤보았지만 아직은 형식적인 단계라는 답변을 들었습니다.
이직을 하고 나서 저는 변화된 환경에 적응하기 위해 애자일 프랙티스를 언급하거나 제안하지 않았습니다. 
단지, 이전 업무에 대한 소개를 할 때 개발 프로세스 개선 활동에 대해 짧게 소개만 했습니다. 
(다행히도 입사 4개월 만에 애자일에 관심을 보이시는 관리자 분이 계십니다!^^~~ 이번에 애자일 세미나를 같이 들으러 감~)

프로세스에 녹아든 코드리뷰

경력으로 입사하였기에 빠르게 프로젝트에 투입되었습니다. 현재 개발팀의 소스코드는 svn으로 관리됩니다. (git로 넘어가는 추세..)
그런데 특이했던 점이, 자신의 home directory에 check-out된 소스에서 직접 작업하지 않고 export된 다른 복사본(working source)에서 작업을 하는 것이었습니다. 즉, commit과 update 절차는 다음과 같이 진행되었습니다.
  • commit 절차 : 복사본에서 작업 => svn 소스와 diff를 통한 merge => svn commit
  • update 절차 : svn update => 복사본 소스와 diff를 통한 merge => 복사본에서 검증
즉, 개인 작업물에 대해서 철저하게 분리하는 형태 입니다. 어찌보면 번거로워 보일수 있는 소스관리 프로세스 였습니다.
그런데, 작업이 진행되면 될수록 소스코드가 잘 정리되었으며, 믿음직하고 든든해 졌습니다. 
그것은 merge 과정에서 자신의 코드와 타인의 코드에 대해서 source code inspection이 암시적으로 행해졌기 때문입니다.
복사본에서 작업하기 때문에 개인용 테스트 로그가 svn 소스 트리에 등록되지 않은 것도 한 몫 했습니다.

프로세스(혹은 도구) 개선이 정답?

김창준님이 한국 developerWorks의 dW Column에 기고하신 "소프트웨어 관리자의 개선 우선순위"라는 글을 보면 다음과 같은 재미있는 연구 결과를볼 수 있습니다.

쉽게 말해, 도구 부분에서 상당한 개선을 이뤄내면 비용적으로 세 배 정도 개선을 얻을 수 있다. 이에 비해 관리 부분에서 상당한 개선을 이뤄내면 비용적으로 64배 정도의 개선을 얻을 수 있다는 뜻이다.

관리자들이 선호하는 개선 노력은 어떤 순서일까? 정확히 역순이다. 일단 도구 개선부터 시작한다. 자기 자신(관리)을 바꾸는 것은 맨 나중이다. 그러나 실제 효과로 보면 우선순위는 관리가 맨 처음에 온다


제 경험을 보면 마치 프로세스(혹은 도구) 덕분에 큰 효과를 본것 처럼 보입니다. 하지만 근본적인 원인은 따로 있었습니다.

내 코드가 아닌 우리 팀의 코드

개발과정에서 개발팀의 관리자 분(개발에도 참여하심)과 개발 리더분은 지속적으로 소스코드를 리뷰하고 있었습니다.
라인단위로 의미없거나 논리적이지 못한 코드가 있다면 명확하게 해명을 해야 svn 소스 트리에 남을수 있었습니다.
로직이 불분명하다면 버그가 생길만한 케이스를 분석하거나 테스트 케이스를 만들어서 알려주십니다.
우리에게 누가 문제를 해결했고 누구의 소스에서 버그가 있었다는 것은 중요하지 않았습니다.
중요한건 우리 팀의 코드가 품질이 높아야 한다는 것이지요. (물론 납기일을 만족하면서...)
코드리뷰는 진짜로 해야 효과가 있는 것 같습니다.
저작자 표시 비영리 동일 조건 변경 허락
Posted by sozu

Trackback | http://sozu.tistory.com/trackback/38 관련글 쓰기

댓글을 달아 주세요

  1. 2010/07/05 22:35 Eminency  댓글주소  수정/삭제  댓글쓰기

    완전히 git를 쓰면 굳이 SCM과 분리된 working copy에서 작업하지 않아도 될 거 같은데?
    그나저나 git라니 꽤 진보적이구만 ^^; git보단 mercurial이 훨씬 편한 거 같긴 하다만..;

  2. 2010/07/30 17:15 뇨릉  댓글주소  수정/삭제  댓글쓰기

    정말 동감가는 글입니다.^^;
    전 SVN에 커밋하기전에 코드리뷰를 해주고 싶은데 받아줄 사람이 없군요 ㅠ.ㅠ
    요즘 애자일,TDD에 관심이 많이 생기고 있는데 저와 관심분야가 비슷하신것같아요.
    자주 놀러오겠습니다^^;

    • 2010/08/01 22:29 sozu  댓글주소  수정/삭제

      없다고 포기 하지 마시고 최소 한명이라도 자기 편을 만드시면 좋을 것 같아요^^
      자주 놀러오세요~~ 같이 나누면 나눌수록 좋은 수가 생기기 마련입니다.

3월 11일 늦은 8시에 강남 토즈에서 xper 주체로 Rebecca Wirfs-Brock 방한 기념 번개 모임이 있었습니다.
급하게 마련된 번개 모임에도 불구하고 30여명에 가까운 분들이 참석해주신 멋진 자리였습니다.
김창준님이 질문 및 답변에 대한 통역을 해주셨는데, 시간 관계상 필요에 의한 나름 인터렉티브한 통역을 하였습니다.
나름 열심히 정리했는데, 정리한 종이가 어디갔는지 안보이네요;; 좌절OTL
그래서 인상 깊었던것 두가지만 가지고 개인적인 소감을 정리해보겠습니다.

패턴과 프랑켄슈타인

사실 이 말은 김창준님이 크리스토퍼 알렉산더를 소개할때 짧게 언급하신 내용입니다.
패턴의 창시자라 불리우는 크리스토퍼 알렉산더가 최근 패턴을 관통할 수 있는 새로운 내용을 정리했다고 합니다.
이유인 즉슨, 패턴의 한계 때문이었습니다. 즉, 패턴을 중심으로 설계를 하다보니 프랑켄슈타인을 만들게 되었다는 것이죠.
짧게 지나친 내용이지만 개인적으로 프랑켄슈타인이란 비유가 인상깊었습니다. 
저는 패턴에 대해 많이 학습하지 못했지만, 패턴에서 커뮤니케이션 도구(어떠한 행동, 구조 등에 대해서 적절한 이름을 붙여놓은 것) 이상의 그 무언가를 발견하지는 못했었습니다.
즉, 패턴은 도구일 뿐 목적이 될 수 없다는 것을 같이 공감한것 같아서 기분이 좋았습니다.

크리스토퍼 알렉산더

이번에 처음 들은 이름입니다. 패턴의 창시자이자 그것의 한계를 지적하신 분입니다. 
그리고 Nature of Order 라는 새로운 것을 또 만드셨습니다. 패턴을 관통하는 것이라고 하셨는데 아직 이해 불가합니다ㅠㅠ
모임 시간에 언급된 내용들에 대한 정리는 김창준님이 깔끔하게 해주셔서 패스합니다.ㅋㅋ (모임 후기 링크)
두가지 내용이 언급되었었습니다. alternative repetition 과 level of scale 이었습니다.
불행히도 전 정확한 정의를 모릅니다. (이제 슬슬 Nature of Order 책을 사 봐야겠다는 생각이 드네요.) 
따라서 개인적인 소감만 쓰겠습니다^^

Alternative Repetition

저는 alternative repetition을 "조금씩 다른 형태를 지속적으로 반복하는 것"이라고 이해했습니다.
즉, 아키텍쳐를 설계시 추상화 설계와 구현 설계를 지속적으로 반복해야 좋은 결과물을 얻을 수 있을 것 같습니다.
전문가일 수록 반복 주기가 짧고 반복의 깊음와 얕음이 지속적으로 변할 겁니다.
사실 이 부분이 설계에서 가장 어려운 부분이 아닐까 싶네요. 
어디까지 구체적으로 해야 하는지 어느 정도 수준으로 추상화가 되어야 하는지.. 정말 어려운 선택인것 같습니다.
또한 정답이 없기 때문에 검증하기는 더더욱 어려운 것 같습니다.
레베카가 한국에 온 이유가 L모 전자 설계 교육때문에 왔다고 하는데, 설계에 대한 구체적인 교육이었다고 합니다.
정말 부러웠습니다. 전문가를 옆에 두고 실습을 하면서 맞는지 틀리는지 물어볼 수 있으니까요..^^

스크럼의 스프린트나 업무를 위한 학습을 하는 것도 비슷한 맥락에서 생각해 볼수 있지 않을까요?^^ 
Nature of Order같은 책은 정독하는데 시간도 오래걸릴 뿐만 아니라 실무에서 바로 적용하기도 어렵습니다.
반대로 안드로이드 프로그래밍같은 책은 읽는데 시간도 별로 안걸리고 실무에서 바로 적용할 수 있습니다.
학습을 하는 태도가 한쪽으로 치우친다면 초보자라 할 수 있겠습니다. 
분야를 막론하고 지속적으로 반복해야 전문가가 될 수 있을겁니다. (전 아직 초보ㅋㅋ)

골고루 먹자

결론이 좀 쌩뚱 맞습니다. 이해해 주시길 바랍니다^^;;
xper 모임을 많이 나오지는 않았지만 항상 보고 듣고 있었습니다. 이젠 좀더 구체적인 부분에서 학습을 공유하고 싶어졌습니다.
그래서 이번 주 부터 시작하기로 했습니다. 목표는 안드로이드 정복!ㅋㅋ (오래 준비했습니다~)
당연히 xper 모임도 충실히 참석할 겁니다^^

전 친구랑 한잔하러 끝나고 바로가서 못찍었습니다;;

레베카 옆에 앉아서 졸면서 적고 있는 청하^^

사진 찍어주신 최승준님께 감사드립니다^^
저작자 표시 비영리 동일 조건 변경 허락
Posted by sozu

Trackback | http://sozu.tistory.com/trackback/34 관련글 쓰기

댓글을 달아 주세요

  1. 2010/03/18 13:42 황상철  댓글주소  수정/삭제  댓글쓰기

    아 참석 못했던게 참 아쉽네요.

  2. 2010/03/18 14:19 ohgyun  댓글주소  수정/삭제  댓글쓰기

    저도 그 책을 읽어보려고요.
    혼자 사려고 알아보니 배송비가 책 값보다 더 많이 나오더라고요. >_<
    제본을 맡겨볼까 하고 있답니다^^

    • 2010/03/18 18:55 sozu  댓글주소  수정/삭제

      오옷! 나중에 읽고 나서 서로의 소감등등을 나누는 시간을 가져보는건 어떨까요?!^^

  3. 2010/03/19 09:51 ohgyun  댓글주소  수정/삭제  댓글쓰기

    ㅇㅇ 좋지요^^ 혹시 책 구입하기 힘드시면 말씀하세요~ 제본이 가능하면 한 권 같이 해드릴께요~ :)

  4. 2010/03/21 11:58 PatternLoader  댓글주소  수정/삭제  댓글쓰기

    맞습니다. 패턴을 억지로 이용한 시스템을 쓸려다가, 망치는 경우가 흔합니다. Context와 SideEffect를 잘 고려해서 써야 하죠. 전 예전에 소프트웨어 설계 패턴을 많이 봤는데. 요즘은 사람에 관련된 패턴을 많이 보게 되네요.. :)
    이것도 마찬가지겠죠 :)

    • 2010/03/21 21:58 sozu  댓글주소  수정/삭제

      상황과 환경에 따라 잘 써야 하죠!^^ 스터디에는 참가하지 못하지만 영수님께서 정리를 너무 잘해놓으셔서..좋은 내용들을 쉽게 알수 있었습니다~
      감사합니다!

cooperation vs. collaboration

오늘 회사에서 신규 입사자에 대한 연구소장님 간담회가 있었습니다. 신규 입사자들을 모아놓고 1시간 30분 가량 강연을 하셨습니다.
강연중 cooperation과 collaboration의 구분을 명확히 하셨고 우리는 collaboration을 잘 해야 한다고 강조하셨습니다.
사실 cooperation과 collaboration은 사전적인 의미는 대충 비슷합니다.
피자 vs 파전

저는 cooperation과 collaboration을 피자와 파전에 비유해볼까 합니다.
cooperation은 피자와 비슷합니다. 큰 원형 조각을 미리 정확하게 조각내어 놓습니다. 크기를 동일하게 하려고 해보지만 크기가 제각각입니다. 그리고 보통 시키기 전에 먹을 인원 및 개인의 취향을 고려하여 미리 모두 주문합니다. 그리고 각자 할당된 조각 만큼을 먹습니다
collaboration은 파전과 비슷합니다. 일단 시켜봅니다. 그리고 각자 알아서 먹고 싶은 만큼 조각내서 먹습니다. 젓가락으로 잘 안떼어질때는 서로 도와주기도 합니다. 먹다가 맛있으면 더 시켜서 먹습니다.
팀에서 공동작업을 할때 어떻게 하십니까? 
일만 나눠놓고 서로 독립적으로 작업하십니까? 전체 작업을 시시각각 때에 맞춰 공동작업 하십니까?
cooperation을 하십니까? 아니면 collaboration을 하십니까?
전 경험이 짧지만 제가 경험했던 리더 분들은 대부분 cooperation을 주로 사용하셨습니다. 관리하기 편하기 때문이죠. 
그리고 동료분들도 독립적인 작업을 좋아하셨습니다. 일하기 편하기 때문이죠.
하지만 고객을 만족시키는 소프트웨어 개발을 위해서는 collaboration을 통한 짧은 주기의 피드백은 반드시 필요합니다.

짝 프로그래밍과 협업

XP에서 제안하는 베스트 프랙티스 중에 하나인 짝 프로그래밍은 cooperation과 collaboration의 밸런스를 맞춰주는것 같습니다.
십여명의 팀원이 모두 collaboration을 한다면 결정 시간 지연, 배가 산으로 가는 현상 등등의 부작용이 있을수 있습니다.
cooperation을 하되 그 단위를 짝(pair, 2명)으로 함으로써 collaboration이 가질 수 있는 장점을 높일 수 있습니다.
2명이서 진행하는 collaboration은 오버헤드가 적고 신속한 피드백으로 좋은 품질의 코드를 유지할 수 있습니다.
그래서 저는 짝 프로그래밍을 강추합니다.^^
저작자 표시 비영리 동일 조건 변경 허락
Posted by sozu

Trackback | http://sozu.tistory.com/trackback/33 관련글 쓰기

댓글을 달아 주세요

  1. 2010/03/14 19:21 k16wire  댓글주소  수정/삭제  댓글쓰기

    좋은 분위기에서는 collaboration이 좋겠지만 나쁜 상황에서는 cooperation이 나을수도 있을거 같습니다. ^^

  2. 2010/03/16 11:23 YUZI  댓글주소  수정/삭제  댓글쓰기

    청하씨. 옮겨가서 즐거워 보이네요.
    좋아좋아. 직장 적응 끝나면 술이나 한잔 합시다.

  3. 2010/03/16 19:31 moova  댓글주소  수정/삭제  댓글쓰기

    재미있는 비유네요. 역시 술 좋아하는 분들은 창의력이 있단 말입니다.~ㅎㅎ.
    실용주의이야기타고 들어왔습니다. 종종 놀러올께요~^^

  4. 2010/03/18 13:45  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • 2010/03/18 18:52 sozu  댓글주소  수정/삭제

      몰랐어요..^^ 맘상하지 않았으니까 신경 안써도 되요~ㅋㅋㅋ
      대신 술 쏘삼..!^----------^

  5. 2010/03/18 14:08 PatternLoader  댓글주소  수정/삭제  댓글쓰기

    아주 재미난 비유네요..
    파전 괜찮은 아이디어 입니다.
    서로 한팀이라는 생각이 강하게 있어야 가능한거죠!!
    그런 팀을 만들기 위해서는 정말 조직을 잘 관리하는 위 사람의 의지가 중요하다고 생각합니다.

    그리고 분배도 기분 나쁘지 않게 적절히 균형을 잡는것도 중요하구요. :)

    • 2010/03/18 18:54 sozu  댓글주소  수정/삭제

      저도 한 사람의 슈퍼맨보다 팀웍을 선호합니다^^ 팀웍을 위해서는 리더의 역할 가장 중요하구요.
      예전에 같이 일했던 팀장님은 분배를 할때 개발자의 상황이나 기존 잔업량 등등을 고려하지 않고 막 던지셨었죠.. (지금도 그렇게 하고 계신다고ㅋㅋㅋ)
      그때 정말 힘들었습니다.ㅠㅠ

  6. 2010/07/30 17:29 뇨릉  댓글주소  수정/삭제  댓글쓰기

    재밌는글 잘 읽었습니다^^;
    제품많고 인력부족한 중소기업에서 짝프로그래밍을 비현실적으로 보더군요.
    저도 짝프로그래밍 해보고 싶지만,, 대부분의 시간을 리뷰도 없이 혼자 코딩하다보니 고민이 많네요 ;;

    • 2010/08/01 22:30 sozu  댓글주소  수정/삭제

      짝프로그래밍은 여유있을때 해도 비효율적인 경우가 많습니다.
      정말 짝을 잘 지어서 계획적으로 진행해야 합니다.
      단, 효율적으로 돌아가기 시작하면 생산성및 품질은 매우 좋아지는 것 같습니다.^^

저는 스크럼, 테스트 주도 개발, 짝프로그래밍, XP의 원칙과 가치 등을 처음 접했을 때 큰 영감을 받았던 기억이 있습니다.
이런 것을 팀에 도입한다면 한단계 발전하는 팀이 될 수 있을 거라는 확신이 들었습니다.
고민했던 생각들을 실천하고 주변사람을 선동하는데 익숙한 저는 바로 실행에 옮겼습니다.
우리는 XXX 문제들이 있기 때문에 YYY를 도입해서 해결해야 합니다.
그리고 우리는 YYY를 도입했습니다.

새로운 것을 도입하는 것이 끝은 아니다.
스크럼은 정말 쉬워보였습니다. 그래서 우리는 스크럼을 가장 먼저 도입하기로 하였습니다.
약 1년간의 스크럼을 해보면서 느낀 것은 새로운 프로세스와 방법을 도입하는 것은 단순한 액션에 불과하다는 것이었습니다.
새로운 것이 정착하기 위해서 우리는 기존의 것을 포기해야 했습니다. 
적게는 수년에서 많게는 십수년의 경력동안 유지했던 자신만의 틀을 깨야 했습니다.

  • 매일매일 자신의 일정과 업무 진행 상황을 모든 팀원에게 솔직하게 공개해야 했습니다.
  • 팀장님은 외부와의 업무 상황 및 요구사항의 출처 및 발생 이유에 대해서 모두 공유해야 했습니다.
  • 특정 개발자만 처리할 수 있는 소스코드가 없어져야 했습니다.
  • 우리 팀의 상황을 타 팀(영업, 마케팅, QA 등)에게 여과 없이 공개해야 했습니다.
이 외에도 여러가지가 있습니다. 하나하나의 틀을 팀원 각자가 깨나가야 했습니다. 정말 어려웠습니다.

틀을 깬다는 것은 안해봤던 일을 시도해보고 새로운 틀을 만드는 것이다.
기존의 틀이 개발 생산성에 문제가 된다면 과감하게 깰수 있어야 합니다. 단, 단순한 현상이 아닌 핵심이 되는 원인을 깨야 합니다.
그리고 새로운 틀을 만들 수 있어야 합니다. 그 틀이 멋진 선배들이 만들어 놓은 것이라면 자신에게 맞게 고칠 줄도 알아야 합니다.
새로운 기술, 새로운 방법, 새로운 환경이 매일 차고 넘치기 때문에 소프트웨어 엔지니어라면 항상 틀을 깰수 있어야 합니다.
이미 아는 기술, 써봐던 방법, 경험했던 환경이 아니라고 해서 할 수 없다고 말씀하시는 분은 진정한 소프트웨어 엔지니어가 되기 힘들것입니다.
저는 그 틀을 깨는 경험들을 공유하고 싶습니다.^^ 같이 깨보실래요?ㅋㅋ
저작자 표시 비영리 동일 조건 변경 허락
Posted by sozu

Trackback | http://sozu.tistory.com/trackback/28 관련글 쓰기

댓글을 달아 주세요

  1. 2010/02/22 10:50 k16wire  댓글주소  수정/삭제  댓글쓰기

    그래서 기업에서 스크럼을 도입하면 많은 관리자들이 회사를 나간다고 합니다. 대략 30%정도. :-)

    • 2010/02/22 15:08 청하 sozu  댓글주소  수정/삭제

      네..정말 안타까운 일입니다.
      길게 보고 합리적인 선택을 해야 하는데..눈앞의 자신의 영역만 보고 있으니..ㅠㅠ

  2. 2010/02/27 10:19 heestory.kr  댓글주소  수정/삭제  댓글쓰기

    고인물은 썩는다.라는 말이 생각나네....
    물이 흘러가는 방향이야 자신의 생각대로 가는거라지만...
    물이 고여 썩어버린다면.....쩝..