한방에 빌드
'기반시스템 > 빌드/릴리즈' 카테고리의 다른 글
| 한방에 빌드 (2) | 2009/08/06 |
|---|---|
| Build Script를 C언어로 작성하기 (2) | 2009/02/24 |
| Daily Build를 하십니까? (0) | 2009/02/04 |
| 빌드와 컴파일의 차이 (6) | 2008/11/14 |
| 빌드가 먼저일까? 베이스라인 설정이 먼저일까? (8) | 2008/11/12 |
| Broken tree (0) | 2008/11/12 |


|
|
| 한방에 빌드 (2) | 2009/08/06 |
|---|---|
| Build Script를 C언어로 작성하기 (2) | 2009/02/24 |
| Daily Build를 하십니까? (0) | 2009/02/04 |
| 빌드와 컴파일의 차이 (6) | 2008/11/14 |
| 빌드가 먼저일까? 베이스라인 설정이 먼저일까? (8) | 2008/11/12 |
| Broken tree (0) | 2008/11/12 |
Build Script를 Script언어가 아닌 C언어로 작성하시거나 그런 경험이 있으십니까?
저는 Build Script를 C언어로 작성하는 것을 본 적이 있습니다. 이 경우에 Build Script라고 하기에 좀 그렇군요. Build Program이라고 해야 할까요?
누구나가 Build Script라고 부르는 이유는 Script언어로 작성하기 때문이기도 합니다.
물론 IDE에서 공식 빌드를 하는 것이 아니고 Build Script를 작성한 것은 긍정적으로 볼 수 있지만 Build Script를 사용하기 위해서 다시 Build를 해야 한다면 우습네요.
Build Script를 C언어와 같이 Build가 필요한 언어로 작성하는 경우는 이러한 경우가 있을 수 있습니다.
Script언어를 하나도 모른다면 어쩔 수 없겠지만, Script언어로도 빌드에 필요한 정도의 모든 기능은 쉽게 구현할 수 있습니다. 오히려 Build를 위해서 만들어진 Ant같은 경우는 더 효율적입니다. Script언어에 아직 익숙하지 않다면 간단하게 Batch 파일로 작성할 수도 있습니다. 그리고 C언어와 유사한 Python을 이용하면 Python을 아주 잘하지 않더라도 간단한 Build Script 정도는 만들어 낼 수 있습니다.
Build Script는 처음부터 모든 원하는 기능을 다 자동화 할 필요는 없습니다. 우선 기본적인 빌드 기능부터 구현을 한 다음에 사용을 해보면서 자동화가 필요한 부분을 차례차례 추가해 넣으면 무난히 효율적인 Build Script를 만들 수 있습니다.
| 한방에 빌드 (2) | 2009/08/06 |
|---|---|
| Build Script를 C언어로 작성하기 (2) | 2009/02/24 |
| Daily Build를 하십니까? (0) | 2009/02/04 |
| 빌드와 컴파일의 차이 (6) | 2008/11/14 |
| 빌드가 먼저일까? 베이스라인 설정이 먼저일까? (8) | 2008/11/12 |
| Broken tree (0) | 2008/11/12 |
make를 빼고는 얘기가 안되죠 ![]()
C만 쓸 줄 알다가 처음 make를 혼자 익혀보고는 감탄했던 때가 생각나는군요. 사람은 배워야죠...ㅡㅡ;
Eminency님 안녕하세요.
make도 제대로 사용하려면 공부를 많이 해야하죠. 대부분들 선배들이 만들어 놓은 makefile 그냥 조금씩 수정해서 사용을 하고 전체 의미는 잘 모르고 쓰는 경우들이 많더군요. 또 Windows플랫폼에서 개발하는 개발자는 그냥 IDE에서 만들어주는 대로 그냥 빌드를 하기 때문에 make의 과정이나 옵션등을 속속들이 모르고 그냥 쓰고 있는 경우가 많습니다. 빌드 자동화를 위해서는 make나 nmake에 대해서 잘알아야죠.
Daily Build는 많은 혜택을 줍니다.
소프트웨어가 항상 빌드 가능한 상태를 유지할 수 있도록 해주며
모든 소스코드가 매일 통합되므로 통합의 혼란을 줄여주며 개발자들의 개발진척도를 피부로 느끼게 해줍니다. 또 유닛테스트를 자동으로 매번 시행하여 기본적인 테스트를 해줍니다.
요즘은 Daily가 아니고 CI툴을 이용하여 빌드 주기를 조절하고 추가적인 작업들도 하지만 개념은 Daily Build와 크게 다르지 않습니다. CI툴은 이를 좀더 편하게 UI와 몇몇 기능을 제공하고 있습니다.
여기까지는 대부분의 개발자들이 알고 있는 내용이기도 합니다.
하지만 Daily Build를 언제부터 시작하느냐에 대해서는 의견이 명확하지 않더군요.
저는 Daily Build는 설계가 끝나고 구현 첫날부터 Daily Build를 할 수 있어야 한다고 생각합니다.
기본적인 개발 Stage를 사용하던, Iteration을 쓰던 간에 설계의 결과물은 빌드가 되어야 한다는 것입니다. TDD를 사용할 경우 Test 코드를 먼저 작성을 하기 때문에 빌드가 가능합니다. 테스트는 통과를 하지 못하더라도 말입니다. 즉 껍데기, Class, Public function의 Prototype을 정해 놓고 빌드가 가능한 상태로 만들어 놓고 구현을 시작합니다.
이때 SCM에 Baseline을 한번 설정을 하고 소스코드의 내용을 채워 나가기 시작합니다. Daily Build의 혜택을 누리기 위해서는 소스코드를 빌드 가능한 상태로 만들어 놓고 시작을 해야 합니다.
| 한방에 빌드 (2) | 2009/08/06 |
|---|---|
| Build Script를 C언어로 작성하기 (2) | 2009/02/24 |
| Daily Build를 하십니까? (0) | 2009/02/04 |
| 빌드와 컴파일의 차이 (6) | 2008/11/14 |
| 빌드가 먼저일까? 베이스라인 설정이 먼저일까? (8) | 2008/11/12 |
| Broken tree (0) | 2008/11/12 |
| Build Script를 C언어로 작성하기 (2) | 2009/02/24 |
|---|---|
| Daily Build를 하십니까? (0) | 2009/02/04 |
| 빌드와 컴파일의 차이 (6) | 2008/11/14 |
| 빌드가 먼저일까? 베이스라인 설정이 먼저일까? (8) | 2008/11/12 |
| Broken tree (0) | 2008/11/12 |
| 소프트웨어 프로젝트에서 빌드를 어떻게 하시나요? (8) | 2008/11/10 |
| Build Script를 C언어로 작성하기 (2) | 2009/02/24 |
|---|---|
| Daily Build를 하십니까? (0) | 2009/02/04 |
| 빌드와 컴파일의 차이 (6) | 2008/11/14 |
| 빌드가 먼저일까? 베이스라인 설정이 먼저일까? (8) | 2008/11/12 |
| Broken tree (0) | 2008/11/12 |
| 소프트웨어 프로젝트에서 빌드를 어떻게 하시나요? (8) | 2008/11/10 |
안녕하세요? 올리신 글 잘 읽었습니다. 그런데 얼핏 읽어서는 "왜" 문제가 되는지 감이 잘 오지 않습니다. 좀 더 구체적인 사례를 들어주시면 도움이 많이 될 것 같은데요... 감사합니다.
이병준님 안녕하세요.
왜 문제가 되는지는 본문에 있습니다만...
작은 프로젝트에서는 거의 문제가 되지 않기 때문에 문제를 겪어본 경험이 없거나 감이 안올 수도 있습니다.
원칙은 태깅(베이스라인)을 한것과 빌드하여 릴리즈한 것은 완전히 동일해야 합니다. 그것이 Configuration Identification의 기본 원칙입니다. 왜그런지는 감이 안오면 실제로 대규모 프로젝트를 해보던지 소프트웨어 개발 프로세스의 전과정을 모두 겪어보면 됩니다.
그렇지 않다면 당장 지금 문제를 겪을 일을 없을 겁니다.
이 글을 올린 이유도 이것이 이슈가 된다는 한 글을 보고 트랙백으로 올린 겁니다. ^^
네 본문에 무슨 말씀하신지는 알겠습니다만... 성공적으로 마쳐진 빌드에 태그를 설정하게 되면 태그 설정 시점에 소스 코드가 엄청나게 바뀌어 있게 된다고 하셨는데요. 이런 상황에서 문제가 될 만한 것을 생각해 본다면, 태그에 설정된 날짜가 실제 빌드를 시작한 날짜와 일치하지 않는다는 것 정도가 될 것 같은데, 그것이 문제가 된다는 말씀이신지요?
태그(베이스라인)은 기준선입니다. 그런데 빌드를 하고 태깅을 하면 그 기준선이 방금 빌드를 한 것과 다른 것이 될 수 있다는 뜻입니다. 태그(베이스라인)은 빌드와 완전히 일치를 해야 한다는 말입니다. 날짜가 같아야 한다는 것을 넘어서 Configuration Identification이 보장이 되어야 한다는 뜻입니다. ^^
친절한 답변 감사드립니다. 그런데 계속 궁금증이 생기네요. ^^; 트랙백 거셨다는 원글을 좀 알려주시면 이해하는데 도움이 될 것 같습니다. 미리 감사드립니다~
이병준님 트랙백 주소는 http://blog.naver.com/tb/sonjae76/10033773331 인데, 해당 포스트는 찾기가 어렵네요. - -;
참고로 SVN에서는 사후 태깅도 지원합니다.
SVN이 사후 태깅이 가능한 이유는 CVS 처럼 파일 단위의 버전 관리가 아닌 저장소 중심의 리비전을 관리하는 관계로 빌드 당시의 소스 리비전만 알고 계시면 언제든지 사후 태깅도 가능합니다.
그러나, 프로젝트의 중요성이 크다면 사전 태깅을 하거나 빌드 자동화 스크립트를 이용하여 자동 태깅이 되도록 하는 것이 좋습니다.
PinkPapa님 안녕하세요.
PinkPapa님은 이 팀블로그의 블로거 중 한분이시고 제가 알고 있는 최고의 빌드/릴리즈/SCM(Software Configuration Management)에 대한 전문가이십니다. 물론 최고의 개발자이면서요. ^^
좋은 지적이시네요. SVN은 Revision 번호만 알면 언제든지 태깅을 할 수 있죠.
제가 컨설팅을 할 때는 항상 원칙을 강조해서 설명을 합니다. 그래야 각인이 되더군요.
그렇게 해도 항상 예상치 못한 오류나 실수가 자주 생기더군요.
소프트웨어의 빌드가 안 되는 상황을 Broken Tree라고 합니다.
소프트웨어를 개발하는 회사라면 Broken Tree의 발생을 엄격하게 규제해야 합니다.
소스코드관리시스템 안의 소스코드는 항상 빌드가 가능한 상태로 존재해야 합니다.
그리고 언제든지 꺼내서 빌드를 하면 빌드가 되어야 합니다.
개발자들은 버그를 고치거나 새로운 기능을 추가할 때 소스코드관리시스템에서 최신 소스코드를 가져와서 소스코드를 고치고 개발자 테스트를 마친 후 소스코드를 체크인 하는 것만으로 임무가 끝나지 않습니다. 내가 소스코드를 수정하는 사이에 누군가가 다른 소스코드를 수정했을 수도 있으니 꼭 다시 한번 최신 소스코드가 빌드가 되는지 확인을 해야 합니다.
믈론 한두명이 개발한다면 이런 일은 거의 없겠지만, 꽤 큰 규모의 회사나 프로젝트에서는 종종 발생하는 문제 입니다.
항상 빌드가 가능한 소스코드를 유지하기 위해서 CI (Continuous Integration)솔루션을 사용하기도 합니다.
빌드가 안 되는 코드를 체크인한 개발자는 모든 업무를 제쳐놓고 빌드가 가능하도록 만들어야 합니다.
Broken Tree를 만드는 것은 개발자가 저지르는 가장 심각한 잘못 중의 하나입니다.
글이 좀 무거운데, 호랭이 블로그에서 재미 있는 카툰을 발견했네요. 재있게들 보세요.
| Build Script를 C언어로 작성하기 (2) | 2009/02/24 |
|---|---|
| Daily Build를 하십니까? (0) | 2009/02/04 |
| 빌드와 컴파일의 차이 (6) | 2008/11/14 |
| 빌드가 먼저일까? 베이스라인 설정이 먼저일까? (8) | 2008/11/12 |
| Broken tree (0) | 2008/11/12 |
| 소프트웨어 프로젝트에서 빌드를 어떻게 하시나요? (8) | 2008/11/10 |
| Build Script를 C언어로 작성하기 (2) | 2009/02/24 |
|---|---|
| Daily Build를 하십니까? (0) | 2009/02/04 |
| 빌드와 컴파일의 차이 (6) | 2008/11/14 |
| 빌드가 먼저일까? 베이스라인 설정이 먼저일까? (8) | 2008/11/12 |
| Broken tree (0) | 2008/11/12 |
| 소프트웨어 프로젝트에서 빌드를 어떻게 하시나요? (8) | 2008/11/10 |
지난 주말에 CruiseControl.NET을 이용하여 빌드환경을 구축했는데 오늘 이 포스트를 보니 딱 뭔가 박자가 맞는거 같은 느낌이...^^
하지만, 뒤에 붙을 것들(자동화 테스트, 배포환경등)이 없는 상태에서는 좀 썰렁하네요.
주변에 자랑했다가 "왜 이렇게 (쓸데없이) 빌드를 자주해요?" 뭐 이런 소리도 좀 듣구요 ^^;
헝그리맨님 반갑습니다.
다른 사람들도 헝그리맨님같이 좋은 툴이나 프로세스를 도입해도 이해를 잘 못하는 사람들의 반대에 많이 부딪히곤 합니다. 따라서 남을 설득할 수 있는 지식도 있어야 지요. 그렇다고 남과 부딪히지는 마세요.
CruiseControl은 CI솔루션 중의 하나죠. 소프트웨어는 구현 초기부터 지속적인 빌드가 되어야 하고 자동화 되어야 하는 것을 많은 사람들이 모르죠.
힘네시고요. 앞으로도 할게 많습니다. ^^
궁금하신 것이 있으면 언제든지 찾아오세요.
빌드의 중요성을 먼저 아는게 중요한 것 같습니다.
그리고 자동화된 빌드는 생산성을 대단히 높여줍니다. 하나하나 시도해보세요.
감사합니다.
안녕하세요.
최근이 이런 멋진 블로그가 있는걸 찾아서 정독 중에 있습니다.
최근 프로젝트 진행 중에 본문의 Daily Build라는 것 때문에 엄청 고생한 적이 있어 질문을 드립니다.
질문1. Daily Build라는 것을 통해 검증하는 범위가 어디까지인지 궁급합니다.
저는 핸드폰 제작 회사의 SW 부분에서 일을 하고 있는데요,
해당 SW는 핸드폰이라는 HW에 인스톨되어 동작시키기 전까진 정상동작 여부를 판단하기가 어렵습니다.
지난번 프로젝트부터 Daily Build라는 이름 하에 매일 Build를 하고 Bug를 찾아내는데요.
일단 문제로 대두된 것이
1. 개발 진행 중이라 완성이 안된 Function에 대한 테스트를 진행해서 Bug 아닌 Bug를 찾아서
담당자에게 메일 리포팅함으로써 이유없는 업무 로딩 생성
2. 이건 저희 회사의 문제일 수 있는데... 경험 없는 개발자들이 프로젝트에 대거 투입되면서
build error 대량 발생으로 수많은 재 build 상황 발생 -> 타 개발자도 모두 대기
이전의 Event Base로 Build를 하는 식으로 진행을 했을 때는
경험이 부족한 개발자가 프로젝트에 참여를 해도 상대적으로
그 사람으로 인해 발생하는 오버헤드가 크지 않았습니다.
암튼 개인적으로 build와 bug test는 분리되어야 한다고 생각합니다만,
한편 생각하면 build 해서 error 안나는 수준까지만 검증할꺼면,
왜 daily build를 한까 하는 의문도 들고
(build Error를 지속적으로 만드는 개발자와 같이 일하는 것도 고역이긴 합니다만)
그렇다고 bug 테스트를 병행하면 시간이 너무 많이 들고...
흠.. 개발자는 그나마 스펙(표준규격, 사업자 요구사항, etc...)을 아는데(모르는 사람도 많아졌...)
테스터는 그걸 모르는 경우가 많은 것도 문제이군요....
안녕하세요. 생각나무님
요즘 Daily Build에 대해서 오해를 하고 있는 사람들을 매우 자주 만납니다.
Daily Build의 원래 목적은 Broken Tree를 방지하는 겁니다. 즉, 프로젝트가 매일 빌드 가능한 상태를 유지하기 위한 겁니다. 여기에 추가로 Smoke Test, 정적테스트를 하는 경우도 있기는 하지만 이는 모두 자동화 된 것이고 인력을 투입해서 테스트를 하지는 않습니다.
테스트는 별도의 스케쥴을 정해서 진행합니다. 추가로 말씀을 드리면 Daily Build는 설계가 끝나고 구현이 시작되는 첫째날부터 가능해야 합니다. 이게 안되면 설계가 안된 겁니다.
테스터가 스펙을 모르는 것은 스펙을 적지 않았거나 부실하게 적었기 때문입니다. 그리고 테스터와 리뷰도 안된 겁니다.
스펙을 제대로 적지 않는 것이 프로젝트가 엉망으로 되는 가장 큰 이유입니다.
우리나라 SW 조직에서 관리자란 위치는 참 애매한 위치다. 물론 전문 관리자라면 얘기가 다르지만 왕년에 SW를 조금 개발해 본 경우가 애매하다. 개발팀에서 가장 경험이 많은 SW 개발자들이 주로 팀장이 되곤 한다. 이 경우와..
수많은 소프트웨어 회사들이 첫번째 성공을 거두고 나서 두번째 도약에 실패하고 사라져간다. 물론 첫번째 성공도 어렵지만 이미 성공의 경험이 있고 방법을 알고 있는 회사들이 두번째 또는 세번째에는 많이 실패하는 이유가 무엇일까?..
'소프트웨어 개발 방법이 얼마나 발전했는데 아직도 스펙을 제대로 작성하고 개발을 하는가?' 라고 하면서 스펙 작성에 반대하는 주장을 하는 사람들이 있다. 스펙, 설계를 작성하고 구현을 하고 테스트를 하는 방식으로 개발하는 것..
우리나라에서는 개발자들이 개발에 집중할 수 없는 환경인 곳이 참 많다. 정도의 차이가 있지만 거의 대부분이라고 봐도 무방하다. 그 결정적인 이유는 개발자 혼자서 북치고 장구치고 다해야 하는 상황이기 때문이다. 원래는 이렇게..
최근에 Software Architect의 정체에 대해서 혼란을 겪고 있는 것 만큼 Software 설계에 대해서도 혼동스러운 것은 마찬가지인 것 같다. 그래서 설계에 대해서도 깔끔하게 정의를 해보자. 흔히 설계에 관한 다음..
우리나라에서는 종종 SW Architect를 양성한다고 한다. 정부에서 막대한 예산이 지원도 되며 SW Architect를 양성하는 학원도 생기고 야단법석이다. 그럼 도대체 SW Architect는 무엇인가? SW Archi..
우리나라 대부분의 소프트웨어 회사들에게 가장 시급하게 필요한 것은 "기초 체력"이다. 히딩크가 우리나라 국가대표 축구팀을 처음 맞았을 때 강조한 것이 기초 체력이었다. 그전까지 우리는 국가대표 축구팀이 체력은 세계 어디를 내..
며칠 전 프로토타입에 관해 올린 글에 대해서 프로토타입 재사용에 대해서 여러 의견이 있어서 이 내용에 대해서 조금더 설명해보려고 한다. 2011/11/03 - [프로젝트/요구사항분석] - 프로토타입이란? 소프트웨어공학의 목적..
프로토타입 (경제/경영) 양산(量産)에 앞서 제작해보는 원형(原型)을 '프로토타입'이라 하는데, 프로토타이핑이란 개발자들과 사용자들의 의사소통상의 효과를 증진시키기 위하여 취하는 시스템개발상의 기법이다. 일반적인 분석방법을..
"협업은 말로 하는 것이 아니라 문서로 하는 것이다." 동서고금을 막론하고 개발자들은 적는 것을 싫어하고 또 잘 적지 못한다. 우리나라 개발자들은 그 정도가 훨씬 심하다. 우리나라에서는 회사가 크던 작던 상관없이 대부분 5년..
한방에 빌드 만들기.. 완전 순수히 귀찮아서 만들기 시작했는데 한번 스크립트로 만들고 나니 이거 없었으면 어떻게 했냐 싶습니다. 명령 한방으로 빌드, 셋업, CVS 관리까지 한번에 끝나니..
그래서 팀에 자주 하는 말이 있습니다. 프로그래머는 귀차니스트가 되어야한다. 반복적인 작업 귀찮아.. 자동으로 할 수 있는 방법없나?? 라고 말이지요.
아직 daily 빌드는 하지 못했는데, 글을 읽다가 다시 생각이 나네요.. 이것도 시도해봐야겠네요.
Whitekid님 안녕하세요.
귀찮아서 자동화하지 않는 개발자도 많습니다. ^^