태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

Search results for '소스코드'

소스코드는 어디 있나요?

2010/03/29 15:33 by 전규현
 All of Software 블로그를 RSS Feed에 등록을 해 놓으시면 편리하게 받아보실 수 있습니다. rss RSS Feed


나와 우리 회사에서는 소프트웨어 관련 경영 및 공학 컨설팅을 주로 하지만 드물게 개발을 해야 할 때도 있습니다. 이런 경우 고객 회사의 개발자와 협업을 하게 되는데 "소스코드는 어디 있나요?"라는 질문을 먼저 시작합니다.

"소스코드는 어디 있나요?"라는 질문은 Subversion등과 같은 소스코드관리시스템이 어디 있냐는 질문이고 모든 소스코드는 당연히 거기에 저장되어 있고 소스코드가 저장되어 있는 Repository와 Path만 말면 Build script를 찾아서 빌드까지 한번에 끝낼 수 있을 것으로 기대하고 하는 질문입니다. 사용자 ID만 등록하고 필요한 권한만 열어주면 더이상 질문할 것도 없이 협업 준비는 끝나는 겁니다.

그런데 이렇게 해피하게 준비된 경우는 아직 본적이 없습니다.
대부분 아래와 같은 답변들이 돌아옵니다.
  • 내 PC에 소스코드가 저장되어 있습니다. 
  • 아직 정리가 안되서 소스코드관리시스템에 등록하지 않았습니다.
  • 빌드는 IDE(Eclipse 등)에서 해야 합니다.
  • 빌드하기 위해서는 이런 저런 라이브러를 알아서 직접 설치해야 합니다.
  • 아참, 설정을 이렇게 바꿔야 하는데 깜빡했습니다.
  • 지금 내가 소스코드를 고치고 있어서 공유가 어렵습니다.
이런 얘기가 진행되는 동안에 일은 정상적으로 진행이 되지 못하고 여러 번 만나서 대화로 소스코드 공유 문제를 해결해나가야 합니다. 

혼자서 또는 개발자들끼리 익숙해져서 나름대로 방식으로 소스코드를 관리하면서 스스로 아무 문제가 없다고 생각하고 있는 개발자들은 냄비 안에서 물이 점점 뜨거워져서 죽는 개구리처럼 소스코드관리 문제가 점점 커져서 문제가 얼마나 심각한지 인식하고 있지 못하고 있는 겁니다. 이는 기본 중에 기본으로 자꾸 소스코드 관리 문제를 가지고 얘기를 하면 민망하고 한심하기도 합니다.

소스코드를 꽉 쥐고 요청하는 사람들에게 '모이'주듯이 하나씩 던져 주는 개발자들은 이로 인해서 얼마나 많은 자신의 시간을 낭비하고 있고 정작 자신이 제대로 개발할 시간은 모자라고 회사에도 손해를 끼치며 자신의 발전도 가로막는다는 것을 알아야 합니다.

정상적인 경우는 다음과 같습니다.

개발자가 1명이든 100명이든 1000명이든 상관없이 모든 소스코드는 당연히 소스코드관리시스템에 등록이 되어 있어야 합니다.
구차하게 이거 저거 물어보지 않아도 소스코드가 저장된 경로만 알면 누가나 소스코드를 Check out해서 클릭 몇 번이면 Build Script를 찾아내서 즉시 빌드를 할 수 있어야 합니다. 당연히 컴파일러 등의 빌드 환경은 설치가 되어 있어야죠.
여러명이 동시에 소스코드를 마구 고쳐도 전혀 걱정할 필요가 없어야 합니다.

이때 구차하게 이거 저거 물어 봐야 빌드가 되고 IDE를 실행 해야 하고, 빌드 중간에 명령어를 입력해야 하는 등의 바로 알기 어려운 행위들을 해야 하면 안됩니다.

이 정도는 되어 있어야 Daily Build가 가능해지고 프로젝트 내내 소스코드 관리 비용을 최소화 할 수 있습니다.
이 정도는 되어 있어야 엄청 복잡한 소스코드 상황을 깔끔하게 관리할 수 있습니다.
이 정도는 되어 있어야 내가 휴가를 가도 아무나 빌드를 할 수 있습니다.
이 정도는 되어 있어야 개발자들이 빌드를 하지 않고 빌드 담당자에게 빌드를 맡길 수 있습니다.
이 정도는 되어 있어야 누구와도 심지어는 외부인과도 협업을 할 때 말 한마디면 소스코드 공유 준비는 끝납니다.
이 정도는 되어 있어야 개발자는 진짜 개발에 집중할 수 있습니다.

이게 뭐 큰 일이냐라고 생각할지 모르지만 이렇게 생각하는 개발자는 위에서 얘기한 기초 중의 기초가 안되어 있다고 생각하면 됩니다.

소스코드 관리는 워낙 기초이기 때문에 누구나 제대로 방법만 익히면 제대로 수행하는데 오래 걸릴 일도 아닙니다. 똑똑한 개발자라면 일주일이면 방법을 다 터득합니다. 분석, 설계 작업이 방법을 제대로 익히고도 제대로 하는데 수년이 걸리는 것과는 안전히 딴판입니다. 그럼에도 아직도 많은 개발자들이 소스코드 관리를 제대로 하고 있지 못하거나 제대로 하려고 흉내는 내는데 엉뚱한 곳에서 헤매는 경우가 많습니다. 원리는 매우 간단한데 말입니다.

