여행 200일 단상

지난 5월 29일 여행 200일을 맞아 페이스북에 썼던 글을 옮김.


오늘 옆지기랑 보고타 시내를 걷다가 문득 세대별로 바라보는 여행이 좀 다른거 같다는 생각을 했다.

여행중에 만난 20대의 여행자들은 경험이 주를 이루는것 같다. 그것이 좋은 것이든 나쁜것이든 경험이 최대 자산이다. 나도 20대땐 그랬다. 경험이 최대 자산이라며 부단히도 돌아다녔다. 그땐 그랬다. 나는 얇고 넓게 아는게 좋았다.

30대 중반의 여행은 경험보다 사색이 많아진것 같다. 어떻게 살아갈것인가? 무엇을 보더라도 어떤 의미로 받아들이느냐가 중요해졌다. 다양한 경험보다는 선택과 집중을 한다. 여행중이지만 먹고 사는 문제와 정치에 눈을 떼지 못한다. 비록 체력은 20대가 아님을 인정하지만 열정 만큼은 동일하거나 더 크다고 자신할수있다.

40대 여행자를 많이 만나진 못했다. 아마도 그네들은 가족과 함께 하고 있을 것이다. 어디를 가든 가족과 함께하는 것이 중요한 순간일 것이다. 내가 꼬꼬마일때 우리 부모님도 그랬을 것이다. 가족이 중요하다.

50대의 여행은 가이드를 대동하는 것이 일반적이지만 그렇지 않는 분들도 만났다. 여행자는 모두가 같은 위치에 있다. 같은 주제로 이야기하고 비슷한 어려움을 겪는다. 그래서 사회에서 회사에서 그리고 가족안에서 마주하기 어렵던 젊은 친구들과 쉽게 어울리는 재미를 알아가고 있다고 했다.

60대 혹은 70대로 추정되는 여행자도 만났다. 나에게 와인 한잔을 건냈다. 너희는 젊다. 어디든 갈수있다 말했다. 많은 연세에 불구하고 버스타고 다닌다는 그 분의 호쾌함이 아직도 생생하다.

200일이 지나면서 점점 200일 이전의 나로 돌아가기 어렵겠다는 생각을 한다. 물론 돌아가서 적응하면 또 지금의 나를 잊고 잘 적응 할지도 모르겠다. 의식하고 살지 않으면 적응하기 마련이다.

300일엔 뭔 얘기를 끄적일지 100일뒤에 보자. ㅋ

좋은 회사 만들기

지금은 볼리비아 수크레 그리고 여행 115일째다. 여행 100일 쯔음엔 무엇이 달라져 있을까? 라는 자문을 해보고 싶었는데 깊이 있는 성찰을 하지 못했다. 뭐 100일이란 시간이 사람을 변화시키기엔 그렇게 긴시간이 또 아닌것 같다는 생각이 들면서도 사실은 변한게 있었다.

여행의 목표

여행을 하면서 만난 친구가 하는 말이 장기여행의 경우 여행의 목표가 있어야 여행을 계속해야할 의지가 생긴다고 했다. 전적으로 동의한다. 다행히 나의 여행목표는 5개월전에 세웠다. 지금도 변하지 않았고 여전히 실험중이다. 그때와 지금 달라진 것이 있다면 그 첫번째 실험주제를 찾았다는 것이고 빠르게 1차 실험을 완료 했다는 것이다. 어쩌면 지금 그 1차 실험 후기를 쓰고 있는지도 모르겠다.

여행의 동반자

여행에 있어서 내 옆지기는 인생의 동반자이자 지금 내가 하는 실험의 동업자다. 결혼과 동시에 여행을 시작했기에 우리 둘사이의 간극은 사실 꾀나 컸다. 지난 여행 100여일사이에 있었던 숱한 격론(?)들이 그 간극을 증언 해준다. 하지만 부부싸움은 칼로 물배기는 맞는것 같다. 오늘 문득 내가 한국에 있었다면 어땠을까? 라는 생각이 들었다. 우리는 여전히 회사에 다닐테고 낮시간에 각자의 삶의 영역안에서 활동을 하다 해가 지면 돌아와 몇마디 속닥이다가 잠이 들겠지? 그렇다면 지금 내 옆에 있는 옆지기의 본 모습은 1년 아니 10년후에나 발견하게 될지도 모르겠다는 생각이든다. 어쩜 영원히 모를수도…

