Ruby, __FILE__ 과 $0의 유용성

루비로 개발을 하면서 Java와 다르게 재미난(?) 환경 변수가 있다는걸 알게되었는데, 그게 __FILE__ 과 $0 이다.

__FILE__은 현재 실행 되고 있는 ruby file path, $0는 main으로 실행된 ruby file path, 즉 첫번째로 실행된 ruby file을 알려준다. 어떻게 보면 별거 아닌 것일 수도 있는데, 여러 작업에서 유용하게 쓰인다.

1. main script 작성에 활용


# 현재 파일이 main으로 실행되었는지 확인하는 구문
if __FILE__ == $0 then
# main  code 작성
end

 Ruby가 script언어이다 보니 Java나 C같은 언어와 다르게 프로그램의 시작을 알려주는 main이란  구역이 없다.  이런 단점은 main역할을 하는 code를 담고 있는 script가 다른 module에서 로드될때 많은 골칫거리를 만들어 내게 하는데,  이부분은 __FILE__과 $0로 쉽게 해결 가능하다.
위 코드의  if문 안의 코드들은 현재의 파일이 main으로 실행되었을 때만 작동하므로  Java나 C의 main과 다를 것이 없다.

 

2. require 경로를 상대적으로 기술

home = File.join(File.dirname(__FILE__), ‘/..’)
require File.join(home, ‘lib/usage_collector’)

그냥 require(path)를 하게되면 실행 path의 영향을 받기 때문에 상황에 따라 require가 파일을 제대로 찾지 못할 경우가 많다. 대표적으로  gem으로 잘 돌아가던게 소스로 받아서 돌리면 안되거나 source로 실행할때는 잘되던게 gem으로 만들면 안돌아간다.
초기 작성시 위의 소스 코드처럼 __FILE__을 사용하여 home을 확실하게 지정해주면 require 엄한 위치를 헤메는 일이 없어진다. 이렇게 작성해 놓으면 gem으로 실행하든 source 상태로 실행하든 상관없이 잘 돌아간다.

 

3. 그외 이런저런 파일 작업을 다룰때에도…
그외에도 파일을 다루다보면 기준 경로를 어디로 잡을 것인지가 매우 골치아픈 문제이다. __FILE__과 $0 이런 문제들을 쉽게 해결할 수 있는 단서를 제공해준다.

 

Cloud Foundry Version 2, Bosh 설치 중 드는 생각……..

cf2 오픈 소식을 듣고, 원래 하기로 했던 Tomcat 7 작업이 영 손에 잡히지 않아 cf2 설치를 하고 있다.

한참 cf2 bosh 설치하는 와중에 드는 생각은, BOSH 같은 툴체인도 좋지만 기본적으로 Component별 수동으로 설치할 수 있는 가이드도 넣어주면 안되는걸까?

내 괴랄한 취향 때문인지는 몰라도 뭘 하든지 기본적으로 직접 설치하고 관리하는 법부터 알고 난 뒤 자동화 툴을 쓰는 것을 좋아하는데(수작업 방법은 나중에 까먹더라도, 그 과정에서 배우는 것들이 더 중요하다고 본다.), 이렇게 자동화 툴만 턱 나와있는 복잡한 시스템을 보면 가치관의 충돌로 혼돈에 빠져버린다. 당장에 쓰기는 편리하지만, 세세한 내부의 작동모습은 알기 어려워지기 때문일까? 아님, 툴에 의존되기 싫은 반감 때문인가?

결국 이래나 저래나 각 컴포넌트별 설치 요소들을 정확히 알려면, 자동화 툴을 다 설치하고 내부 스크립트들을 까봐야하는데, 이게 은근 진입장벽이 높은것 같다. 스크립트 몇줄을 보기위해 자동화 툴을 연구해야하는 배보다 배꼽이 커지는 뭔가 거인거인 열매를 먹은 야크 털 깍는 상황이랄까…..

게다가 클파는 너무 많은 컴포넌트들이 엮어져 있다. 툴 체인으로 설치하면 쉽고 편리하고 좋다 이렇게 생각하겠지만, 이런 시스템일수록 툴체인이 꼬이면 답이 안나오기 마련, 처음부터 잘 알고 들어가는게 운영측면에서는 이득이라고 본다.

무엇보다도 이런 거대한 시스템을 내부 구조와 library 관계도 모른체 자동화 툴에 의존해서 돌리는건 뭔가 불안하다.

무엇보다 VCAP에 한번 데였던 기억 때문에 BOSH에 신뢰가 잘 가지 않는 부분도 작용하는것 같다.

Cloud Foundry Version 2 오픈 3일전, 찾아오는 번뇌…

http://www.cloudfoundry.com/