소프트웨어 개발이라는 것이 협업이라는 것을 깨달으면 됩니다. 혼자서 개발하더라도 협업과 똑같습니다. 그렇게 해야 더 혼자 개발하더라도 더 빨리 개발할 수 있고 여럿이 개발할 때는 더욱 더 중요합니다.

소스코드관리시스템을 쓰기는 하는데 어중간하게 흉내만 내고 있다고 생각한다면 한번 확실하게 제대로 배워 놓을 필요가 있습니다. 그렇지 않으면 평생 기초 중에 기초에 문제거리를 안고 가는 겁니다.  

* 이 포스트는 blogkorea [블코채널 : 꿈꾸는 소프트웨어 개발자 세상] 에 링크 되어있습니다.
Image by marsi

저작자 표시 비영리 변경 금지

전규현 기반시스템/소스코드관리 subversion, svn, 소스코드, 소스코드관리

Trackback Address: http://allofsoftware.net/trackback/180 관련글 쓰기
  1. 2010/04/11 07:17
    Development Team Building Consulting… Tracked from Blog.RedAge.NET
  2. 2010/04/12 00:28
    murian의 생각 Tracked from murian's me2DAY
  3. 2010/04/13 12:25
    tkhwang의 생각 Tracked from tkhwang's me2DAY
  4. 2010/04/22 01:56
    SubVersion Tracked from RayG
  1. 당연한 얘기를 글로써 상기 시킨다는 현실이 참 슬프네요
    저도 한번은 그렇게 큰 사이트가 아닌데 소스만 400MB
    짜리를 본적이 있었습니다. portal1,portal2,real-portal.....
    같은 디렉토리가 여러개 있는데 마치 닭 갈비집 이름 처럼
    "원조집","진짜원조집","진짜진짜원조집" 같은 느낌이였습니다.
    시스템은 점점더 고도화되고 복잡한 기술을 사용하는데
    개발 환경과 현실은 너무 구닥다리를 따르고 있습니다.

  2. Beyond J2EE님 안녕하세요.

    정말 적절한 비유입니다.
    이런 소스코드는 감당하지도 못합니다. 소스코드관리시스템의 브랜치와 머지 기능을 충분히 활용하고 개발 프로세스 상에서 이를 잘 통제하면 부처님 손바닥안의 소스코드죠.

    언제 다 같이 모아 놓고 세미나를 한번 하고 싶은 마음은 굴뚝 같은데 여유가 안생기네요. - -;

  3. Blog Icon
    옥수석

    항상 좋은 글 감사합니다^^ 개발자로써 구구절절 옳은 말씀만 올려주시지만 현실과의 괴리감이 드는 건 어쩔수가 없네요. 형상관리를 하고 있지만 어느 순간에서부턴가 각 개발자끼리 마치 개별 브랜치를 가진 듯이 다른 방향으로 진행되고 있는 상황을 자주 접하게 됩니다. 물론 상황에 따라 머징이 되긴 하지만 주기적으로 이루어지는 머징도 아니고 필요에 따라, 상황에 따라 이루어지다보니 커뮤니케이션이 소홀해 지는 경우 각자의 프로젝트는 결국 다른 산으로 가고 있더군요.
    다시 한번 좋은 글로 일깨워주심에 감사드립니다~^^

  4. 안녕하세요. 옥수석님

    당연한 기초가 현실과 괴리가 있는 현실이 안타깝습니다. 대학생들을 갈쳐도 몇주면 익숙해지는 것을 십수년 경력의 개발자들도 제대로 하지 못하는 것이 현실이기는 하죠.

    브랜치와 머지는 보통 개발자가 마음대로 하면 안됩니다. 이에 대한 회사의 정책이 있고 개발자는 이를 따라야죠. 일반적으로 브랜치는 승인하에서 합니다. 머지계획도 미리 작성해야 하고요. 번거로우라고 이렇게 하는 것이 아니고 이렇게 하는 것이 가장 효율적이기 때문입니다.

    또 머지는 3-way머지를 해야 합니다. 보통 2-way머지툴을 가지고 머지를 하는데 이는 수십배 더 시간이 많이 들고 잘못 머지가 될 가능성도 대단히 높습니다.

    이렇게 해 놓고 개발자들이 계획에 따라서 자유롭게 개발하는 것이 좋지, 대충 해놓고 뭔가 고칠려고 할 때마다 소스코드 공유/통합을 신경써야 한다면 프로젝트 기간 내내 소스관리 비용이 몇백배로 더 많이 들게 됩니다.

    산으로 가고 있다면 다시 땅으로 끌어 내려야 겠네요. ^^ 필요하면 제가 세미나 등을 통해서 개발자와 경영진들을 설득시키고 교육도 시켜주곤 합니다.

  5. Blog Icon

    비밀댓글입니다

  6. Repository를 어떻게 나누고 각 Repository안의 프로젝트 별 디렉터리를 어떻게 구성하는지는 회사마다 다릅니다.
    일단 revision number는 신경쓰지 않는 것이 좋습니다. revision number에 의미를 부여해서 사용하면 나중에 문제가 발생합니다.
    Repository구분은 각 프로젝트가 단 0.1%라도 서로 연관성이 있는지를 봐야 합니다. 공유되는 소스코드가 있는지? 나중에 쓰고 버릴 소스코드인지? 백업은 공통으로 해야 하는지? 이렇게 생각을 해보고 연관이 있으면 한 Repository에 넣는 것이 좋습니다.
    Repository안의 디렉터리 구조는 각 프로젝트가 완전히 자동으로 Build가 가능하도록 구성을 해야 하는데 공통모듈이 잘 관리되고 있는 회사가 아니라면 이 말이 무슨 뜻인지 잘 모를겁니다. 하지만 공통모듈이 있다면 디렉터리를 어떻게 구성하냐에 따라서 빌드가 달라집니다.

    이렇게 여러가지를 고려하여 처음부터 잘 정해 놓고 시작해야지 나중에 바꾸려고 하면 큰 문제입니다.

    리파지터리 주소는 프로젝트 check out할 때 처음에 한번만 입력하면 되는 것이기 때문에 기억하는 것은 문제가 알될 것 같습니다.

  7. 늘 잘 안되는 것들이 포스팅이 되어서 마음이 아팠었는데

    오늘 포스팅에 대해서는 자신감이 생기네요..
    svn을 사용하고 있고 capistrano를 통해서 각 환경(개발, 백업, 리얼)으로 소스를 deploy 할수 있고 이슈트래킹의 부가기능에 svn history를 연결해놔서 누가 언제 어떻게 고쳤는지 웹상으로 확인할수 있습니다. ^^ 이정도면 자신감을 가져도 괜찮겠죠?

  8. 안녕하세요. zeous님
    일단 SVN과 이슈트래킹(아마 Trac)을 연동해서 잘 쓰고 계시나보네요. 평균 이상은 되시네요. ^^
    항상 안되는 것만 있으면 빵점이게요? 그럴리가 있겠습니까? 항상 포스트를 보면서 조금씩 고쳐나가자는 의미입니다.
    SVN을 잘 쓰시는 것 같기는 한데 Branch, Merge는 어떻게 하는지 궁금하네요. 사실 SVN의 핵심은 Merge거든요. 나중에 Git나 Mercurial들의 분산소스코드관리시스템을 쓰더라도 Merge를 제대로 하지 못하면 반쪽짜리가 됩니다. 그래서 3-Way Merge를 능수능란하게 다룰 수 있어야 합니다. 어떠신가요?

  9. branch를 전혀 쓰지 않는 것은 아닙니다.
    이번에도 새로운 프로젝트를 시작하는데 기존 소스의 서비스도 유지하면서 거기에서 파생되어서 추가적인 작업을 하고 완성후에 합치기 위해서 branch를 생성해서 작업을 하고 있습니다만은

    branch를 생성하고 나서 마지막에 합칠때 실수하지 않을까 (자동으로 하게 되면 가끔 한쪽을 날려먹는 경우가 있어서 안볼수는 없더라구요)
    챙겨야 할것들이 있기에 이왕이면 안만들어졌으면 하는 바램은 있습니다 ^^

  10. SVN을 쓰는 곳, 다수가 해당 소스를 Root에 그냥 올려버리는 곳을 많이 봤습니다.
    Branch나 Tags, Merge와 같은 기능은 꺼버리고 사용하는 것과 마찬가지 인데도 불구하고 말입니다.
    초반엔 인식을 심어주려고 교육도 해보고 노력했으나..역시나 이쪽 부분엔 관심 없어 하더군요.

    무술고수가 항상 강조하는 기본기 "정권찌르기"를 거스르고 현란한 기술만 쓰고자 하는 사람들의 심리때문일까요? 아니면 남들이 모르니 나도 몰라도 된다..라는 심리때문일까요

    가장 기본이 되는 소스코드 관리 정말 중요하죠~ 말이 필요없다고 생각합니다.
    하나를 보면 열을 안다고.. 이런 기본을 중요시하는 기본기가 탄탄한 조직은 정말 안정적인 조직이라고 생각합니다. ( 비단 소스코드관리뿐만이 아닌...:)

  11. moova님 안녕하세요.
    제가 좀 바빴네요. - -;
    소스코드시스템을 쓰는 이유가 소스코드를 잃어버릴까봐 백업용도로만 쓰는 곳이 의외로 많습니다.
    빠뀌지 않는 이유는
    1. 막연히 새로운 것을 배우는 것이 귀찮아서
    2. 나아진 다는 확신이 없어서
    3. 현재 방법에 익숙해져서
    4. 가르쳐 주는 사람에 대한 믿음이 부족해서
    5. 소스코드를 감추려고
    등등 다양합니다.
    산넘어 산입니다.
    그래서 카리스마 있는 사람의 도움을 받아서 설득을 하면서 강제화하는 것이 가장 좋은 방법입니다.

  12. 어느분이 지적하신대로 저 역시 Branch, Tags, Merge 기능을 사용해보질 못했네요 -_-;

  13. 현재 SVN의 기본 저장 기능만 쓰고 계신거라고 볼 수 있습니다. 혼자서 개발을 해도 브랜치 요구는 항상 생깁니다.

