2009년 09월 15일
우분투에 오라클 설치하던 날...
부제 : 오라클은 왜 우분투를 지원하지 않는가?
IT 회사 그중에서도 소프트웨어 개발 업계에 투신한 신입 여성 개발자 J모양. 결코 야근을 원치 않았고, 회사에서도 결코 강요한 바 없으나, 세계적 기업 오라클의 무심하고 시크한데다 편협하기 까지한 리눅스 지원 정책으로 인해 어이 없게 야근하게 된 사연을 공개한다.
야근 없는 회사 만들기
우리 회사는 절대 야근을 강요하지 않는다. 늦게까지 일하면 다음 날 낮 근무에 영향을 주기 때문에 가급적이면 낮 시간에 충실하게 일할 것을 강조한다. 야근을 안하려면 어찌해야 하는가? 일이 밀리지 않도록 관리를 잘하는게 중요하다. 업무 분량을 예측하고, 실행하고... 예측과 실행 사이에 어느 정도 격차가 발생하는지 측정해야 한다. 그리고, 시행착오와 경험을 통해 얻은 정보를 통해서 보다 정확한 time table을 설계하는 것이 중요하다.
말로 떠드는 것보다 한 번 실행하는 것이 더 나은 것이라서, 금요일이면 한 주간에 했던 일을 리뷰하고, 월요일 아침에 출근하면 금주에 해야 할 일들에 대해서 개별적으로 면담하면서 계획을 청취하고, 목표를 조정 한다. K 책임은 이번 주에 프로젝트 요구분석서를 제대로 써보겠다는 목표를 세웠고 주중에 한 번 내부 발표를 해보고 보완하기로 했다. 신입사원 K는 기획 업무에도 관심이 있었기 때문에 동영상 광고 서비스 업무에 대한 기획 초안 작성을 맡겼다. 또 다른 신입 B는 WebKit을 윈도우 환경에서 빌드 해보고 성공하면 그 다음으로 리눅스 환경으로 이식하는 작업을 하기로 했다. 다른 신입보다 일주일 먼저 출근한 J는 웹 개발 환경 구축을 위해서 리눅스에 오라클을 설치해 보겠다 한다. 원래 K 책임이 하기로 했던 일이지만, K 책임이 처음 접해보는 요구분석 업무에 머리를 싸매고 있으니, J가 경험은 없지만 한번 도전해 보겠다고 나선 것이다. 여기까지는 좋았다. 적어도... 이번 주를 야근하며 시작할 가능성은 없어 보였다.
눈앞에 놓인 것보다 중요한 것은 전략적 사고
팀원들의 주간 목표를 설정해주고, 개별적으로 작업 과정에 대한 세세한 지침을 내려줄 차례다. 우선 K 책임은 지난 주에 쓰다만 요구분석서를 다시 작성해 왔는데, 프로젝트 목표에 대한 상세 분류가 불명확하고, 세부 기능에 대한 명세가 미흡하다. 1년 동안 거의 매일 이런저런 코치를 받아온 터라 길게 얘기 할 필요 없이 지적 사항을 이해하고 자리로 돌아간다. 돌아가서 자리에 앉자 마자... 웃대 부터 브라우저에 띄우는 건... 뭐... 업무 시간에 여유를 가질 수 있는 거니. (설마 보조 모니터를 좋은 걸로 바꾸어 달라는 이유가 웹 서핑 사이트를 잘 보기 위해서는 아니겠거니... 킁...)
K에게는 고객이 작성해준 기획서 초안을 건네주고 읽어본 후, 이해한 바를 설명하라고 했다. 약간의 시간을 두고 다른 일을 하다가 기획서를 잘 읽고 있나 옅보니... 데이터 흐름도에 눈이 꽂혀서 십 수단계에 이르는 미로 속을 헤매고 있다. 엄훠... 애야, 숲을 보라고 했더니 왠 나무들 사이에서 숨바꼭질 중이냐? 기획서의 첫 페이지를 보거라 사업 제목이 의미하는 바가 무어냐, 고객은 어떤 목표와 전략을 가지고 있다고 생각하느냐... 세부적인 작업, 기능 하나, 기획서 페이지 하나에 담긴 문구와 그럴싸 해보이는 그림들에 시선을 두지 말고, 무엇을 버리고 무엇을 남겨야 할지를 이야기 한다. 전략적 사고의 중요성을 잘 납득 시켰다. 그런데, 정작 내가 저녁에 삽질 할 줄을 알았겠는가?
리눅스에 DB! 우분투에 오라클?
지난 주에 웹 서비스 개발을 위한 '개발 환경 구축'이라는 주제를 가지고, 신입 직원 대상으로 교육을 하면서 주로 설명한 내용들은 자바는 무엇인지, 웹 서버, 웹 어플리케이션 서버, IDE 등의 다양한 개발 플랫폼 및 도구의 용도와 상호 관계를 설명했다. 또한, 실제 설치하는 과정에 대해 문서화 하는 실습을 시켰다. 템플릿을 이용한 빠른 문서 작성 요령, 레퍼런스(reference)와 가이드(guide) 문서를 나누어서 작성하는 이유 등도 함께 익혔다. 이번 주에 배울 내용은 스트럿츠 및 스프링 프레임워크를 왜 써야 하고, 어떻게 다루는가를 배우게 되는데, 교육에 더불어 J가 개발 실습을 위해 DB를 준비하기로 한 것이다. 원래 DB를 준비 하기로 했던 K 책임은 리눅스에 DB 설치하는 정도의 가이드는 인터넷을 검색하면 많이 나와 있을 것이라고 말한다. 개발 장비는 다음 주에 주문할 예정이니 그전에는 노트북 PC에 VMWare를 설치하고, 그 안에 리눅스를 다시 설치하고, 또 그 안에 오라클을 설치하면 될 거라고 차분하게 신입에게 가이드를 해주었다. (VMWare를 사용해서 개발 환경을 구성하는 것을 거의 표준 프로세스로 정착 시키고 있다.) 재앙은 그렇게 아무렇지도 않게 주고 받는 대화 쏙에서 싹트고 있었다. 하필이면, 우분투(ubuntu)를 설치하라고.... 별 생각 없이 나보다 리눅스 경험이 많은 K의 의견을 승인했을 뿐이고...
단지 규정을 지키기 위해 회사에 머물 필요는 없다.
오후에 고객과 신규 프로젝트에 대한 기획 회의가 있었다. 4시에 시작한 회의는 30분도 걸리지 않았고, 기획 회의 견학 차 따라나온 신입 사원 K는 현장에서 퇴근 시켰다. 다시 회사에 들어가서 한 시간 남짓 앉아 있어봐야 얼마나 대단한 일을 하겠는가... 관리는 자기 스스로 해야지 남의 눈치 보면서 일하지는 말라는 게 우리 개발팀의 첫번째 근무 수칙이다. 두번째 수칙은 업무 능력에 대한 평가는 동료에게 맡기고 자신을 과시하거나, 과신하지 말라는 것이다. 회의 결과를 통보하고, 문서 정리할 것들 약간 작업하려고 혼자 터벅터벅 걸어 사무실에 들어 왔다. WebKit 빌드 하는 중인 B와 Oracle 설치하느라 정신없는 J는 하루 종일 심각하게 모니터를 쏘아보고 있었나 싶다. 다들 표정들이 편해 보이지 않는다.
지나친 고집은 야근을 낳는다.
플랫폼은 다르지만 둘 다 빌드/셋업 과정에서 예상치 못한 문제로 씨름하고 있다. 분명히 매뉴얼 대로, 혹은 인터넷에서 찾은 가이드를 따라하고 있지만, 낯선 오류 메시지를 접하고, 어찌할바를 모르고 있다. 예상한 대로다. 세상에 모든 빌드, 혹은 모든 소프트웨어 개발이 맘 먹은 대로 된다면, 벌써 인공지능 까지 개발되고 인간들은 편안히 로봇의 시중을 받으며, 하루종일 노래나 부르고 있으리라. 그러나, 현실의 소프트웨어 개발자는 오히려 기계에 매달려서 속썩이고 말 안듣는 기계를 달래고 있다. 소프트웨어는 강아지 보다, 고양이에 가깝다. 늘 제멋대로 이거든...
B는 그래도 혼자서 결과를 낼 수 있을 듯 한데, J는 아무래도 아슬아슬하다. B는 대학원 졸업을 했고, 상용에 가까운 패키지를 개발해 본 경험이 있지만... J는 실무 경험이 있다고 해도, 운영체제에 DB를 설치해본 경험은 전무하다. 인터넷에 나와 있는 매뉴얼 대로 작업해도 자꾸 알 수 없는 오류가 나온다고, 거의 끝나 가는데 마지막 고비를 넘기지 못하고 있다고 난처한 표정이다. 이걸 믿어야 하나 말아야 하나? 초심자는 늘 자신이 충분한 능력을 가지고 있고, 한 고비만 넘기면 산꼭대기에 오를 수 있다고 믿는다. 허나, 실제로는 산 중턱도 오르지 못한 경우가 태반이다. 저녁이나 같이 먹고, 잠시 트러블 슈팅(trouble shooting) 정도 해주리라 마음 먹었는데, 정신 차리니 저녁 11시 였다.
단 하나의 명령을 실행하더라도, 확인 사살은 필수.
J는 오라클을 설치하기 위해 다음과 같은 작업을 차분하게 진행했다. 정말 신중하게... 스스로가 생각하기에 말이다.
- 개인 작업용 노트북에 가상 운영체제를 실행할 수 있도록 우선 VMWare를 설치했다.
- VMWare 를 실행하고, 우분투 리눅스를 설치했다.
- 가상 리눅스 운영체제에 접속한 후, 'apt-get install' 명령을 이용해 빌드를 위한 make, gcc, stdc++ 등 각종 컴파일러, 빌드 명령, 라이브러리 등을 설치했다.
- 오라클 설치 파일을 오라클 홈페이지에서 다운로드 받고, 압축을 해제했다. (CD 2장 반 분량)
- 오라클 데이터베이스 설치를 위한 각종 환경 변수를 설정했다.
- 오라클 설치 명령인 runInstaller를 실행했다.
앞서의 과정은 잘 진행한 것 같은데, runInstall 명령을 실행하니, 62번째 라인에서 문법 오류 있다는 메시지가 출력된단다. 무엇이 문제일까? 라인 번호가 표시된다는 것은 해당 명령이 쉘 스크립트(shell script)로 짜여 있다는 얘기다. vi 편집기로 열고, 주욱 둘러 보면서... 배치 명령 파일(batch file)의 개념과 쉘 스크립트라는 인터프리터(interpreter) 언어의 특징에 대해 설명해주었다.
에러 메시지 : ./runInstaller: 62: Syntax error: word unexpected (expecting ")")
오류가 발생한 라인을 살펴보니, 특정 명령을 실행하고, 실행 결과에 따라 환경 변수를 설정하는 if 비교 구문이다. 비교 구문 자체가 문법적으로 오류가 없어 보이는데 왜 오류가 발생할까? if 구문 보다 앞선 코드를 살펴보니... rpm 이라는 명령을 실행하고 그 결과 값을 변수에 담고 있다. 실험 삼아 rpm 명령을 copy 해서 명령창에서 실행해 보았다. 그런 명령은 없단다. 응...?
J는 오라클 설치 준비 과정에서 apt-get install 명령으로 설치했다고 했으니, 사람이 옳은가 혹은 머신이 맞는가...? 난 빌드하거나, 컴파일 하는 작업 시에는 절대 사람을 믿지 않는다. 그게 내 마누라라고 할지라도 ... (실제 마누라는 없지만...) 따라서, 모든 설치 내역을 하나씩 확인해 보았다. 절반 가량의 빌드 도구가 제대로 설치되어 있지 않다. 히스토리를 살펴 보니 일괄 입력하다가 오타를 두루두루 낸 것이다. 고수들 보기에 어이 없는 실수라고 생각할지 모르지만, 누구나 이런 올챙이 시절을 겪는 법이다. 세월 지나면 다들 잊고, 초보 개발자들을 멍청하다 비웃는데 난 이런 걸 부끄러워 해야할 일이라고는 생각하지 않는다. 사람이 완벽할 수 있다면, 기계에 의존하지 않았을 것이다. 원래 사람은 부정확하게 타고 난 것이다.
설치 안된 것들을 하나씩 짚어주고 있으니, J는 창피한 생각이 들었는지 키보드를 냅다 뺏어다가 직접 남은 것들을 확인하고 설치하겠노라고 덤빈다. 아서라... 설치 못한 것을 부끄러워 할 게 아니라, 어떻게 설치 안된 것들을 짚어 냈는지 그 과정을 배우는데 집중하라고 타일렀다. 당장 못다한 것들을 매꾸는 것으로 작은 창피를 모면할 수 있지만, 문제의 원인을 추적하는 과정을 배우지 못하면 영영 코더의 수준을 벗어나지 못할 것이다.
유닉스, 리눅스 개발자들은 변태?
쉘 스크립트 언어는 자바나 C언어와는 표기법이 상당히 다르다. 그래서 쉘 스크립트 언어를 가르치다 보면, 이거 참 리눅스 개발자들이 변태 같지 않냐는 농담을 한다. 예를 들자면, 쉘 스트립트에서 if 블럭의 시작은 if 그 자체인데, 끝나는 표시는 fi 를 쓴다. 이걸 뭐라고 읽어야 할까? 그리고 ''는 인용 부호 혹은 문자열을 감싸는 부호인데, ``(back quote)는 문자열에 포함된 문장을 실행하라는 표시인거다... 언듯 봐서는 똑같아 보인다. 간결함을 지나치게 강조하다 보니, 모든게 난해해지고 말았다고 해야하나?
어쨋든 앞서 설치되지 않은 것들을 모두 설치하고 나서는 다시 runInstaller를 실행해보니 또 다른 오류가 발생한다. 이번 오류 메시지는 좀 더 단순하다.
에러 메시지 : DISPLAY is not set
이게 무슨 오류 일까? 메시지만 읽고 원인을 파악해 보라고 물었다. J는 한참을 생각하더니, DISPLAY라는 명령을 설치하지 않아서 그런게 아닌가? 라고 말한다. 혹시 대문자로 이루어진 유닉스/리눅스 명령을 본 적 있냐고 물으니 없다라고 한다. 그러니 저건 명령이 아니다. 모든 문자가 대문자로 적혀 있으니, DISPLAY 환경 변수가 선언되어 있지 않다는 뜻이라고 설명해 주었다. 자연스레 J의 입에서는 '리눅스/유닉스 개발자는 전부 변태'라는 투덜 거림이 배어 나온다. 아니, 저걸 구체적인 설명도 없이 저런 의미를 알아 차리는 사람들은 정상은 아니잖아요 라는 표정이다.
책을 통해 많은 것들을 공부할 수 있지만, 책에 나와 있는 모든 내용이 실전에서 꼭 필요한 것은 아니다. 책에 적혀 있는 것은 사소한, 불필요할 수 있는 모든 정보를 포함한다. 또한, 책을 통해 전달 되는 정보는 늘 낡은 것들이다. 실전에 강한 개발자가 되려면 책을 많이 읽는 것보다 이런 관습적인 기법들을 체험하며 익히려는 노력이 중요 하다. 한마디로 말해서 '눈썰미'를 단련해야 한다고 할까? 책 보다 가까이 해야할 것은 man 명령과 google 검색 창이다. 그리고, 실전을 경험하면서 사용하게 되는 모든 명령어, 도구, 구문들을 빠짐없이 기록하려 애써야 한다. 실전 경험이야 말로 가장 좋은 스승이다.
표준 C++ 라이브러리가 없다?
위에 소개한 것들 외에도 이런 저런 오류들을 해결하고 겨우 runInstaller가 실행되게끔 했지만, 이번에는 stdc++....so 파일이라는 걸 찾지 못한단다. LD_LIBRARY_PATH 환경 변수를 확인하고, 리눅스 운영체제 전체를 find 명령으로 뒤져봐도 빌드 프로그램이 원하는 파일은 존재하지 않는다. 얼쑤~ 이건 좀 심각하다. 구글 신의 도움을 요청하니, 인터넷 전체에 오라클 빌드 명령이 요구하는 파일이 없어서 발생하는 문제에 대한 페이지가 겨우 2천여개 란다. 조짐이 좋지 않다. 이건 상당히 드문 유형의 오류라는 사실을 나타내는 간접 증거다.
검색 범위를 좁혀서, 아예 stdc++.so 파일을 직접 구해서 우분투에 강제 설치해 보기로 했다. 그런데, rpm package 다운로드 사이트를 뒤져보니 ubuntu i386 distribution 을 위한 표준 C++ 라이브러리 중에서 우리가 원하는 버전이 없다! 느낌이 좋지 않다. 우분투에서 오라클 설치에 실패할 가능성이 높다는 얘기다. 조짐이 좋지 않으니, 일단 물러서고 DB를 꼭 리눅스에 설치할 필요도 없으니, 내일 출근해서 윈도우에 설치하자고 제안했다. J는 자신이 실패한 것을 인정하고 싶지 않은지, 이것저것 다운로드 받아서 설치해보고 이마를 찡그리기도 한다. 주름살 생기니 얼굴 펴라고 한마디 하는데 여전히 마뜩찮은 표정을 짖는다.
오라클은 공식적으로 우분투를 지원하지 않는다.
저기 건너편에 보니 B는 WebKit을 윈도우에서 빌드하다 계속 막힌다고 혼자 씨름하고 있다. 시계를 보니 10시 반이 넘었고... 잠시 혼자 씨름하는 J를 내버려 둔 채 내 자리로 돌아와서 미투데이에 예상치 못한 야근을 하고 있다는 글을 짧게 올렸다. 그리고 10분쯤 지나고... 한국 오라클에서 근무하시는 분의 답글을 올렸다. 우분투는 공식적으로 지원하지 않는뎁쇼! 다들 짐싸라고 했다. 집에 가자.
K 책임은 어째서 우분투에 오라클을 설치하라고 했을까?
삽질은 좀 했지만 ... 그나마 얻은 것도 많은 날이다. 그런데, K 책임은 왜 우분투에 오라클을 설치하라고 했을까? J 가 묻는다. 내가 대답했다. K 책임이 리눅스 개발자인건 맞는데, 최근 2년 동안 서버 패키지 설치해본 적은 없어... J는 허탈히 웃으며 한마디 날린다.
'앞으로 귀에 필터를 달아야 겠어요....'
IT 회사 그중에서도 소프트웨어 개발 업계에 투신한 신입 여성 개발자 J모양. 결코 야근을 원치 않았고, 회사에서도 결코 강요한 바 없으나, 세계적 기업 오라클의 무심하고 시크한데다 편협하기 까지한 리눅스 지원 정책으로 인해 어이 없게 야근하게 된 사연을 공개한다.
야근 없는 회사 만들기
우리 회사는 절대 야근을 강요하지 않는다. 늦게까지 일하면 다음 날 낮 근무에 영향을 주기 때문에 가급적이면 낮 시간에 충실하게 일할 것을 강조한다. 야근을 안하려면 어찌해야 하는가? 일이 밀리지 않도록 관리를 잘하는게 중요하다. 업무 분량을 예측하고, 실행하고... 예측과 실행 사이에 어느 정도 격차가 발생하는지 측정해야 한다. 그리고, 시행착오와 경험을 통해 얻은 정보를 통해서 보다 정확한 time table을 설계하는 것이 중요하다.
말로 떠드는 것보다 한 번 실행하는 것이 더 나은 것이라서, 금요일이면 한 주간에 했던 일을 리뷰하고, 월요일 아침에 출근하면 금주에 해야 할 일들에 대해서 개별적으로 면담하면서 계획을 청취하고, 목표를 조정 한다. K 책임은 이번 주에 프로젝트 요구분석서를 제대로 써보겠다는 목표를 세웠고 주중에 한 번 내부 발표를 해보고 보완하기로 했다. 신입사원 K는 기획 업무에도 관심이 있었기 때문에 동영상 광고 서비스 업무에 대한 기획 초안 작성을 맡겼다. 또 다른 신입 B는 WebKit을 윈도우 환경에서 빌드 해보고 성공하면 그 다음으로 리눅스 환경으로 이식하는 작업을 하기로 했다. 다른 신입보다 일주일 먼저 출근한 J는 웹 개발 환경 구축을 위해서 리눅스에 오라클을 설치해 보겠다 한다. 원래 K 책임이 하기로 했던 일이지만, K 책임이 처음 접해보는 요구분석 업무에 머리를 싸매고 있으니, J가 경험은 없지만 한번 도전해 보겠다고 나선 것이다. 여기까지는 좋았다. 적어도... 이번 주를 야근하며 시작할 가능성은 없어 보였다.
눈앞에 놓인 것보다 중요한 것은 전략적 사고
팀원들의 주간 목표를 설정해주고, 개별적으로 작업 과정에 대한 세세한 지침을 내려줄 차례다. 우선 K 책임은 지난 주에 쓰다만 요구분석서를 다시 작성해 왔는데, 프로젝트 목표에 대한 상세 분류가 불명확하고, 세부 기능에 대한 명세가 미흡하다. 1년 동안 거의 매일 이런저런 코치를 받아온 터라 길게 얘기 할 필요 없이 지적 사항을 이해하고 자리로 돌아간다. 돌아가서 자리에 앉자 마자... 웃대 부터 브라우저에 띄우는 건... 뭐... 업무 시간에 여유를 가질 수 있는 거니. (설마 보조 모니터를 좋은 걸로 바꾸어 달라는 이유가 웹 서핑 사이트를 잘 보기 위해서는 아니겠거니... 킁...)
K에게는 고객이 작성해준 기획서 초안을 건네주고 읽어본 후, 이해한 바를 설명하라고 했다. 약간의 시간을 두고 다른 일을 하다가 기획서를 잘 읽고 있나 옅보니... 데이터 흐름도에 눈이 꽂혀서 십 수단계에 이르는 미로 속을 헤매고 있다. 엄훠... 애야, 숲을 보라고 했더니 왠 나무들 사이에서 숨바꼭질 중이냐? 기획서의 첫 페이지를 보거라 사업 제목이 의미하는 바가 무어냐, 고객은 어떤 목표와 전략을 가지고 있다고 생각하느냐... 세부적인 작업, 기능 하나, 기획서 페이지 하나에 담긴 문구와 그럴싸 해보이는 그림들에 시선을 두지 말고, 무엇을 버리고 무엇을 남겨야 할지를 이야기 한다. 전략적 사고의 중요성을 잘 납득 시켰다. 그런데, 정작 내가 저녁에 삽질 할 줄을 알았겠는가?
리눅스에 DB! 우분투에 오라클?
지난 주에 웹 서비스 개발을 위한 '개발 환경 구축'이라는 주제를 가지고, 신입 직원 대상으로 교육을 하면서 주로 설명한 내용들은 자바는 무엇인지, 웹 서버, 웹 어플리케이션 서버, IDE 등의 다양한 개발 플랫폼 및 도구의 용도와 상호 관계를 설명했다. 또한, 실제 설치하는 과정에 대해 문서화 하는 실습을 시켰다. 템플릿을 이용한 빠른 문서 작성 요령, 레퍼런스(reference)와 가이드(guide) 문서를 나누어서 작성하는 이유 등도 함께 익혔다. 이번 주에 배울 내용은 스트럿츠 및 스프링 프레임워크를 왜 써야 하고, 어떻게 다루는가를 배우게 되는데, 교육에 더불어 J가 개발 실습을 위해 DB를 준비하기로 한 것이다. 원래 DB를 준비 하기로 했던 K 책임은 리눅스에 DB 설치하는 정도의 가이드는 인터넷을 검색하면 많이 나와 있을 것이라고 말한다. 개발 장비는 다음 주에 주문할 예정이니 그전에는 노트북 PC에 VMWare를 설치하고, 그 안에 리눅스를 다시 설치하고, 또 그 안에 오라클을 설치하면 될 거라고 차분하게 신입에게 가이드를 해주었다. (VMWare를 사용해서 개발 환경을 구성하는 것을 거의 표준 프로세스로 정착 시키고 있다.) 재앙은 그렇게 아무렇지도 않게 주고 받는 대화 쏙에서 싹트고 있었다. 하필이면, 우분투(ubuntu)를 설치하라고.... 별 생각 없이 나보다 리눅스 경험이 많은 K의 의견을 승인했을 뿐이고...
단지 규정을 지키기 위해 회사에 머물 필요는 없다.
오후에 고객과 신규 프로젝트에 대한 기획 회의가 있었다. 4시에 시작한 회의는 30분도 걸리지 않았고, 기획 회의 견학 차 따라나온 신입 사원 K는 현장에서 퇴근 시켰다. 다시 회사에 들어가서 한 시간 남짓 앉아 있어봐야 얼마나 대단한 일을 하겠는가... 관리는 자기 스스로 해야지 남의 눈치 보면서 일하지는 말라는 게 우리 개발팀의 첫번째 근무 수칙이다. 두번째 수칙은 업무 능력에 대한 평가는 동료에게 맡기고 자신을 과시하거나, 과신하지 말라는 것이다. 회의 결과를 통보하고, 문서 정리할 것들 약간 작업하려고 혼자 터벅터벅 걸어 사무실에 들어 왔다. WebKit 빌드 하는 중인 B와 Oracle 설치하느라 정신없는 J는 하루 종일 심각하게 모니터를 쏘아보고 있었나 싶다. 다들 표정들이 편해 보이지 않는다.
지나친 고집은 야근을 낳는다.
플랫폼은 다르지만 둘 다 빌드/셋업 과정에서 예상치 못한 문제로 씨름하고 있다. 분명히 매뉴얼 대로, 혹은 인터넷에서 찾은 가이드를 따라하고 있지만, 낯선 오류 메시지를 접하고, 어찌할바를 모르고 있다. 예상한 대로다. 세상에 모든 빌드, 혹은 모든 소프트웨어 개발이 맘 먹은 대로 된다면, 벌써 인공지능 까지 개발되고 인간들은 편안히 로봇의 시중을 받으며, 하루종일 노래나 부르고 있으리라. 그러나, 현실의 소프트웨어 개발자는 오히려 기계에 매달려서 속썩이고 말 안듣는 기계를 달래고 있다. 소프트웨어는 강아지 보다, 고양이에 가깝다. 늘 제멋대로 이거든...
B는 그래도 혼자서 결과를 낼 수 있을 듯 한데, J는 아무래도 아슬아슬하다. B는 대학원 졸업을 했고, 상용에 가까운 패키지를 개발해 본 경험이 있지만... J는 실무 경험이 있다고 해도, 운영체제에 DB를 설치해본 경험은 전무하다. 인터넷에 나와 있는 매뉴얼 대로 작업해도 자꾸 알 수 없는 오류가 나온다고, 거의 끝나 가는데 마지막 고비를 넘기지 못하고 있다고 난처한 표정이다. 이걸 믿어야 하나 말아야 하나? 초심자는 늘 자신이 충분한 능력을 가지고 있고, 한 고비만 넘기면 산꼭대기에 오를 수 있다고 믿는다. 허나, 실제로는 산 중턱도 오르지 못한 경우가 태반이다. 저녁이나 같이 먹고, 잠시 트러블 슈팅(trouble shooting) 정도 해주리라 마음 먹었는데, 정신 차리니 저녁 11시 였다.
단 하나의 명령을 실행하더라도, 확인 사살은 필수.
J는 오라클을 설치하기 위해 다음과 같은 작업을 차분하게 진행했다. 정말 신중하게... 스스로가 생각하기에 말이다.
- 개인 작업용 노트북에 가상 운영체제를 실행할 수 있도록 우선 VMWare를 설치했다.
- VMWare 를 실행하고, 우분투 리눅스를 설치했다.
- 가상 리눅스 운영체제에 접속한 후, 'apt-get install' 명령을 이용해 빌드를 위한 make, gcc, stdc++ 등 각종 컴파일러, 빌드 명령, 라이브러리 등을 설치했다.
- 오라클 설치 파일을 오라클 홈페이지에서 다운로드 받고, 압축을 해제했다. (CD 2장 반 분량)
- 오라클 데이터베이스 설치를 위한 각종 환경 변수를 설정했다.
- 오라클 설치 명령인 runInstaller를 실행했다.
앞서의 과정은 잘 진행한 것 같은데, runInstall 명령을 실행하니, 62번째 라인에서 문법 오류 있다는 메시지가 출력된단다. 무엇이 문제일까? 라인 번호가 표시된다는 것은 해당 명령이 쉘 스크립트(shell script)로 짜여 있다는 얘기다. vi 편집기로 열고, 주욱 둘러 보면서... 배치 명령 파일(batch file)의 개념과 쉘 스크립트라는 인터프리터(interpreter) 언어의 특징에 대해 설명해주었다.
에러 메시지 : ./runInstaller: 62: Syntax error: word unexpected (expecting ")")
오류가 발생한 라인을 살펴보니, 특정 명령을 실행하고, 실행 결과에 따라 환경 변수를 설정하는 if 비교 구문이다. 비교 구문 자체가 문법적으로 오류가 없어 보이는데 왜 오류가 발생할까? if 구문 보다 앞선 코드를 살펴보니... rpm 이라는 명령을 실행하고 그 결과 값을 변수에 담고 있다. 실험 삼아 rpm 명령을 copy 해서 명령창에서 실행해 보았다. 그런 명령은 없단다. 응...?
J는 오라클 설치 준비 과정에서 apt-get install 명령으로 설치했다고 했으니, 사람이 옳은가 혹은 머신이 맞는가...? 난 빌드하거나, 컴파일 하는 작업 시에는 절대 사람을 믿지 않는다. 그게 내 마누라라고 할지라도 ... (실제 마누라는 없지만...) 따라서, 모든 설치 내역을 하나씩 확인해 보았다. 절반 가량의 빌드 도구가 제대로 설치되어 있지 않다. 히스토리를 살펴 보니 일괄 입력하다가 오타를 두루두루 낸 것이다. 고수들 보기에 어이 없는 실수라고 생각할지 모르지만, 누구나 이런 올챙이 시절을 겪는 법이다. 세월 지나면 다들 잊고, 초보 개발자들을 멍청하다 비웃는데 난 이런 걸 부끄러워 해야할 일이라고는 생각하지 않는다. 사람이 완벽할 수 있다면, 기계에 의존하지 않았을 것이다. 원래 사람은 부정확하게 타고 난 것이다.
설치 안된 것들을 하나씩 짚어주고 있으니, J는 창피한 생각이 들었는지 키보드를 냅다 뺏어다가 직접 남은 것들을 확인하고 설치하겠노라고 덤빈다. 아서라... 설치 못한 것을 부끄러워 할 게 아니라, 어떻게 설치 안된 것들을 짚어 냈는지 그 과정을 배우는데 집중하라고 타일렀다. 당장 못다한 것들을 매꾸는 것으로 작은 창피를 모면할 수 있지만, 문제의 원인을 추적하는 과정을 배우지 못하면 영영 코더의 수준을 벗어나지 못할 것이다.
유닉스, 리눅스 개발자들은 변태?
쉘 스크립트 언어는 자바나 C언어와는 표기법이 상당히 다르다. 그래서 쉘 스크립트 언어를 가르치다 보면, 이거 참 리눅스 개발자들이 변태 같지 않냐는 농담을 한다. 예를 들자면, 쉘 스트립트에서 if 블럭의 시작은 if 그 자체인데, 끝나는 표시는 fi 를 쓴다. 이걸 뭐라고 읽어야 할까? 그리고 ''는 인용 부호 혹은 문자열을 감싸는 부호인데, ``(back quote)는 문자열에 포함된 문장을 실행하라는 표시인거다... 언듯 봐서는 똑같아 보인다. 간결함을 지나치게 강조하다 보니, 모든게 난해해지고 말았다고 해야하나?
어쨋든 앞서 설치되지 않은 것들을 모두 설치하고 나서는 다시 runInstaller를 실행해보니 또 다른 오류가 발생한다. 이번 오류 메시지는 좀 더 단순하다.
에러 메시지 : DISPLAY is not set
이게 무슨 오류 일까? 메시지만 읽고 원인을 파악해 보라고 물었다. J는 한참을 생각하더니, DISPLAY라는 명령을 설치하지 않아서 그런게 아닌가? 라고 말한다. 혹시 대문자로 이루어진 유닉스/리눅스 명령을 본 적 있냐고 물으니 없다라고 한다. 그러니 저건 명령이 아니다. 모든 문자가 대문자로 적혀 있으니, DISPLAY 환경 변수가 선언되어 있지 않다는 뜻이라고 설명해 주었다. 자연스레 J의 입에서는 '리눅스/유닉스 개발자는 전부 변태'라는 투덜 거림이 배어 나온다. 아니, 저걸 구체적인 설명도 없이 저런 의미를 알아 차리는 사람들은 정상은 아니잖아요 라는 표정이다.
책을 통해 많은 것들을 공부할 수 있지만, 책에 나와 있는 모든 내용이 실전에서 꼭 필요한 것은 아니다. 책에 적혀 있는 것은 사소한, 불필요할 수 있는 모든 정보를 포함한다. 또한, 책을 통해 전달 되는 정보는 늘 낡은 것들이다. 실전에 강한 개발자가 되려면 책을 많이 읽는 것보다 이런 관습적인 기법들을 체험하며 익히려는 노력이 중요 하다. 한마디로 말해서 '눈썰미'를 단련해야 한다고 할까? 책 보다 가까이 해야할 것은 man 명령과 google 검색 창이다. 그리고, 실전을 경험하면서 사용하게 되는 모든 명령어, 도구, 구문들을 빠짐없이 기록하려 애써야 한다. 실전 경험이야 말로 가장 좋은 스승이다.
표준 C++ 라이브러리가 없다?
위에 소개한 것들 외에도 이런 저런 오류들을 해결하고 겨우 runInstaller가 실행되게끔 했지만, 이번에는 stdc++....so 파일이라는 걸 찾지 못한단다. LD_LIBRARY_PATH 환경 변수를 확인하고, 리눅스 운영체제 전체를 find 명령으로 뒤져봐도 빌드 프로그램이 원하는 파일은 존재하지 않는다. 얼쑤~ 이건 좀 심각하다. 구글 신의 도움을 요청하니, 인터넷 전체에 오라클 빌드 명령이 요구하는 파일이 없어서 발생하는 문제에 대한 페이지가 겨우 2천여개 란다. 조짐이 좋지 않다. 이건 상당히 드문 유형의 오류라는 사실을 나타내는 간접 증거다.
검색 범위를 좁혀서, 아예 stdc++.so 파일을 직접 구해서 우분투에 강제 설치해 보기로 했다. 그런데, rpm package 다운로드 사이트를 뒤져보니 ubuntu i386 distribution 을 위한 표준 C++ 라이브러리 중에서 우리가 원하는 버전이 없다! 느낌이 좋지 않다. 우분투에서 오라클 설치에 실패할 가능성이 높다는 얘기다. 조짐이 좋지 않으니, 일단 물러서고 DB를 꼭 리눅스에 설치할 필요도 없으니, 내일 출근해서 윈도우에 설치하자고 제안했다. J는 자신이 실패한 것을 인정하고 싶지 않은지, 이것저것 다운로드 받아서 설치해보고 이마를 찡그리기도 한다. 주름살 생기니 얼굴 펴라고 한마디 하는데 여전히 마뜩찮은 표정을 짖는다.
오라클은 공식적으로 우분투를 지원하지 않는다.
저기 건너편에 보니 B는 WebKit을 윈도우에서 빌드하다 계속 막힌다고 혼자 씨름하고 있다. 시계를 보니 10시 반이 넘었고... 잠시 혼자 씨름하는 J를 내버려 둔 채 내 자리로 돌아와서 미투데이에 예상치 못한 야근을 하고 있다는 글을 짧게 올렸다. 그리고 10분쯤 지나고... 한국 오라클에서 근무하시는 분의 답글을 올렸다. 우분투는 공식적으로 지원하지 않는뎁쇼! 다들 짐싸라고 했다. 집에 가자.
K 책임은 어째서 우분투에 오라클을 설치하라고 했을까?
삽질은 좀 했지만 ... 그나마 얻은 것도 많은 날이다. 그런데, K 책임은 왜 우분투에 오라클을 설치하라고 했을까? J 가 묻는다. 내가 대답했다. K 책임이 리눅스 개발자인건 맞는데, 최근 2년 동안 서버 패키지 설치해본 적은 없어... J는 허탈히 웃으며 한마디 날린다.
'앞으로 귀에 필터를 달아야 겠어요....'
이 글과 관련있는 글을 자동검색한 결과입니다 [?]
- 결국 오라클 설치. by 탁상
- ODBC 설정에러.. 오라클 클라이언트가 문제야.. by 미친병아리
- 11월 중순 주말 ... 밤부터 그 다음날 낮까지 있던 일. by akpil
# by | 2009/09/15 02:48 | Development | 트랙백 | 덧글(18)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
고생했던 기억이 나네요. 그래도 그 뒤부턴 다른 패키지를 설치할 때도 나름 수월하게 작업했었죠. ^^;;
아무튼 야근 하시느라 고생하셨습니다.
저도 우분투에다가 오라클 11g 최신버전 설치해보려고 다운로드 받아두었는데.... @_@)>
개발환경 테스트 용도로 사용하기에는 VMware 활용하는 것도 괜찮겠다는 생각도 드는군요. 우분투에서 VMware 사용하는 건, 인터넷 뱅킹 하거나 파폭이나 오페라로 접근 안되는 페이지 사용할 때 뿐이었는데... ^^ 각각 운영체제 하에서 개발환경 셋팅도 해놔야겠군요.
^^ 즐거운 하루 보내세요!!!
Hyper-V도 고려해 보겠습니다. 감사합니다!
https://help.ubuntu.com/community/Oracle9i
참고로 개발/테스트용도로 제공되는 Oracle Express의 경우
http://www.oracle.com/technology/tech/linux/install/xe-on-kubuntu.html
공식 패키지를 제공해주고 있습니다.
신입분한테 언제든지 포스코 사거리로 오시면 대접한다고 전해주세요..-_-;;;
저희 신입들이 먹는 거라면 환장을 해서 지난 주에 고기 먹였더니, 십수만원 나오더군요.
가볍게 한끼 식사라면 괜찮습니다 ^^;
막장에서 굴러먹은 5년차 저보다 나은거같군요..
막장에서도 희망을 찾아야죠~ 탈출하는데 10년 걸렸습니다.
오늘 아침에 절대 야근 하지 말라고 지침을 내렸더니.. 좀 의기 소침해졌네요.
젊어서 몸 혹사하면 30대에 고생할거라는 얘기인데,
실제 30대 사수들이 어떻게 망가졌는지 증언을 해주니.. 다들 우울해지는 듯 합니다.
Debian 계열인 우분투는 deb 패키지를 받으시면 됩니다.
http://www.oracle.com/technology/software/products/database/xe/htdocs/102xelinsoft.html
deb패키지는 X-Window를 사용하면 더블클릭으로 그냥 설치가 되고 아니면,
콘솔에서 dpkg -i 패키지이름.deb
도전을 원하시면
http://oracleabc.com/b/?p=167
하지만 추천은 언제나 deb패키지,
강추는 repository추가해서 apt-get을 이용한 설치...
위에 스트롱베리님 께서 링크해주신글에 나오는 repository를
이용하는 방법이 제일 편하고 좋을꺼 같네요.
http://www.oracle.com/technology/tech/linux/install/xe-on-kubuntu.html
64비트 사용하시면,
http://littlebrain.org/2008/05/12/how-to-install-oracle-xe-in-ubuntu-64-bit/
그리고 저에게는 VMware보다 VirtualBox 쓰는게 속도는 더
빠르게 느껴지더군요.
http://www.virtualbox.org/wiki/Linux_Downloads
요기 나온데로 주소 추가하고 명령 몇개 쳐주시면 알아서 설치...
근데 생각해 보니 호스트는 윈도즈 쓰시는 모양이군요...ㅡ_ㅡ;
윈도즈용은 요기서...
http://www.virtualbox.org/wiki/Downloads
근데...
Virtual Machine에서 우분투 돌리면 3D가속 같은건
포기해야 하는데...
Compiz도 안되는 우분투를 무슨 재미로 쓰시나요? :)
http://www.youtube.com/watch?v=_Etr9stJl5Q
이거 생산성 향상에 정말 도움을 줍니다.
바탕화면마다 각각 프로그램 다른거 띄워놓고
(예, IDE, 워드, PDF, 브라우저 등등)
마우스 휠만 돌리면 바탕화면 전환...
창크기 조절이나 창 이동도 마우스커서를
제목표시줄에 클릭하거나, 창 가장자리 드래그해서
할 필요없이 키하나 누르고 창 아무대나 클릭해서 할수 있구요.
암튼 일단 한번 쓰기 시작하면 윈도즈는 불편해서 못씁니다. :D
이런 고마운 정보를... 다 주시고... 제가 점점 최신 정보에 둔감해져서요. ^^;