지난 5월에 오픈한다고 해놓고 안하고 있어서 나를 애태우던 Cloud Foundry Version 2가 드디어 6월 10일날 오픈한다는 소식을 들었다. 공식 사이트는 이미 연초부터 cf2용으로 바꾸어놓은지 오래고, cf1은 deprecated가 선언되어 cf1에 많은 Risk를 느끼고 있떤 나에게는 희소식이다. 그리고 이미 나 스스로 cf1의 구조적 한계(?)를 느끼고 이런저런 문제점들로 골치가 아픈 와중에 cf2에서는 이 문제점들이 구조적으로 자연스레 해결될 것으로 보여 더욱더 기쁜 소식이 아닌가 한다.

문제는, 지금 진행하고 있는 일이 cf1 기준으로 일정을 잡아놨다는 거…
cf2로 빨리 갈아타고 싶은데, 그럼 일정 계획을 다시 잡아야 할거 같다.

핡! cf2로 다 바꿔버리고 싶어!

나는 없어도 되는 사람

조직의 관점에서 특정 한 사람에게 의존도가 높아지는 위험요소를 제거하고,

개인은 조직으로부터 확실하게 존재의 가치를 보장받을 수 있는 방법은 없는가?

에 대한 고민을하다고 최근 생각난 컨셉이 나는 없어도 되는 사람이다.

 

정확히 말하면 나는 없어도 되긴 하는데, 그래도 내가 있는게 좋을걸? (혹은 이득일걸?) 컨셉이다.

예컨데,

 

1. A라는 프로그램은 주석과 가이드 문서가 잘 정리되어 있어서 누구든 쉽게 수정하고 기능을 추가할 수 있다.

2. 그래서 당장 급할땐 내가 A를 이래저래 수정해서 쓸 수 있지만,

3. 그래도 원작자 B가 추가하는 기능이 훨신 좋기때문에 결국엔 B가 만든 것으로 업그레이드 하는게 좋다.

 

이런 거?

그럼 결론적으로

 

1. A 프로그램을 사용하는 사람들(혹은 조직)은 B가 언제 때려칠지 눈치 보지 않아도 된다.

2. B는 매번 이런 저런 기능을 추가해달라는 다른 사람들의 부탁에 시달리지 않아고 자기 개발 라인을 유지할 수 있어 일하기 편하다.

3. 누구나 A를 고쳐 쓸 수는 있지만 B는 여전히 A 프로그램 개발자로 가치가 보장된다.

 

인 장점이 나타날거 같……..기도 하다.

(어쨋든 이 모든 것은 다 Fact없는 내 상상물의 산물이다.)

여하튼, 요즘 이런 컨셉으로 일을 해보면 어떨까 하는 생각이 든다.

그래서 나름

 

1. 어떤 일이든 하고 나면 반드시 내용을 정리해 문서화 한다.

2. 내 업무에 관련된 중요한 정보는 관계자에게 모두 오픈한다.
(물론 확실하게 Close 해서…)

3. 머릿속에 있는 모든 계획은 문서화 하여 관계자들에게 공유한다.

 

4. 그래도 내가 하던 일은 내가 하는게 제일 좋도록 계속 기술력을 확보한다.

 

이런 원칙을 세우고 실천해보려고 하고 있다.

잘 될런가?

요즘 내 일상

  1. 7시 ~ 7시 30분즘 기상/세면
    (욕실이 한개라 누나가 먼저 씻고있으면 누나 고양이를 괴롭히며 기다림)
  2. 9 ~ 9시 30분즘 뉘엇뉘엇(?) 사무실에 도착, 지하 1층 편의점에서 삼각김밥 구매
    (비빔 참치 삼각김밥, 800원)
  3. 자리에 노트북 세팅하자마자 (@_@) 표정으로 삼각 김밥과 녹차 한잔 처묵처묵
  4. 오전 10시경 모듈 오전회의
  5. 모듈회의 끝나면 모니터에 할일 리스트 주욱 펴놓고 멍때리다 이것 저것 깨작깨작
  6. 깨작깨작 하다가 오전 끝, 점심 처묵처묵
  7. 점심먹고 13시까지 낮잠
  8. 13시에 칼기상 하고 10분정도 멍때림
  9. 잠깨면 다시 업무 리스트 펴놓고 이것 저것 깨작깨작
  10. 이일 저일 깨작 거리다 보면 손에 잘 잡히는 일 하나가 생김
    (업무 효율 좋은날엔 5번에서 10번으로 점프)
  11. 손에 일이 잡히면 식음전폐 코딩 시작 (혹은 문서작업)
  12. 하던일이 완료되면 뭔가 (혼자) 만족감을 느끼며 급속도로 의욕감퇴 및 업무효율 하락
  13. 18시즘 되면 고뇌함 ( 야근할까? 집에갈까? 운동할까? )
  14. case 1 야근 모드, 저녁 먹고 포만감에 9-12 과정 반복….23시 즘 퇴근, 1시즘 취침
    case 2 퇴근 모드, 집에가서 씻고 멍때림, 1시 즈음 취침
    case 3 초코바 하나 먹으며 액티움가서 운동, 22시즘 퇴근, 1시즘 취침
  15. 다시 다음날 아침…….