Copy & Paste의 종말

2009/07/31 23:53 by 전규현
 All of Software 블로그를 RSS Feed에 등록을 해 놓으시면 편리하게 받아보실 수 있습니다. rss RSS Feed

직업상 다른 개발자들이 작성해 놓은 코드를 볼 기회가 정말 많습니다.
그러다보면 자주 접하는 것이 복사된 코드들입니다. 

소소코드 Copy & Paste는 개발자의 대단히 큰 잘못입니다. 즉, 소스코드를 복사해 놓는 것은 쉽지만 그로 인해서 지속적으로 회사와 후배들이 부담을 져야 하기 때문입니다. 즉, 회사의 생산성을 갉아 먹는 행동입니다. 그런 개발자는 해고가 되어야 마땅하지요.

한쪽 제품이나 컴포넌트에서 사용한 함수나 소스코드들을 복사해 와서 다른 제품이나 컴포넌트에서 사용하는 것입니다. 동일하게 그대로 사용하는 경우도 있고, 약간 수정해서 사용하는 경우도 있습니다.

이런 일이 반복되다보면 비슷한 코드들이 회사의 전체 소스코드 중에서 여기 저기 산재하게 됩니다. 그러다가 버그가 발생하는 그중 일부는 고쳐지고, 일부는 여전히 버그를 가지고 있습니다. 또 해당 기능이 변경이 될 때도 이를 모두 찾아서 변경하기란 쉬운 일이 아닙니다. 이쯤 되면 개발은 창의적인 작업이 아닌 점점 노동이 되어 갑니다.