부부가 세계여행을 떠난다는 의미는 하루종일 붙어다닌다는 의미가 포함되어 있다. 100여일을 넘게 붙어 있다보니 사실 연애시절에 몰랐던 부분들을 확인하게 되고 실망하게 되는 부분도 더러 있다. 하지만 결국 그 차이를 빨리 발견하고 빨리 맞춰갈수있어 더 좋다라는 결론에 이른다. 고로 우리 선택은 현재까지 옳다!!

나는 이번 여행을 통해 새로운 삶을 열어보고자했다. 그 삶의 모습 중에 하나는 늘 꿈꾸던 좋은 회사 만들기가 있다. 모처럼 옆지기와 몇시간 동안 우리에 대한 이야기를 나눴다. 그리고 그 안에서 정말 좋은 회사를 만들자고 의기투합했다. 목표를 정하고 나니까 해야할 일이 더 많아졌다. 그리고 여행의 목표가 더 확실해졌다.

내가 생각하는 좋은 회사란?

일단 본인이 사회주의적인 성향이 있음을 미리 던져놓고 내가 생각하는 좋은 회사의 제 1 조항(?)은 구성원들의 삶을 책임지는 회사다. 현실에서 회사는 이익집단이고 당연히 이윤을 추구해야하지만 구성원들의 삶도 포기해서는 안된다. 삶의 질을 가늠하는 척도중 하나가 돈임을 부정하지는도 않는다. 하지만 돈이 삶의 질을 결정하는 유일한 척도가 아니라는 믿음은 여전하다. 그래서 뭔소리를 하고 싶은거냐?

예전에 내 블로그에 써놓은 글이 있긴한데 찾기는 귀찮고 일단 그 글의 생각은 지금도 여전히 유효하다. 삶을 살아가는데 있어서 개인이 월급으로 치르는 가장 큰 비용은 주거비와 양육비 그리고 교육비다. 그래서 나는 회사가 이부분을 일정부분 혹은 전부를 커버 해줬으면 하는 바램이 있다. 해결 방법은 여전히 찾고 있다. 아무튼 이 큰 비용을 회사가 대신한다면 개인이 필요한 돈은 사실 여가비와 생활비 정도가 되지 않을까 싶다.

두번째로 좋은 회사는 구성원 각 개인의 발전을 도모해야한다. 회사가 모든 구성원을 케어 하려면 규모가 작아야한다는 생각이 있지만 파이도 키워야한다. 그래서 일정수가 넘어가면 각 개인에게 독립의 기회를 제공하고 싶다. 물론 독립은 몬드라곤 같은 협동조합 모델을 그리고 있다. 모회사에서 자회사가 분리 독립되면 자회사의 수익의 일부를 모회사에 펀딩하고 자회사가 실패할경우 자회사의 구성원을 모회사로 불러들여 재배치를 하거나 또다른 기회를 제공하면 좋겠다.

꿈 같은 얘기긴 한데 꿈을 현실로 만들어내는 실험은 계속 진행중이다.

루비(Ruby)와 PostgreSQL 설치 및 사용법 정리

필요에 의한 거지만 어찌됐든 10년만에 Ruby를 다시 배워보려고한다. 그래서 일단 맥에 루비부터 설치했다.

1. Homebrew를 이용한 루비 설치

일단 맥에는 루비가 기본 설치되어있기 때문에 기본 설치된 버전부터 확인해보자.

$> ruby -v
ruby 2.0 ..... 어쩌구 저쩌구 

내 멕에는 ruby 2.0이 설치되어 있다. 현재 최신버전은 루비 2.3.0 버전이다. 최신 맥프레임에도 불구하고 확실히 기본 설치된 버전은 낮다 -_-;; ㅎㅎㅎ 여튼 새버전을 선호하는 개인 취향문제로 새 버전을 설치했다.

$> brew install ruby
... 설치 로그 생략
$> ruby -v
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin15]

오예! 루비 새버전 장착 완료!! 루비로 웹개발을 할때는 보통 레일스 프레임워크를 사용하지만 지금 루비 문법과 스타일에도 익숙치 않은데 레일스를 볼 겨를이 없다. 일단 루비부터 익혀보자.

공식 언어 튜토리얼

  1. try Ruby – http://tryruby.org/
  2. 20분 가이드 – https://www.ruby-lang.org/ko/documentation/quickstart/

낮은 버전으로 다운그레이드

