하위 페이지
  • 뭔가 미심쩍은 메시지는 반드시 원인을 찾아 해결하자.
메타 데이터의 끝으로 건너뛰기
메타 데이터의 시작으로 이동

지난 번 maven 로컬 저장소에 jar 파일 및 jar source 파일 배포 글은 Windows 환경에서 개발 환경을 세팅하고 jar 파일에 대한 의존 관계를 추가하는 부분을 다루었다. 개인적으로 진행하는 프로젝트가 하나 있는데 원격 저장소를 설치하기는 뭐해서 로컬 저장소에 maven 로컬 저장소에 jar 파일 및 jar source 파일 배포 글에서 다룬 방법으로 jar 파일을 관리하고 있다.

오늘 주말이고 해서 오랜만에 개인 프로젝트나 진행하려고 로컬 저장소에 jar 파일을 배포하고 기능을 추가하려고 했다. 그런데 집의 개발 PC는 리눅스이다. Windows 환경에서 만들었던 bat 파일을 sh 파일로 만든 후 다음과 같이 call 명령을 제거하고 실행했다.

mvn install:install-file  -Dfile=org.eclipse.mylyn.wikitext.core_1.7.0.I20120625-0903.jar -Dsources=org.eclipse.mylyn.wikitext.core_1.7.0.I20120625-0903-source.jar -DgroupId=org.eclipse.mylyn.wikitext -DartifactId=core -Dversion=1.7.0 -Dpackaging=jar

mvn install:install-file  -Dfile=org.eclipse.mylyn.wikitext.confluence.core_1.7.0.I20120625-0903.jar -Dsources=org.eclipse.mylyn.wikitext.confluence.core_1.7.0.I20120625-0903-source.jar -DgroupId=org.eclipse.mylyn.wikitext -DartifactId=confluence -Dversion=1.7.0 -Dpackaging=jar

로컬 저장소에 jar 파일 배포는 정상적으로 잘 되었다. jar 파일은 core와 confluence 두개이다. 그런데 명령을 실행하는 중에 다음과 같이 메시지가 보였지만 jar 파일이 로컬 저장소에 배포가 잘 되었기 때문에 무시하고 넘어갔다.

./deploy-lib.sh: 줄 2: $'\r': 명령어를 찾을 수 없음

Windows 파일을 그대로 리눅스로 옮기다보니 \r을 명령으로 인식하는구나 정도로 생각했다. 그리고 프로젝트에서 "mvn eclipse:clean eclipse:eclipse"을 실행했다. 그런데 왠 걸 core jar 파일을 찾을 수 없단다. 분명 오타도 없고, Windows 환경에서는 잘 되던 기능이다. 토요일 아침에 가벼운 마음으로 기능 추가하나 하려고 들어왔는데 처음부터 짜증이 밀려온다. 또 다시 해결책을 찾기 위한 삽질이 시작되었다. 이놈의 삽질 인생.

그렇다면 원격 저장소에서 찾을 수도 있으니 강제로 로컬 저장소에서만 찾도록 offline 모드인 "mvn eclipse:clean eclipse:eclipse -offline"을 실행해 본다. 역시나 찾을 수 없단다. 여기 저기 인터넷 검색을 해본다. 그래도 해결책은 보이지 않는다. 그렇게 30분 정도 날려먹고 처음부터 하나씩 다시 시작해 보자로 돌아갔다.

먼저 core와 confluence jar 파일 모두 문제인지 확인하기 위해 core 의존 관계를 제거하고 confluence만 남겨 놓은 후에 빌드를 했다. 어 근데 성공한다. 이건 뭐지. 둘 다 똑같은 방식으로 배포를 했는데... 그리고 core를 배포한 로컬 저장소로 이동해 jar 파일을 확인해 봤다. 그런데 jar 파일 이름이 좀 다르다. jar 파일 이름이 core-1.7.0.jar?로 나온다. 앗 이건 뭐지. 그 순간 앞에서 jar 파일을 로컬 저장소에 배포할 때 봤던 메시지가 떠오른다. 혹시나 그 메시지에서 뭔가 해결책을 찾을 수 있지 않을까? sh 파일에서 \r을 제거하고 다시 배포를 한다. 경고 메시지 없이 정상적으로 배포가 된다. 그리고 "mvn eclipse:clean eclipse:eclipse"을 다시 실행했더니 정상적으로 빌드가 된다. 이런 망할..

아무렇지 않다고 무시한 메시지인데 이 메시지를 무시함으로써 나의 소중한 30분을 날려 먹었다. 그리고 기능을 추가하려는 최초의 목적으로 사라지고 그 시간에 이렇게 글이나 쓰고 있다.

소프트웨어를 개발하다보면 마음 속 뼈저리게 느끼는 몇 가지가 있다.

  • 많은 시간을 투자해도 문제의 원인을 찾을 수 없을 경우 너무 문제에 집착하지 말자. 문제에 너무 집착하다 보면 사고의 폭이 좁아져 해결책을 찾기 더 힘들어진다. 이 때는 정신적인 여유를 가질 수 있도록 잠시 쉬거나 저녁 시간이라면 퇴근해 버리는 것이 더 좋다. 실제로 나는 많은 경우 퇴근할 때는 해결하지 못했던 버그나 이슈들을 출근 후 10분 이내에 찾은 경우가 무수히 많다.
  • 컴퓨터가 우리에게 이야기해 주는 경고 메시지나 에러 메시지 하나라도 무시하지 말자. 이렇게 무시한 메시지들이 나중에는 더 큰 문제의 원인이 되어 해결책을 찾는데 참 많은 시간을 필요로 하게 된다. 메시지가 발생할 때는 왜 그런 메시지가 발생하는지 확인하고 해결할 수 있다면 가능한 해결하도록 한다.
  • 문제를 찾아도 찾아도 해결책을 찾을 수 없다면 다시 원점으로 돌아가 단계적으로 접근하는 것이 해결책을 찾는 더 빠른 지름길이다. 지금까지 개발하거나 작업한 것이 아까워 원상태로 복귀하기 힘들겠지만 문제가 발생하기 이전 상태로 원복한 후 작업을 하는 것이 더 빠르다는 것을 종종 느낀다.

프로그래밍이라는 것이 해결책을 찾으면 아무 것도 아닌 것들이 해결책을 찾기 전까지는 많은 스트레스와 짜증 유발한다. 하지만 문제의 해결책을 찾았을 때의 짜릿함이 있기 때문에 힘들더라도 계속할 수 있지 않을까라고 생각한다.

기능 추가는 무슨... 토요일 아침 날려 먹었으니 그냥 쉬련다. 주말에는 쉬라는 신의 계시인가보다.

  • 레이블 없음