이런 공통적인 소스코드들은 공통모듈을 잘 계획해서 공통적으로 사용할 수 있어야 합니다. 공통모듈은 전사적으로 관리가 되어서 효율적으로 사용할 수 있도록 해야 하며, Copy & Paste의 욕구가 생겨도 시간을 약간 더 들여서 공통모듈화 하는 노력을 들이는 것이 필요합니다.

공통모듈을 관리하려면 당연히 소스코드관리시스템을 잘 사용해야 하고, 각 제품이나 컴포넌트들이 공통모듈들과 더불어 효과적으로 빌드가 가능하도록 빌드 스크립트도 준비가 되어야 합니다.

Peer review, code review가 정착되어서 다른 팀에서 서로 모르고 중복된 작업을 하는 것을 줄여야 합니다.

또, 특정 고객을 위한 커스트마이즈된 제품을 만들 때 대규모 소스코드 복사가 일어나는데, 이를 통제없이 만들고 방치하면 함수 몇개 복사한 것과는 비교도 안되는 큰 비용을 치뤄야 합니다. 물론 상황에 따라서 다르기는 하지만, 이런 경우에는 가능하면 소스코드 브랜치를 줄이고 브랜치를 만들더라도 소스코드관리시스템을 이용하여 잘 관리를 해야 합니다. 그리고 추후 Merge를 통해서 브랜치의 수명 주기를 짧게 가져갈 필요가 있습니다.

여기저기 복사된 쌍둥이 소스코드들... 참 문제가 아닐 수 없습니다.

이미지출처 : Microsoft Office Online
* 이 포스트는 blogkorea [블코채널 : 꿈꾸는 소프트웨어 개발자 세상] 에 링크 되어있습니다.
저작자 표시 비영리 변경 금지

'프로젝트 > 구현' 카테고리의 다른 글

주석을 달기 어려운 이유  (9) 2011/09/09
Copy & Paste의 종말  (9) 2009/07/31

전규현 프로젝트/구현 개발자, 구현, 복사, 소스코드

