하나의 프로젝트를 여러 팀이 공동으로 개발하기에 대한 질문.

rain의 이미지

다음과 같이 가정되는 상황에서 쓸 수 있는 좋은 방법이 있는지요.

1) 전체 용량 1G가 조금 넘는 프로젝트 소스가 있습니다.
2) 1. 2, 3팀이 같이 작업을 하는 프로젝트입니다.
3) 1팀은 2, 3팀에게 핵심 코드를 공개할 수 없습니다.
4) 2, 3팀 또한 1팀에게 코드를 공개할 수 없습니다.
5) 현제 공용으로 쓰는 CVS, SourceSafe가 없습니다.
(핵심 코드의 비공개, 각 팀의 네트웍 보안 등의 이유)
6) 현제는 1팀에서 수정된 소스를 보내오면, 2, 3팀이
동시에 수정을 합니다. 2, 3팀에서 동시에 수정된 소스를 한사람이
1팀의 원본 소스에 수작업으로 merge를 하여 1팀에 전달합니다.

이런 상황에서 다음과 같은 결과를 얻을 수 있었으면 합니다.
1) 2, 3팀이 서로의 변경된 사항을 1팀의 소스에 적용할 때,
자동화된 방법을 쓰고 싶습니다. 수작업으로 인한 merging
실수가 만만치 않습니다.
2) 공용 서버를 못쓴다면, 되도록 적은 용량의 파일을
주고 받고 싶습니다.
3) 공용 서버를 쓰더라도, 1팀과 2, 3팀 간의 핵심 코드는
공개할 수 없습니다.
4) 각 팀의 수정 사항에 충돌이 없도록 하고 싶습니다.

전 PL은 아니고 3팀의 프로그래머에 불과 합니다만, 이런
경우 어떻게 관리해야 하는지 궁금합니다.

seoleda의 이미지

공개할 수 없는 핵심 코드는 바이너리 형태로 주고 받는것 아닌가요? CVS에 바이너리도 저장할 수 있다고 알고 있습니다.

Quote:
1팀의 원본 소스에 수작업으로 merge를 하여 1팀에 전달합니다.

이 부분으로 짐작하건데 어떤 한사람은 1팀과 2,3팀의 핵심코드에 접근할 수 있나보죠? 이 경우 1팀과 2,3팀이 서로에게 공개할 수 없는 핵심코드를 어떤 한사람이 모두 보게되지 않나요?

1팀, 2,3팀 각각 독립적으로 CVS를 운영하고 주기적으로 바이너리만 주고 받으면 될것 같습니다. 2,3 팀에서는 1팀에서 받은 바이너리를 이용해서 빌드하고, 1팀에서는 반대로 하고요.

atie의 이미지

질문을 하신 것에 대해서는 도움이 될만한 답변은 아니겠지만, 이 경우에는 설령 소스를 받아 단독의 cvs를 운용할 수 있다 하더라도 회사의 정책에 위배가 되는 상황이 될테니 용납되지는 않으리라는 생각입니다.
저도 비슷한 경험이 있는데, 수정을 해야하는 소스는 열람을 할 수 있지만 실행에 필요한 것들은 버전별로 바이너리만 가진 경우에서 (그것도 제한적으로) 작업을 한 경우가 있어서 단위 테스트나 디버깅 시에 위의 방식이 얼마나 비효율적인지 알지만 회사에서는 1차, 2차의 코드 QA 그리고 테스트 팀을 활용을 해서 원칙을 고수했었습니다. 프로그래머는 보통 책 한권 분량의 코딩 가이드에 따라 프로그램 작성만 책임을 져라 나머지는 QA들과 테스트팀이 책임을 진다 이런 식이었습니다.

----
I paint objects as I think them, not as I see them.
atie's minipage

익명 사용자의 이미지

요즘 회사들은 거의가 머지팀이 따로있거나 머지를 돌아가면서 하죠.^^
각각의 핵심기술에 대한부분은 lib으로 들어오고, 나머지 같이 고치는 부분은 머저를 두어서 소스를 관리하죠
소스관리툴은 ClearCase..^^

즉 기반이 되는 부분은 SDK(or OS)로 존재하고, 핵심기술은 lib으로 들어오고 같이 전체소스관리하는 부분은 ClearCase로...

prolinko의 이미지

기술적으로는 여러가지 방법으로 자동화 할 수 있습니다. 다만 팀 전체를 설득 해야하고 조금 복잡한 시스템 설정을 잡아줄 수 있는 사람이 있어야겠지요.

Subversion같은 버전 컨트롤 시스템과 자동 빌드시스템을 이용하면 될 것 같습니다.

VCS의 각 모듈별로 사용자 권한 설정을 다르게 주시면 될 듯 합니다. 1팀의 핵심 코드 부부은 1팀만이 읽고 수정가능하게 하고 공유 부분은 전체 팀이 다 읽고 수정하여 commit을 할 수 있게 합니다.

1팀의 핵심 코드 부분은 자동 빌드 시스템을 만들어서 주기적으로, 또는 commit이 발생할 때 마다 빌드 시스템에서 자동으로 소스를 checkout 하여서 리빌드를 하게 만들어 주면 됩니다.(빌드 시스템은 2,3팀에서는 접근 못하게) 자바 같은 경우 cruisecontrol이라는 좋은 툴이 있고요, 다른 언어의경우는 간단한 스크립트를 만들어 사용하셔도 됩니다. 이런 자동 빌드시스템을 이용하면 공유의 문제외에도 버그관리 측면에서 엄청난 이익을 줍니다.

빌드된 바이너리 파일들은 공유 폴더 등을 써서 사용자가 직접 가져다 쓸수도 있지만, VCS의 훅업 스크립트 등을 잘 작성하면 사용자가 update시 자동으로 업데이트 된 바이너리를 받아오도록 할 수도 있을 것입니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.