Skip to content


C++ 프로그래머의 일상: 2008년 3월 23일

CI 서버가 프로젝트 하나를 nightly build 작업에서 빼먹는다

팀에서 사용하고 있는 CI[1]서버가 등록되어있는 작업 중에 유독 한 개만 nightly build 안하고 넘어가는 것.

그래서 방금 커밋하나 해놓고 빌드/테스트 되는 동안 서버 로그를 들여다보는데, 이게 왠걸.

ThoughtWorks.CruiseControl.Core.CruiseControlException: Source control operation failed: svn: (후략)

이런 로그가 매 nightly build마다 들어가 있더라. 대체 이게 왜 실패했을까 이유를 곰곰히 생각해봤는데,

  • 해당 프로젝트를 메인 소스 브랜치에 넣을지 확정되지 않았다
  • 그래서 내 로컬 컴퓨터에 SVN/trac을 만들어서 임시로 쓴다
  • CI 서버는 svn checkout을 내 로컬 컴퓨터에 요청한다
  • 빌드 시간대는 새벽 4시
  • 내 컴퓨터는 4시간 넘게 idle하면 Suspend 상태로 전환된다

새벽 4시라면 내가 12시에 퇴근하지 않고서야 내 컴퓨터는 suspend 상태고 -> SVN checkout 요청은 그대로 묵살. 그리고 CI 서버는 SVN 요청이 안되니 해당 프로젝트의 nightly build를 제대로 수행할 수가 없다 -_-;

C++ 의 bit-wise-and 연산자는 hat(^)이 아니다

mod 64, div 64를 빨리 수행해야할 코드가 좀 있어서,

  • value % 64 대신에 value ^ 64 value ^ 63 (잘못된 연산임)[2]
  • value / 64 대신에 value >> 6[3]

를 썼다. 그런데 이게 왠걸, UnitTest 에서 계속 실패했다는 메시지를.

고민 좀 하다가 짱돌 하나보단 k개가 낫지 않나하고, IRC에 붙여넣었다. 그리고 한방에 문제를 파악했다. 대화 한토막.

@rein_uriel | x mod 64가
@rein_uriel | x ^ 0x3F
@rein_uriel | 랑 다른가효
@rein_uriel | …
@p_n_a___ | x mod 64는 x를64로 나눈 나머지 인건 알겠는데
@x_n_s_z_ | x xor 0x3F 이고,
@rein_uriel | ^ 가 and가 아니군

… 흔히 논리 연산에서 AND의 의미로 사용되고 hat(^)으로 표시하는 ^ 는 C/C++의 bitwise-XOR 연산자다. Orz

  1. Continuous Intergration; 지속 통합. 코드 베이스의 변화를 지켜보고 있다가 프로그래머가 코드를 변경하고 커밋하면 이걸 체크아웃해서 빌드/테스트/deploy/문서생성 … 등 일련의 작업을 수행해준다. 실제로 중요한 부분은 빌드/테스트 결과를 커밋단위마다 반복해준다는 점 []
  2. 물론 이 연산자는 틀렸다. &를 써야함 []
  3. 2의 거듭제곱으로 표현되는 숫자로 나누거나 나머지를 구하는 것은 비트연산으로 바꾸기 쉽다 []
이 저작물은 별도로 명시하지 않은 경우, Creative Commons Attribution-Share Alike 3.0 Unported License에 따라 이용하실 수 있습니다.

No related posts.

Posted in Computer.

Tagged with , , .


7 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. lapiz says

    니가 그러고도 C/C++ 프로그래머냐.. ㅡ.ㅡ

  2. rein says

    최근 비트 연산을 안했더니(변명; /운다)

  3. 최치선 says

    헐… ^는 보통 power랑 햇갈리는건 봤어도 [..]

  4. rein says

    …**이랑 power는 헷갈려도 ^를 and랑 헷갈려본건 처음인듯[...]

  5. Muzeholic says

    난 뭔지 모르겠지만 일단 분위기가 라인까인듯 하니 동참.

  6. JM says

    구경하던 사람 A입니다만, A mod 64 하시려면 A & 64 가 아니라 A & 63 하셔야.. ^^;;

  7. rein says

    네 그것도 그렇네요 :)



Some HTML is OK

혹은 트랙백 보내기 / or, reply to this post via trackback.