Trackback Address: http://allofsoftware.net/trackback/77 관련글 쓰기
  1. 2009/08/01 14:16
  1. 제가 생각하는 copy&paste의 문제는 이해부족에서 온다고 생각합니다.

    체계적으로, 기존에 다른 사람이 작성한 코드를 분석하지 못했기때문에,
    (이유는 여러가지가 있겠죠? 실력부족, 문서화안됨, 스파게티코드, 시간부족 등)
    기존에 잘 돌던코드는 그대로 두고 플러스 알파만 내가 했다... 뭐 이런거 아닐까요?

    또 비슷한 측면에서,
    자신이 작업하던 코드의 경우에도, 설계가 세밀하게 진행되지 않은 상태에서,
    일단 만들어보면서 얼기설기 작업해나가다 보면,
    적절한 타이밍에 리팩토링 시기를 놓쳐버린 상태가 되는 경우가 있습니다.

    시간비용 + 귀차니즘 때문에, Copy&Paste로 떡칠이 되기 시작하는 거죠.


    마지막으로는 코딩스타일에서 올 수 있겠네요.
    현재 제가 주로 작업하는 분야가 C언어를 사용한 임베디드 분야 (wipi등)쪽 인데,
    판단문과 분기문이 수도 없이 떡칠되기 시작하면서, 소스가 주렁주렁 ㅎㅎㅎ

    state머신이나 적절한(펑션포인터등 사용) 분기체계가 아닌,
    switch-case, if-else 등으로 관성이 붙어버리는 거죠.

    이상태에서 상용으로 소스는 릴리즈나가고 -_-;;;;;
    대형 리팩토링 했다가는(이것도 안습) 되던 소스도 망가지고,
    고객사에서는 최대한 손대지 말고 요거 하나만 고쳐달라고 하죠.

    저희는 견디다 못해서....
    고객사에서 version 2 만들자고 할때, 그쪽 목적은 기능개선, UI개편이었는데,
    저희내부에서 아키텍처 부터 다시 잡아서 첨부터 다시 만들었습니다.

    후우... 그나마 이제는 좀 살만해졌네요.

    며칠전부터, 이 블로그를 처음부터 정주행하고 있는데,
    오늘 정주행 완료하고 나니까, 현실적으로 와 닿는 얘기들이 왜이리 많은지요 ㅠㅠ

    계속 분발해야겠습니다.

    현실적 고민이 뭍어나오는 좋은 글들 감사합니다.

    p.s. 3일에 걸쳐 블로그글을 다 읽고 났더니.. 진작에 신경쓸걸 하는 울컥한 마음에, 댓글이 횡설수설 합니다. 양해부탁드립니다.

  2. 하늘이아빠님 안녕하세요.
    장문의 댓글을 남기셨네요.^^
    결국은 "조삼모사"죠. 그런데, 아침에 4개 먹기를 원하는 개발자나 경영자가 너무 많죠. 아침에 4개 먹으면 저녁때 3개가 아니고 1개 먹기도 어려운 것이 현실입니다. 아침에 3개만 먹으면 저녁에 4개 아니고 7,8개를 먹을 수도 있습니다.

  3. 확실히 와닿네요!! 고객사별로 소스가 따로 노는데 그 소스 통채로 복사해와서 붙여넣고 다른 고객사 나갈 때 커스터마이징한 소스도 그대로 붙어서 나가지요~ 보고 있으면 숨이 꽉꽉 막힙니다~

  4. 두렁청해님 안녕하세요.
    고객사별로 소스가 따로 노는 회사는 어느 순간 성장의 한계에 부딪히게 됩니다. 그 순간이 오면 이미 되돌릴 수 없는 상태가 된 겁니다.

  5. 몇개 부분에서 리팩터링을 해야할 필요성을 느낌에도 불구하고
    계속 일에 치여서 다른 부분을 작성하다 보니 주렁주렁 늘어나는 코드를 보면서 눈물만 머금게 되는군요 ㅠ.ㅠ

    음.. copy&paste문제는 아마도 설계상의 문제가 가장 크지 않을까 생각이 듭니다.
    비슷한 기능이지만 약간의 다른 처리를 요구하는 함수가 발생할 때,
    전용 함수로 만들면 간단하게 해결되는데
    copy&paste하지 않기 위해서 두가지 기능을 하나로 합치다 보면 범용 함수가 되고
    그렇게 되면 상당히 귀찮아 지니 말이죠. 물론 범용 함수가 좋고
    여러개의 함수를 합쳐서 하나로 쓰는 것도 좋지만 대부분의 외각체크 루틴들은 거의 copy&paste 식으로
    비슷비슷하게 쓰여지는데, 이 부분을 명확하게 처리할 방법이 없는거 같더라구요.

    머.. 저의 프로그래밍 실력의 부족이 가장 큰 원인이겠죠 ㅠ.ㅠ

  6. 구차니님 안녕하세요.
    범용함수란 그리 좋은 선택이 아니죠. 함수는 한가지 일만 하면서 간결하게 작성되어야 하죠. 그리고 리팩토링 시기를 놓치면 점점 혼란스러워지죠. 뭐든지 제때에 해야죠.

  7. Blog Icon
    [1002]

    C&P 를 하고 향후에도 계속 C&P 를 하는 것이 과연 '개발자의 잘못' 으로 '해고되어야 마땅한' 일인지는.. 모르겠군요. 개발자 중 C&P 를 좋아서 하는 사람이 있을까요?

    C&P 에 대해 이리저리 생각하면..
    * 어찌 되었건 회사 입장에선 가장 빨리 답을 냈고 (해당 기능에 대해선 가장 빨리 답을 낼 가능성이 높습니다.)

    * C&P 를 한 다음에 부정적 피드백이 바로 날라오는 것도 아닙니다. (CPD 나 simian 같은 것을 회사차원에서 daily test 로 돌리지도 않고) 매일 매일 다음 할 작업으로 로드가 걸린 개발자 입장에선 일종의 시간 벌기가 됩니다. 밑의 돌 빼서 위에 꽂기 같은.

    * C&P 를 하는 당시에는 '이건 잠깐이고 언젠가 다시 리팩토링 할꺼야' 라 생각한 뒤, 실제로 리팩토링을 하지 않거나 하지 못하게 될 상황이 바로 닥치게 될 경우가 많습니다. 예전에 어떤 분 말씀처럼 '지금 당장 정리 하지 않으면 지는거다' 라고 강하게 생각하지 않고선 쉽지 않습니다.

    * 코드리뷰의 경우 리뷰를 1주일 이내 단위로 자주 하는 것이 아닌 이상 C&P 가 고쳐질 것이라고는 생각치 않습니다. 리뷰의 주기가 길 경우, 이미 리뷰 받고 난 뒤엔 돌이킬 수 없게 되는 경우가 많습니다. 리뷰 중 자주 나오는 말 중 하나가 '이번엔 어쩔 수 없으니.. 다음번엔..' 일겁니다. 소 잃고는 외양간 고치려고 해봤자 고칠 맘은 안생깁니다.

  8. 안녕하세요. 질문도 답도 댓글에 다 포함되어 있군요. :)
    개발자 중에는 C&P의 폐해를 모르고 마구 해대는 사람들도 많습니다. 이미 많은 고민을 하고 계시네요.

  9. Blog Icon
    깜순이아빠

    글 잘 읽었습니다 좋은 내용이 많아서 이건 무슨 말인가 하고 봤는데 흠.. 저는 Copy & Paste 신봉자거든요.
    API에 대한 오타를 막을 수 있고, 생산성도 향상된다는 점에서 무척 좋아합니다. 단지 이 글의 요지를 제가 처음에 오해했나봅니다.

    진짜 요지는 공통되는 부분을 모듈화하지 않고, 여기저기 똑같은 소스를 산재하는 것을 말하는거군요. 그건 저 역시 반대합니다!! 여기저기 같은 소스를 복사&붙여넣기 하면.. 자원낭비도 심하고
    유지보수하기도 여간 까다롭죠! 근데 ㅋㅋㅋ 재미는 있네요 ㅋㅋㅋ 고쳐야 할게 많아서 ㅋㅋㅋ

소스코드가 그렇게 중요한가요?

2009/03/23 11:39 by 전규현
 All of Software 블로그를 RSS Feed에 등록을 해 놓으시면 편리하게 받아보실 수 있습니다. rss RSS Feed