Homebrew를 이용해 낮은 버전으로 설치하려면 PATH 설정을 수동으로 해야한다. 홈브루 정책이 그런듯 싶다. 그래서 좀 귀찮다.

$> brew search ruby
chruby       homebrew/versions/ruby182    homebrew/versions/ruby21    ruby ✔
chruby-fish  homebrew/versions/ruby186    homebrew/versions/ruby22    ruby-build
homebrew/versions/imagemagick-ruby186     homebrew/versions/ruby187   imessage-ruby
ruby-install homebrew/versions/jruby168   homebrew/versions/ruby192   jruby
homebrew/versions/jruby1721               homebrew/versions/ruby193   mruby
...

현재 홈브루로 설치된 버전은 체크(✔)표시가 되어 있다. 만약 ruby 2.2 버전을 설치하고 싶다면 homebrew/versions/ruby22 버전을 설치하면된다 .

$> brew install homebrew/versions/ruby22
... 설치 로그 중략 ...
By default, binaries installed by gem will be placed into:
/usr/local/lib/ruby/gems/2.2.0/bin

You may want to add this to your PATH.
... 

이전 버전을 설치하면 위 메시지처럼 PATH를 니들이 알아서 해! 라는 배째라 모드.. 아무래도 루비가 자체 패키지매니저(gem)을 가지고 있어서 의존성을 가진 모듈들이 충돌될까바 그런듯싶고,.. 여튼 귀찮아서 그냥 새버전 쓰는걸로!!

2. PostgreSQL 설치와 사용법

PostgreSQL 설치도 Homebrew를 이용하면 간단하다.

$> brew install postgresql

DB 서버를 데몬으로 항상 띄워둘수도 있지만 본인은 개발할때 수동으로 실행시키는 편이다.

$> postgres -D /usr/local/var/postgres

서버는 실행했고 이제부터가 진짜 신세계다! mysql과 mongo와는 또다른 명령체계들 때문에 삽질했다. 정리해본다.

1. 클라이언트 접속툴

postgresql은 생소한 psql이라는 명령어를 이용한다. 하기사 데이터베이스 이름 자체가 길다보니 짧은 명령어를 만든듯 싶다.

$> psql
psql: FATAL:  database "realrap" does not exist

잉? 이건 뭔소리래? “realrap” 데이터베이스가 없다며 접속되지 않는다. psql은 다른 데이터베이스와 좀 다르게 일단 접속하고 use 명령을 이용해 데이터베이스를 선택하는 모델이 아닌갑다. 그래서 접속할때 데이터베이스명이 필요한데 지정하지 않으면 로그인된 계정이름이 디폴트로 지정된다. 참고로 내 계정이름이 “realrap” 이다.

데이터베이스를 생성하기 전에 샘플디비(template1)로 접속부터해보자.

$> psql template1
psql (9.5.1)
Type "help" for help.

template1=#

특이하게 접속하면 template1=# 이라는 프로프트를 볼수있다. template1 데이터베이스에 접속했다는 의미다. 그리고 template0 이라는 샘플디비가 하나 더 있는데 진짜 있는지 데이터베이스 목록을 확인해보자. 역슬래쉬() 소문자 엘(l)을 입력해보자.

template1=# \l
                                       List of databases
      Name      |  Owner  | Encoding |   Collate   |    Ctype    |  Access privileges
----------------+---------+----------+-------------+-------------+---------------------
 postgres       | realrap | UTF8     | ko_KR.UTF-8 | ko_KR.UTF-8 |
 template0      | realrap | UTF8     | ko_KR.UTF-8 | ko_KR.UTF-8 | =c/realrap         +
                |         |          |             |             | realrap=CTc/realrap
 template1      | realrap | UTF8     | ko_KR.UTF-8 | ko_KR.UTF-8 | =c/realrap         +
                |         |          |             |             | realrap=CTc/realrap
 (3 rows)

나도 모르는 명령어가 툭툭튀어나온다. 이런 명령어는 help 명령을 이용해 알아냈다.

template1=# help
You are using psql, the command-line interface to PostgreSQL.
Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit

나가려면 \q를 입력하고 psql 명령어를 보고 싶으면 \? 물음표를 입력하렌다. 물음표를 입력해보면 \l 명령어에 대한 설명도 볼수있다.

2. 데이터 베이스 생성

데이터 베이스 생성은 createdb 명령을 이용한다. 주의할점은 데이터베이스명을 따로 지정하지 않으면 현재 로그인 된 계정 이름으로 생성한다. 자그럼 생성해보자!