소스코드를 신주단지 모시듯 하는 회사나 개발자들을 자주 볼 수 있습니다.
소스코드가 자신들의 모든 기술이 함축된 집합체라고 생각들을 합니다.
 
저는 이런 회사나 개발자들 딱 접하는 순간 그 수준을 한번에 알 수 있습니다. 다른 것들은 별로 물어볼 필요도 없이 그로 인해서 회사가 어떤 식으로 개발을 하고 있다는 것을 쉽게 짐작할 수 있습니다.
 
그러한 회사들은 소스코드를 개발자를 제외한 다른 직원들은 접근하지 못하도록 하기 위해서 보안장치를 두고 개발자는 자신이 작성한 소스코드를 공유하기 꺼려하기도 합니다. 개발의 내용은 SRS나 설계서에 포함되어 있기보다는 그냥 코드에 숨어 있어서 이를 작성한 사람이 아니면 전체를 파악하기 정말 어렵습니다. 해당 개발자가 아니면 유지보수가 어렵고 신입사원이 들어와도 공유가 잘 안됩니다.
 
이런 말이 있습니다.
"경쟁회사를 어렵게 만들고 싶으면 자사의 소스코드를 실수인척하고 공개해서 경쟁회사로 흘러 들어가게 하라"
그 경쟁사는 소스코드를 얻고 횡재한 줄 알겠지만, 이를 분석하다 보면 몇 달 후 별로 얻은 것은 없이 시간만 낭비했다는 것을 알게 될 것입니다.
 
가슴에 손을 얹고 생각해보면 우리가 작성하는 소스코드 중에서 정말 획기적인 것이 있나요? 남들은 절대로 만들지 못할 엄청나게 어려운 것이 있나요? 대부분은 이미 다 공개된 알고리즘과 모듈들입니다. 물론 그런 것들이 있다면 잘 지켜야 겠지요. 하지만 그런 경우는 거의 찾아보기 힘듭니다.

정작 중요한 것은 그 아키텍처이고, 스펙입니다. 그리고 개발자들의 역량과 팀웍이죠. 그것들이 다른 회사와 우리 회사를 다르게 만들어주는 요소입니다. 소스코드는 아니죠.
 
물론 소스코드가 소프트웨어를 이루는 중요한 요소이기는 하지만 소스코드의 보안에만 신경 쓰는 순간 자신의 수준을 확 낮춘다는 것을 알아야 하겠습니다.

이미지출처 : Microsoft Office Online

저작자 표시 비영리 변경 금지

'소프트웨어이야기' 카테고리의 다른 글

이거 팔면 돈 되겠는데!  (20) 2009/04/17
외주를 주면 된다고요?  (6) 2009/03/30
소스코드가 그렇게 중요한가요?  (20) 2009/03/23
소프트웨어 개발자의 권리  (8) 2009/03/15
짝퉁 고수  (8) 2009/03/04
개발자 윤리 장전  (14) 2009/02/13

전규현 소프트웨어이야기 소스코드

Trackback Address: http://allofsoftware.net/trackback/98 관련글 쓰기
  1. 2009/03/24 00:25
    서브버전 호스팅 서비스 Tracked from 코드 리뷰, 좀 쉬운 방법은 없을까?
  2. 2009/03/29 11:16
    소규모 개발팀을 위한 SVN 무료 호스팅 서비스 Tracked from 가야태자의 IT이야기
  3. 2009/09/17 13:24
    toracle의 생각 Tracked from toracle's me2DAY
  1. 대박 공감입니다.. ㅠㅠ

  2. kkommy님 안녕하세요. 대박씩이나 ^^...

  3. 정확한 지적이십니다.
    소스코드 그까이꺼 라는 의미는 아니지만, 가장 중요한건 역시나 아키텍쳐가 아닐까 합니다.
    스펙은 그 다음^^!

  4. 돌이아빠님 안녕하세요.
    돌이아빠님 블로그는 항상 즐겨 보고 있습니다. 의견 감사합니다.

  5. 좋은 지적입니다. 비워야 무언가 다른 것으로 채울 수 있으니까요.
    하지만 문제가 발생할 경우 관리 소홀에 대한 물적 책임은 개발자에게...ㅠㅠ 좌절이지요.^^

    그래도 업무관련된 공적인 소스가 아니라면...
    개발자는 언제나 공부하는 마음으로 자신의 것을 공유해야 한다고 생각이됩니다. 그래야 자기 스스로도 발전이 있기 때문이죠.^^
    즐거운 하루되세요.

  6. 위즈님 안녕하세요.
    반갑습니다. 좋은 의견 감사합니다.

  7. 아키텍쳐와 스펙이 중요하다고는 해도 이를 테스트 수준이 아닌 실제의 상용서비스 수준으로 어떻게 구현해 내느냐는 또 별개의 문제가 아닐지요. 결국 이건 개발자 역량의 문제이고 그 역량과 기술이 담겨 있는게 소스코드라고 생각합니다.

    돌아보면 소스코드가 별로 중요하지 않았던 프로젝트나 서비스는 아키텍쳐나 스펙도 그닥 중요한 건 없었습니다. 이미 다 공개된 스펙에 해당 아키텍쳐를 지원하는 WAS나 프레임워크를 쓰는 식이었지요. 시스템 아키텍쳐도 서버/스위칭 장비의 댓수만 좀 차이가 날뿐 비슷비슷하구요.

    말씀하시려는 의도는 잘 알겠지만 약간은 한쪽으로 치우친 글이 아닌가 해서 댓글 남겨봅니다.

  8. 안녕하세요. 우울한딱따구리님
    의견 감사합니다. 원래 글이라는 것이 한쪽으로 치울칠 수 밖에 없죠. 딱 중간을 지키는 것은 또 무미건조할 것이고. ^^ 저는 컨설팅을 하면서 겪는 경험들을 강도있게 표현하려고 하고 있습니다. 따라서 이런 종류의 주제를 다룰 때는 이런 논조를 유지하려고 합니다.
    그리고 말씀하시는 의도도 충분히 알고 있습니다. 이 정도의 글이 아니면 그렇게 코드만을 중요시 하는 개발자들이 생각을 조금도 움직일 수 없겠죠.

  9. Blog Icon
    [1002]

    버전 컨트롤 시스템을 쓰는 회사에서도 저런 일이 일어날 수 있는지요?

  10. 툴이 이슈는 아니고 마인드의 문제를 지적한 것입니다. 개발에 있어서 코딩의 비중이 그렇게 높지 않고, 소스코드는 중요하지만, 소스코드 자체가 개발 결과물을 대표하지 않는 다는 것입니다. 소스코드를 누가 본다고 해서 모든 것을 잃는 것이 아니라는 뜻이기도 합니다. 버전컨트롤 시스템을 쓰는 회사에는 소스코드를 숨길 수는 없지만, 그렇다고 개발자들간에 소스코드가 잘 공유된다고 볼 수도 없습니다. 결국 마이드가 중요하죠.

  11. Blog Icon
    [1002]

    개인적인 느낌은, 간단한 룰 및 툴의 도입으로 해결가능한 문제가 '회사 개발자 전체의 마인드 문제다' 로 지적되는 건 아닌가 해서 그럽니다. 생각보다 사람들은 자신에의 문제상황이 실제로 문제상황인지를 인지하는데 시간이 걸립니다.

    자신의 버그를 자기 눈으로 찾는 것보다 다른 사람이 외부의 시각에서 발견하는 것이 더 빨리 보이는 경우는 많습니다. 그건 다른 사람이 더 똑똑해서가 아닙니다. 다른 관점으로 바라보는 것이 (혹은 내부 이해관계에 얽매이지 않은 시각으로 바라볼 수 있는 것이) 더 빨리 볼 수 있는 문제들이여서 그런 것 뿐일지도 모릅니다.

    여담으로 농담 섞어 이야기하면.. 저라면 해당 회사에서 소스를 훔칠까 스펙 & 디자인 문서 훔칠까 하면 소스를 훔칠겁니다. 이유는, 소스가 스펙 & 디자인 문서보다는 거짓말을 덜하기 때문입니다. ;)

  12. 좋은 의견 감사드립니다.
    저도 소스코드를 훔칠 것 같네요. ^^ 그 이유는 대부분의 회사가 스펙이나 설계문서는 잘 작성되어 있지 않지만, 적어도 소스코드는 진짜 동작하거든요. 그리고 내가 소스코드를 잘 알고 있는 상황에서 소스코드는 상당한 가치가 있지만, 덜렁 소스코드를 남을 주면 소스코드 분석하기도 쉽지는 않습니다.

  13. 약간은 다른 문제이겠지만
    보안의 관점에서는 신주단지 같지않은 소스라도 공개되면 곤란한 경우가 있습니다.
    암호화관련 모듈이라든지 인프라 정보가 노출될 수도 있고 회사 입장에서는
    기술유출 보다는 이런 보안쪽이 더 문제이기때문에 철저히 관리하는게 아닐까요..

  14. bluecodea님 의견 감사합니다.
    맞습니다. 소스코드가 오픈되면 공격을 당할 수도 있습니다. 물론 Reverse engineering을 하면 왠만한 것은 알아낼 수 있지만, 소스코드가 있다면 훨씬 쉽게 공격당할 수 있죠. 물론 좋은 보안 솔루션은 소스코드가 공개되도 안전한 솔루션이겠지만, 그렇지 못한 경우도 있고, 허술하게 짜여진 보안 관련 코드들이 있으므로 소스코드를 안전하게 지키는 것이 가장 쉬운 수단이죠. 사실 많은 개발자들이 허술하게 코드를 작성해도 별문제가 안되는 이유는 공격자들이 별로 관심이 없기 때문입니다. ^^ 윈도우즈가 그렇게 많은 보안 취약점이 발견되는 이유는 바로 많은 사람들이 관심을 가지고 있기 때문입니다.
    감사합니다.

  15. 소스코드... 우리팀에게는 무척이나 중요합니다. :)

    왜냐하면, 우리팀은 소스코드를 관리해주는 실루엣이라는 형상관리 솔루션을 개발하고 있기 때문이죠.

    소스코드는 우리게 고객이랄까요? 물론 여러분들께는 창작물이 되겠지만 말입니다. :)

  16. 머샤머샤님 안녕하세요.
    소스코드관리는 매우 중요하고 소프트웨어 개발의 기본중의 기본이죠. 소스코드관리시스템을 만드시니까 당연히 잘 아시겠죠. ^^ 실루엣은 과거에 컨설팅을 했던 고객사를 통해서 들어본 적이 있습니다. 고객사가 어딘지는 짐작하실 겁니다. 앞으로 좋은 의견 많이 교환하길 기대합니다.

  17. 찌질개발자인 저에게는 '소스코드=비급문서' 라는 인식이 있었던 듯 합니다.
    잠깐 여러 생각을 하다 갑니다.

  18. miing님 안녕하세요.
    누구나 다 사연이 있습니다. 주변이 환경이 열심히 일하려는 개발자들은 뒷받침 못해주는 것이 첫번째 이유입니다. 이런 환경에서 오래 일하면 발전하기 어렵죠.

  19. Blog Icon
    개발자

    제 생각에 전규현님은 경쟁이 치열한 분야에서,
    상용엔진을 만들어본적이 없는 분 같네요.

  20. 안녕하세요. 개발자님

    이런 글들은 대부분 익명으로 올라오더군요.
    저를 한번도 뵌적이 없는 분 같은데(정체를 알 수 없으니)... 절 평가하네요. :)

    저는 소프트웨어 업계에서 17년 개발자로서 일을 했고, 한글과컴퓨터, 안철수연구소 등에서 일해왔습니다. 그리고 제 글들은 이론적이지 않습니다. Global standard에 가까운 글들을 쓰고 있습니다.

    제 글들은 소프트웨어 초보자들은 이해하기 어렵습니다. 또한 고참이라고 하더라도 오랫동안 주먹구구 방식으로 개발하던 개발자들도 이해하기 어렵습니다.

    또한 국내 소프트웨어 개발자나 회사나 얼마나 열악한 환경에서 주먹구구식으로 개발을 하고 있는지, 또 얼마나 미래가 없는지 잘 알고 있습니다. 또한 엔진이라고 부르는 것들, 솔루션이라고 하는 것들이 얼마나 제 값어치를 못하고 있는 것들인지도 잘알고 있습니다. 물론 개발자들이 열심히는 하지만 그것만으로는 부족하죠. 그래서 저는 컨설턴트로서 개발자를 교육하여 역량을 향상시키고 회사를 개혁시키 일을 하고 있습니다.

    배우지 않으려고 하는 사람에게 도움을 줄 수는 없습니다.

    물론 제글과 다른 의견들도 있을 수 있고 언제든지 토론을 환영합니다. 가능하면 토론이 될만한 의견을 올려주면 좋겠네요.