createdb <데이터베이스명>

$> createdb
$> 

잉? 이건 또 뭐징? 아무런 메시지가 없다. 제대로 실행 된건가? 약간 의아한데 확인해봐야겠다. 그리고 뭔가 로그를 출력해주는 설정이 있을것 같은데 모르겠다. 일단 아까 말했던것처럼 데이터베이스명을 따로 지정하지 않으면 현재 로그인한 계정으로 만들어진다. 진짜 만들어졌는지 접속해서 확인해보자 .

$> psql realrap
psql (9.5.1)
Type "help" for help.

realrap=# \l
                                       List of databases
      Name      |  Owner  | Encoding |   Collate   |    Ctype    |  Access privileges
----------------+---------+----------+-------------+-------------+---------------------
 postgres       | realrap | UTF8     | ko_KR.UTF-8 | ko_KR.UTF-8 |
 realrap        | realrap | UTF8     | ko_KR.UTF-8 | ko_KR.UTF-8 |
....
.... 중략 ....

우잉? 진짜된다. 헐퀴.. realrap 이름으로 만든 디비는 필요 없으므로 지우자. 지우는 명령어는 dropdb 다! 일단 디비를 빠져나와서 커맨트창에 아래와 같이 입력한다.

$> dropdb realrap
$> psql realrap
psql: FATAL:  database "realrap" does not exist

됐다. 제대로 지워졌는지 접속이 되지 않는다. 대충 사용법을 알았으니 개발용 데이터베이스(test)와 개발용 유저(dev)를 만들어 dev 유저가 이 test 데이터베이스를 쓸수있도록 권한을 줘보자.

3. 개발용 유저 생성

일단 유저를 만든다. 만들때 –interactive 명령을 주면 좀더 상세한 권한 설정을 할수있다.

$> createuser dev 
or
$> createuser dev --interactive
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) n
Shall the new role be allowed to create more new roles? (y/n) n

상세 설정을 통해 권한을 따로 주지 않으면 유저는 기본적으로 아무런 권한이 없다.

4. 개발용 데이터베이스 생성

testDB를 만들때 -O 옵션을 주면 데이터베이스 오너를 지정할수있다. 앞에서 생성한 dev 유저가 testDB 오너가 되도록 생성한다.

$> createdb -O dev testDB

제대로 설정됐는지 로컬 계정으로 testDB에 접근해서 설정을 확인해보자.

$> psql testDB
psql (9.5.1)
Type "help" for help.

testDB=# \l
                               List of databases
      Name      |  Owner  | Encoding |   Collate   |    Ctype    |  Access privileges
----------------+---------+----------+-------------+-------------+---------------------
... 중략 ...
 testDB         | dev     | UTF8     | ko_KR.UTF-8 | ko_KR.UTF-8 |
... 중략 ... 

testDB의 Owner가 dev로 지정되어 있다. 제대로 했다. 이제 dev 유저에 패스워드를 지정해보자.

testDB=# alter user dev with password 'devpass';

dev 계정에 ‘devpass’ 라는 비밀번호를 부여했다. 이제 빠져나와서 dev 계정으로 접속해보자.

$> psql -U dev test -W
Password for user dev:

그런데 여기서 멘붕!…--;;; 패스워드가 틀려도 접속이 된다. 머징? –-;;; 좀더 공부를 해야겠다. 일단 여기까지… -_-;;

5. PostgreSQL 데이터베이스 지우기

멘붕에 빠져서 아까 만들었던 데이터베이스와 더불어 postgresql도 다 지워야겠다. 지우는 방법은 간단하다.

$> brew uninstall postgresql 

이렇게 지우면 명령어만 지우는거고 실제로 데이터베이스를 살아있다. 그래서 다시 설치하면 기존에 만들었던 유저라든가 데이터베이스가 지저분하게 그대로 있다. 따라서 데이터베이스까지 지우려면 저장된 DB 파일도 지워야한다.

일단 homebrew가 어디에 DB를 두는지 확인해야한다.

$> ps aux | grep postgres | grep -- -D
realrap         46604   0.0  0.1  2603388  15392 s006  S+   11:19AM   0:00.25 postgres -D /usr/local/var/postgres

아하! /user/local/var/postgres 폴더에 저장하는구나. 이 폴더를 날리면 DB도 깨끗이 지워진다.