관리자가 이런 일까지?

우리나라 SW 조직에서 관리자란 위치는 참 애매한 위치다. 물론 전문 관리자라면 얘기가 다르지만 왕년에 SW를 조금 개발해 본 경우가 애매하다. 개발팀에서 가장 경험이 많은 SW 개발자들이 주로 팀장이 되곤 한다. 이 경우와..

과거의 성공이 발목을 잡을 때

수많은 소프트웨어 회사들이 첫번째 성공을 거두고 나서 두번째 도약에 실패하고 사라져간다. 물론 첫번째 성공도 어렵지만 이미 성공의 경험이 있고 방법을 알고 있는 회사들이 두번째 또는 세번째에는 많이 실패하는 이유가 무엇일까?..

스펙을 제대로 작성하는 것은 구식이다?

'소프트웨어 개발 방법이 얼마나 발전했는데 아직도 스펙을 제대로 작성하고 개발을 하는가?' 라고 하면서 스펙 작성에 반대하는 주장을 하는 사람들이 있다. 스펙, 설계를 작성하고 구현을 하고 테스트를 하는 방식으로 개발하는 것..

내가 개발에 집중할 수 없는 이유

우리나라에서는 개발자들이 개발에 집중할 수 없는 환경인 곳이 참 많다. 정도의 차이가 있지만 거의 대부분이라고 봐도 무방하다. 그 결정적인 이유는 개발자 혼자서 북치고 장구치고 다해야 하는 상황이기 때문이다. 원래는 이렇게..

설계가 필요할까?

최근에 Software Architect의 정체에 대해서 혼란을 겪고 있는 것 만큼 Software 설계에 대해서도 혼동스러운 것은 마찬가지인 것 같다. 그래서 설계에 대해서도 깔끔하게 정의를 해보자. 흔히 설계에 관한 다음..

Software Architect를 양성하는 나라

우리나라에서는 종종 SW Architect를 양성한다고 한다. 정부에서 막대한 예산이 지원도 되며 SW Architect를 양성하는 학원도 생기고 야단법석이다. 그럼 도대체 SW Architect는 무엇인가? SW Archi..

우리에게 지금 필요한 것은? 바로 이것

우리나라 대부분의 소프트웨어 회사들에게 가장 시급하게 필요한 것은 "기초 체력"이다. 히딩크가 우리나라 국가대표 축구팀을 처음 맞았을 때 강조한 것이 기초 체력이었다. 그전까지 우리는 국가대표 축구팀이 체력은 세계 어디를 내..

프로토타입을 재활용하면 될까? 안될까?

며칠 전 프로토타입에 관해 올린 글에 대해서 프로토타입 재사용에 대해서 여러 의견이 있어서 이 내용에 대해서 조금더 설명해보려고 한다. 2011/11/03 - [프로젝트/요구사항분석] - 프로토타입이란? 소프트웨어공학의 목적..

프로토타입이란?

프로토타입 (경제/경영) 양산(量産)에 앞서 제작해보는 원형(原型)을 '프로토타입'이라 하는데, 프로토타이핑이란 개발자들과 사용자들의 의사소통상의 효과를 증진시키기 위하여 취하는 시스템개발상의 기법이다. 일반적인 분석방법을..

같이 일하려면 적어라.

"협업은 말로 하는 것이 아니라 문서로 하는 것이다." 동서고금을 막론하고 개발자들은 적는 것을 싫어하고 또 잘 적지 못한다. 우리나라 개발자들은 그 정도가 훨씬 심하다. 우리나라에서는 회사가 크던 작던 상관없이 대부분 5년..