* 글 작성에 앞서, 이 글의 목적은 숙달자의 정보전달이 아니라 초심자의 기록 남기기에 가깝다. 이해가 부족한 상태에서 경험의 과정을 적으니, 미숙한 점이 많이 있을 것이므로 양해 부탁드린다. 또, 미숙함에 대한 지적은 대환영이지만 기본적으로 이 포스팅은 대부분 일방적인 기록 남기기에 가까우니 피드백이 적을 수 있다. 다만 필자뿐 아니라 같은 글을 보는 다른 독자들을 위해 또 하나의 필자가 되어 부연설명을 해 주신다면 감사할 따름이다.


Rails 애플리케이션은 기본적으로 sqlite를 데이터베이스로 사용한다. 따라서 다른 데이터베이스를 사용하기 위해서는 추가적인 설정이 필요하다.

먼저 MySQL을 사용하기 위해 로컬에 MySQL을 설치하고, Amazon RDS에도 MySQL 인스턴스를 생성해보자. 그리고 Rails의 데이터베이스 설정파일 수정을 통해 데이터베이스 설정을 바꿔보자.


작업환경: macOS Sierra


1. 로컬에 MySQL 설치


Homebrew를 이용해서 설치하자.

$ brew install mysql

$ brew info mysql

MySQL 설치 완료

무작정 $ mysql -uroot 명령어를 실행하면 아래와 같은 에러를 내뿜는다.

Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

info를 확인하여 실행하기 전에 데이터베이스 설치작업을 마무리해주는 과정을 확인하여야 한다.



$ mysql_secure_installation


비밀번호 강도 설정과, 초기 비밀번호설정, anonymous 유저 삭제 등의 과정을 진행하게 된다.



$ mysql -u root -p

설치 작업이 완료되었다.



$ gem install mysql -- --with-mysql-config=mysql_config 파일 위치

$ rbenv rehash


2. Amazon RDS에 MySQL 인스턴스 만들기


개발/테스트 용도로 선택해야 free 티어의 데이터베이스 생성이 가능하다.


DB Instance Class에 가장 작은 t2.micro로 만들어야 왼쪽에 free tier로 설정된다.


인스턴스의 이름과 데이터베이스의 마스터 이름과 비밀번호를 설정하자.


Database 이름을 설정하고 나머지는 그냥 그대로 넘어가자


인스턴스가 생성되었다. Endpoint 주소를 통해 이후 접근해 보도록 하자.



3. Rails 애플리케이션과 Amazon RDS 연동하기


지난 글에서 생성해서 사용했던 Rails 애플리케이션인 myFirstRailsApplication을 활용하겠다.

해당 애플리케이션 디렉토리 안의 config/database.yml 파일을 수정하자.


Gemfile에 mysql2 젬을 추가해주자.


$ vi Gemfile

...

gem 'mysql2'

...


터미널에서 Amazon RDS에 원격으로 접속해서 development 데이터베이스를 생성하자.

test와 production 데이터베이스도 같이 생성해주자.


$ mysql -h 데이터베이스의 Endpoint 주소 -u root -p

> CREATE DATABASE development DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

> CREATE DATABASE test DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

> CREATE DATABASE production DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;


* 데이터베이스의 character set을 utf-8로 설정하지 않고 기본 설정으로 생성하게 되면 latin1으로 초기값이 설정되어 한글 문자열이 있는 데이터를 insert할 때에 다음과 같은 오류를 발생시킨다.

rake aborted!

ActiveRecord::StatementInvalid: Mysql2::Error: Incorrect string value: (입력 데이터)

참고http://develop.sunshiny.co.kr/385


  2016.12.30 추가

  ssh를 통해 원격접속하여 my.cnf 파일을 수정하여 utf8 설정을 할 수 없기에 대신 AWS RDS에서는 Parameter Group이라는 형태로 설정 할 수 있다.



4. 테스트


이 테스트 단계는 내 pc의 개발단계의 애플리케이션과 Amazon RDS를 연동하는 과정이다. 테스트 과정에서 사용된 예는 '퍼펙트 루비 온 레일즈, 제이펍'을 참고하였다.

이제 데이터베이스 설정은 끝냈으니 rails 애플리케이션에서 모델을 생성해보자.

$ rails generate model book isbn:string title:string price:integer publish:string published:date cd:boolean

$ rake db:migrate


위에서 데이터베이스가 생성되어있지 않으면 rake 명령시에 위와 같이 데이터베이스를 찾을수 없다며 에러를 표시한다.

항상 데이터베이스를 먼저 생성해주자.



다시 데이터베이스에 원격접속하여 테이블이 생성되었는지 확인해보자.


$ mysql -h 데이터베이스의 Endpoint 주소 -u root -p

> use development;

> desc books;



책에 관한 테이블을 만들었으니 데이터를 입력해보자. fixture 파일을 이용하여 데이터를 입력하자.

데이터: https://github.com/Jpub/RubyonRails4/blob/master/test/fixtures/books.yml

위의 yml 파일을 '/test/fixtures/books.yml'에 덮어씌우자.

그리고 다음과 같은 명령을 수행한다.

$ rake db:fixtures:load FIXTURES=books

아무런 에러가 표시되지 않는다면 정상적으로 수행된 것이다.

MySQL에서 확인해보자.

> SELECT * FROM books;



이제 이 모델을 이용한 간단한 컨트롤러를 만들고 배포해보자.


$ rails generate controller books


이제 컨트롤러에 다음과 같은 코드를 입력하여 데이터베이스에 저장되어있는 책 목록을 화면에 출력해보자.


controllers/books_controller.rb

class BooksController < ApplicationController
  def list
    @books = Book.all
  end
end

views/books/list.html.erb

<table border="1">
  <tr>
    <th>ISBN 코드</th><th>이름</th><th>가격</th>
    <th>출판사</th><th>출간일</th><th>CD-ROM</th>
  </tr>
  <% @books.each do |book| %>
  <tr>
    <td><%= book.isbn %></td>
    <td><%= book.title %></td>
    <td><%= book.price %></td>
    <td><%= book.publish %></td>
    <td><%= book.published %></td>
    <td><%= book.cd %></td>
  </tr>
  <% end %>
</table>

라우트 경로를 설정해주자.


$ vi config/routes.rb

...

get 'books/list'

...


서버 데몬을 실행하고 정상적으로 작동하는지 확인하자.

$ rails s


그리고 아래 주소로 접속해보자.

http://localhost:3000/books/list/


5. 배포하기


이제 배포하여 확인해보자.

$ git add .

$ git commit -m "books controller, view and route"

$ eb deploy

$ eb open


deploy에 오류가 발생한다면 데이터베이스의 Security Group이 현재 개발중인 pc의 ip만 접근 가능하도록 설정 되어있기 때문에 ec2 인스턴스가 migrate시에 데이터베이스에 접근하지 못해 발생하는 것이다. 필자는 Security Group의 Inbound를 모든 곳에서 접근할 수 있도록 모두 열어버렸다. 보안상 이렇게 하지 않는것이 좋을것이나 동시에 두개의 ip를 적용하는 방법을 몰라 일단 이렇게 설정해 둔다. :(

데이터베이스의 Security Group도 EC2 콘솔에서 설정을 바꾼다. EC2 - Security Group에서 현재 사용중인 데이터베이스의 그룹을 찾아 변경해주자.


/books/list 경로로 들어가서 확인해 보자.

배포(production) 환경에 있는 데이터베이스에는 현재 어떠한 값도 들어있지 않기 때문에 아래와 같이 페이지가 비어있게 된다.

직접 데이터베이스에 들어가 테이블이 생성되었는지 확인하고 임의로 데이터를 넣어보고 확인해보자.

> use production

INSERT INTO books (isbn, title, price, publish, published, cd) VALUES('978-4-7741-5878-5', '안드로이드 개발자를 위한 자바', 33600, '제이펍', '2013-08-20', false);



정확히 들어간 것을 확인할 수 있다.

2. 부산

    바다가 보고싶었다.

    남쪽의 바다와 가까운 곳으로 내려오는 일도 흔치 않은데 바다를 못보고 가긴 좀 아쉽지 않은가. 어디로 갈까 하다가 역시나 떠오르는 한 곳, 부산.

3900원이면 부산 사상 버스터미널로 향하는 시외버스를 탈 수 있다. 버스 안에 사람은 서너명 남짓듬성듬성 앉아있었다. 저 안쪽에는 무슨 이유로 부산으로 가려 하는지 궁금증이 피어나게 만드는 여성의 머리 윗부분만 얼핏 보였다. 그는 핸드폰으로 누군가와 끊임없이 메세지를 주고 받는 듯 누가 타고 있는지에 대해서는 무심한 듯 하다. 난 앞쪽에 자리를 잡았다. 안전벨트를 맸고, 버스는 출발했다.

 

    부산으로 향하는건 꽤 오랜만이다. 첫 부산에 대한 기억은 아마 초등학생 때일 것이다. 동생은 아직 초등학교 입학 전인듯, 정확히 기억이 나질 않지만 아마도 내가 9살 쯤이지 않았을까 싶다. 그 시절의 기억이 그렇듯 그 여행에서 내가 무엇을 했는지, 뭘 보았고 어디에 갔는지는 전혀 기억이 나지 않는다. 단지 부산에 갔었다는것만 확실히 인증해 줄 수 있는 인상 깊었던 한 장면만 기억날 뿐이다. 우리 가족은 기차를 타고 부산으로 향했었고 야간 기차를 탔는지 부산역에 새벽 일찍 도착했다. 배는 고프고 아직 밖은 어둡고 날은 추웠다. 곧 해가 뜰 것 같은 시간이었다. 바다의 등대처럼 어둠이 짙게 깔린 역전의 광장을 은은히 밝히는 편의점이 우리 가족이 쉴 수 있는 유일한 공간인듯 했다. 인기척 없는 거리를 바라보며 따뜻한 컵라면을 가족과 함께 나눠 먹었다어둠이 광장 사이사이의 골목으로 숨어 들어가고 밖이 점점 퍼렇게 변하는 걸 지켜 보았다. 이것이 부산에 대한 첫 기억이다. 왜 그 기억만 부산 여행에서 살아 있는지 모르겠다. 부산이라는 장소가 주는 인상 보다는 아마도 새벽 기차여행에 대한 기억, 어디론가 떠나는 행위와 평소에는 움직이지도 않을 특별한 시간에 한 행동 그 자체가 즐거웠을거라 생각한다. 짧게 말하면 그 때부터 이미 '여행한다는 것' 그 자체를 좋아했던 것 같다.

그 이후로도 몇 번은 갔을 것이다, 아마도. 딱히 요즘의 잘나가는 20대와는 거리가 먼 사람이었기 때문에, 해운대에 완벽한 몸매를 가진 여자친구와 여행을 갈 일도 없었고, 친구들과 함께 헌팅을 하자며 해수욕장으로 떠날 일도 없었다. 애초에 그런일을 잘할 재능도, 흥미도 없고 받쳐줄 화술과 외모도 부족함은 물론이었다. 그냥 무슨 일에서인가 갔을것이다, 아마도. 그런 무슨 일에서 방문했던 기억들은 전혀 떠오르지 않는다. 단지 마지막 기억만 조금 남아있다. 2013년 여름. 두번째 내일로를 떠났을 때다첫 내일로 여행은 겨울에 혼자였었기에 이번 여름은 여럿과 함께 떠났었던 것이다. 남자 셋 여자 셋. 꽤 많은 인원의 여행이었다. 곰곰이 생각해보면 남녀 단둘이 여행을 가기엔 뭔가 어색할테고 2 2도 어색하긴 별반 차이 없었을거다. 8명은 너무 많으니, 그래서 타협한 인원이 6명이 아니었나 싶다. 동성끼리 여행 하고 싶었으면 애초에 거기다 글 올리지 않고 친구랑 갔을테니 그런 가정은 넘어가자. 네이버의 유명 내일로 카페에서 사람을 모아 여정을 세웠고 그 중에 부산이 있었다.

    한 여름에, 부산에, 남녀가, 쌍으로, 6명이, 며칠을, 함께.

    이렇게 보니 별 서술도 없는데 벌써 후끈거리는 상상이 펼쳐지는 듯 하다. 어딘가 낭만적이고, 은밀하고, 더 나아가 음란하기까지하다. 애석하게도 음란은 커녕 '낭만'의 앞글자 까지도 도달할 일이 없었다. 아마도 서로에게 느낀 첫 인상부터 예견된 결과였을거다여행을 시작한 의도에는 그런게 깔려있었을지 모르겠다만. 어느 시장의 맛집에서 밥을 먹고, 무더위를 피하기 위해 팥빙수를 나눠 먹고, 감천문화마을을 둘러보며 사진을 찍고, 야간의 해운대 바다에서 술을 마셔도 여행은 그닥 재밌지 않았다. 오히려 홀로일 때보다 더 외롭게 느껴졌다. 주변에는 연인들과 여름의 해운대를 만끽하기 위한 사람들로 북적거리는데 난 왜 여기 한복판에 이러고 있을까 하는 생각이 들었다. 함께한 그녀들이 주위에 여성들에 비해 부족한 사람들은 아니었다만-물론 지나가는 특출난 몇몇 여성에게 눈돌아가기는 했다- 그 친구들이 해운대에서 내 앞에 앉아 있다고 한들 딱히 별 다른 생각이 들지 않았다. 애초에 그러자고 시작한 여행은 아니었으니까. 그냥 홀로 여행하면서 가진 다양한 생각들을 비슷한 사람들과 함께 여행하며 나눌 수 있지 않을까 하는 생각때문에 여럿과 같이 여행했던 것이다. 하지만 사람마다 여행을 하는 목적이 제각각임을 확인하는데 오랜 시간이 걸리지 않았다. 누군가는 어떠한 장소에 방문했다는 그 사실만으로도 충분했고, 누군가는 '내가, 지금, 이렇게, 산다.'고 이야기 해줄 사진을 남기는 것만으로도 부족해 보이지 않았다. 매일 밤 나누는 술자리는 내 지난번 남자친구가 어땠는지, 내가 일하는 곳은 어떠한지, 언제쯤 결혼할 건지에 대한 신변잡기 이야기였다. 난 그런 이야기를 나누고자 하는 마음이 없었다. 그냥 여행에 대해 이야기 할 사람이 필요했던 것 뿐이다. 우리가 지나온 역이 어떠한지, 기차에서 펼쳐진 풍경이 어떠했는지, 전라선과 경전선을 타며 느낀게 어떠한지(기차가 같은 기종이라 할지라도 분명 차이가 있다), 순천만의 갈대가 어떠하고, 여수의 낮과 밤의 차이가 어떠한지, 통영의 시내 교통의 복잡함과 소매물도의 아름다움은 어떠한지. 여행에서 내가 갖는 관심은 오로지 이런것 뿐이었다. 당연하게 그들과 내가 여행에서 갖는 공통 관심사가 점점 멀어져 갈 수 밖에 없었고 그 절정에 나는 해운대에 앉아있었다. 차라리 그런 분위기의 부산엘 가지 말았었다면 괜찮았을 여행일지도 모르겠다. 마지막 기억은 그렇게 씁쓸하게 잊혀지고 있다.

 

    자리에 앉아 이런저런 기억을 더듬다가 잠에 빠져 들었다. 평소보다 일찍 일어난 탓도 있고 꽤나 많이 걸어보며 움직인 탓도 있었던 듯 하다.

 

    사상 터미널 까지 대략 50분이 걸렸다. 마지막 부산 여행때도 사상 터미널에 왔었던게 잠깐 떠오른다. 1년 내로 결혼하고 싶다던 그 여자애들은 결혼이나 했나하는 생각이 스쳐지나간다. 처음에 탔을 때보다 꽤 많은 인원이 버스에서 내렸다. 얼굴조차 확인하지 못한 저 깊숙히 앉아있던 그녀는 벌써 어디론가 사라지고 없었다. 바쁜 평일의 오후, 제각기 할 일을 위해 바삐 흩어지고 있었다. 그 와중에 나만 특별히 가고자 하는 목적지도 없는 여행자였을 것이다

 

    번화가인 서면으로 향했다. 늦은 점심을 때우기도 필요했고, 이곳이 왜 유명한지 대략적으로 나마 확인해 보고 싶은 생각도 있었다. 혼자 밥 먹을만한 곳을 찾을겸 골목 골목을 들여다 보았다. 어떤 골목은 어느 번화가에서나 볼 수 있는 그런 밤 만되면 고기와 술과 사람으로 뒤엉켜 있을만한 곳도 있는가 하면서면역에서 저 멀리 떨어진 곳으로 들어가면 소위 '핫 플레이스'로 떠오르기 전에 사람들의 때가 덜 타고 아기자기함이 남아있는 음식점과 카페가 있는 골목도 볼 수 있었다. 젊은이들이 모이는 지역이라면 서울에서도 흔히 볼 수 있는 그런 광경입니다. 크게 다를건 없네요. 물론 밤의 서면은 뭔가 또 다른 매력이 있을수도 있겠지.

 

    네 시쯤 된 늦은 점심을 맥주 한 잔과 곁들여 먹었다. 그리고 다음 일정을 어떻게 가져갈까 고민했다. 게스트하우스를 찾아 들어갈까아니면 집으로 돌아갈까? 하룻밤 묵고 갈 각오도 하고 내려왔지만 딱히 내일 무엇을 해야 할지 마음 내키는 일이 없었다. 내일도 머물고 간다면 할 만한 일은 해동용궁사에 가서 일출을 한 번 보고 싶고, 인문학 서점이라는 인디고 서원이란 곳에 방문해 보고 싶기도 하고, 부산 사람들도 자주 가지 않았을 만한 멋진 카페를 찾아 못다 본 책을 다 읽고 돌아가고 싶었다. 그리고 게스트하우스에서 누군가를 만날 수 있다면 오늘이라도 당장 같이 술 한잔 기울이며 가슴에 쌓아둔 이야기를 하고 싶었다. 가족이기 때문에, 친구이기 때문에 오히려 하지 못할 이야기를 차라리 처음보는 사람이라면 쉽게 할 수 있을것 같았다. 복잡한 마음을 안고 시작한 여행이었기에 이 생각이 제일 간절했다. 취업하지 못한 내 넋두리를 들어주며 같이 공감할 친구도 필요했고, 올해 겪은 사건 사고를 이해해줄 멘토도 필요했다. 오히려 한 순간 만나고 잊혀질 사람일 수록 못다한 속내를 털어놓기가 쉬웠다. 그런 사람을 만나기에 여행지의 게스트하우스 만한 장소는 없었다. 단지 우려되는 것은 화요일의 게스트하우스에 그렇게 말동무할 사람이 있을까 하는 걱정이었다. 사실 없을거라고 확신했다. 휴가철도 아닌 주중에 게스트하우스는 그냥 고요한 숙박업소일거라고 생각했다. 고요한 게스트하우스라면 그냥 집에 돌아가는 편이 나을것이다. 여기까지 생각이 이르자 딱히 남고 싶다는 생각이 들지 않았다.

 

    그저 아무 생각없이 버스를 타고 지하철을 타고 이곳 저곳을 누비다가 한 카페에 들어가 앉았다. 못다 읽은 책을 마무리 하려고 말이다. 구글에서 검색해서 간 곳이었는데 꽤나 분위기 좋은곳이다. 부산 앞 바다가 보이는 곳은 아니지만 바다로 흘러 들어가는 수영만의 물의 흐름이 보이며, 센텀시티의 높은 건물에서 나오는 불빛들이 강물에 비치는 그런 장소였다. 2층에 아늑한 공간이 있었다. 연인과 친구들이라면 오기 정말 좋은 장소인듯 했다. 조명은 아늑하고 바깥의 풍경은 확 트이게 잘 보이는 그런 장소였다. 카페에 커피 맛보러 가는 사람이 아닌지라 커피의 수준을 논하긴 어렵네요. 단지 아쉽다면 아늑한 조명은 다시 보면 어두운 조명이고, 날씨는 꽤 쌀쌀했는데 히터는 안나왔다. 그리고 노래는 조금 크다는 느낌을 받았다. 한마디로 혼자 책읽으러 가기 좋은 장소는 아니라는 느낌을 받았다는 이야깁니다. 개인적으로 음악없는 카페를 찾고 싶은데 도저히 찾을 수 없네요. 무라카미 하루키도 음악없는 카페를 하나쯤 알아두면 좋다고 이야기 했는데 우리나라에 그런 카페가 있는지 조차 궁금합니다. 아시는 분은 제보 바랍니다.

 

    두세시간 정도 꼬박 앉아서 책에만 몰두했던것 같다. 집으로 돌아가자는 결심을 했으니 이제 돌아갈 시간이었다. 일반 기차는 너무 늦으니까 마지막 ktx를 타고 돌아가려 했다. 근데 아직 하지 않은 마지막 일이 있었다. 부산에 온 목적이 있었다. 바다를 보는 것이다. 대략 30페이지 정도 남은 책을 덮고 카페를 나왔다. 광안대교가 보이는 바다까지 걸어서 갈 수 있는 거리였기 때문에 빠르게 움직였다. 대양을 향해 나아가려는 수영만의 물결과 함께 바다로 향했다. 그리고 만난 광안대교와 함께 펼쳐진 부산 앞바다. 사실 난 햇살이 바닷물에 비쳐 찰랑거리는 주간의 바다를 더 선호하지만 밤의 바다도 그 나름대로의 운치가 있고 위로가 있다. 낮의 바다가 시선을 사로잡고 아름다움을 선사한다면, 밤의 바다는 미지의 어둠으로부터 몰려온 파도 소리가 귓가를 메워버리며 웅장함을 선사하고 때로는 공포감을 주기도 한다. 보이지 않기에 더욱 웅장한것이다. 이런 바다 앞에서 거역할 수 없는 한낱 인간이기에 느끼는 위로같은게 있다.

    여름이었다면 수많은 인파들이 몰려 바닷바람을 맞으며 술판을 벌렸을 것 같은 공간도 이제 다가올 추위에 맞서 마지막 바다의 정취를 즐기려는 몇몇 학생들만 남아 자리를 지키고 있었다. 부산 싸나이 둘이서 맥주를 기울이는 모습도 있고, 아직도 헌팅을 하는 시즌이 안 지난건지 알콩달콩함을 즐기는 듯한 4명의 선남선녀들, 뭐가 그리 즐거운지 회 한접시 시켜놓고 왁자지껄한 수다를 나누는 여학생 셋, 그리고 멍하니 바다를 바라보며 맥주 한 캔과 과자 한 봉지로 고독을 즐기는 분위기 있는 여자 한 명. 생각 외로 이 날씨에도 많은 사람들이 바다를 찾아 즐기고 있었다. 나도 홀로 고독을 씹는 그녀처럼 바다옆 가로등 밑에 앉아 술과 함께 이 분위기를 느끼는 것도 즐거울뻔 했다는 아쉬움도 들었다. 어쩌면 그런 사람들과 이야기 해 볼 기회가 있었을지도 모른다는 즐거운 상상에 빠져보기도 한다. 내년에, 내년에 이곳에 찾아와 해볼 것이라 다짐해 본다. 부산에 오기 위한 이유를 남겨두고 떠나는 것도 어쩌면 여행지에 대한 예의일지 모른다. 모든 걸 다 보고 가져가려고 욕심 부릴수록, 오히려 느낌과 감각은 희미해지고 생각에서 빨리 잊혀지기 쉬운 법이리라.

 


    부산역에 도착하여 집에 가려고 보니 이제야 저녁을 먹지 않은게 떠올랐다. 그래서 맥주와 함께 먹으려고 오뎅가게에 들렀다. 몰랐는데 요즘은 오뎅가게도 파리바게트 마냥 다양한 종류의 오뎅을 파는걸 보고 놀랐다. 부산에만 있는건지 다른 지역에도 있는건지 모르겠다. 내 기억엔 이런걸 본 적이 없는데 말이다 흠.

 

    마지막 ktx 출발 시각보다 30분이나 일찍 열차에 탑승했다. 부산역에서 마지막 ktx를 타는 느낌은 다른 열차와는 느낌이 많이 달랐다. 서울역에서 출발하는 기차라면 좌석 대부분이 차 있고 북적거림이 있었을텐데, 반대로 부산에서 출발하는 열차에는 조용한 안정감만이 느껴졌다. 이렇게 고요한 느낌의 열차는 처음이었다. 예매할 때 사람이 별로 없음을 알고 일부러 가족석에 자리를 잡았다. 나 혼자 ktx 객차 하나를 전세 낸 것 같은 느낌이 들었다. 출발하기 전 기차의 엔진으로 인해 발생하는 기분좋은 웅웅거림, 진동. 부산이라는 도시, 한국이라는 이 사회와 격리된 어떤 이 세상의 모진 풍파를 막아주는 안전하고 아늑한 캡슐에 들어온 듯한 느낌이었다. 작은 진동소리 밖에 들리지 않는 아주 큰 고요함으로 둘러싸인 장소. 어쩌면 매번 여행을 할 때마다 내가 가장 찾아 헤메는 그런 장소가 바로 이런 곳 아니었을까 싶다. 그 누구도 없는 곳이지만 그럼에도 두려움이라고는 느껴지지 않는 그런 아늑한 곳.

    이런 느낌을 받은적이 과거에도 있었다. 14년 봄. 유럽 여행을 떠났을 때, 그리고 오스트리아 빈의 밤거리를 헤메던 때가 가장 그랬다. 말하나 통하지 않는, 그런 어쩌면 가장 위험한 장소였지만 그럼에도 그곳에서 난 대단히 큰 위로를 받았다. 졸업을 앞둔 스트레스는 지구 반대편 대한민국에 있는 또 다른 나의 걱정일 뿐인듯 싶었고, 빈의 길거리위에 서있는 나는 그와 다른 사람인 것 처럼 느껴졌다. 마치 오래 전부터 유럽에 살아왔었던것 같고 이곳이 세상에서 걱정없는 유일한 장소처럼 느껴졌었다. 매일매일 다른 장소에서 새로운 누군가를 만나고, 밤마다 홀로 또는 누군가와 함께 와인을 기울이며 아무 걱정 없이 여행을 다니던 그때. 홀로 다닌 여행의 외로움 만큼이나 여행 내내 함께 했던 것이 그런 안도감이었다. 내일 어떤 여행지를 가게 될지 어떤 어려움을 만날지 하는 걱정은 대한민국에 있는 내가 졸업 후 어떻게 사회 진로를 이어나갈지 하는 걱정에 비하면 아무것도 아닌 일이었다. 그런 행복감을 여행하는 중간에 느낄 수 있어서 너무 기뻤다. 여행에서 돌아와서 그때를 회상하며 '그때가 좋았지' 하는게 아니라, 빈의 도심에 있으면서 바로 느낄 수 있었던게 제일 큰 행복이었다. 그런 행복을 이번 여행에서 이렇게 사소한 곳에서 느낄 수 있었던건 의외의 수확이었다.

  



* 빈에서 느낀 기분을 제대로 표현한 사진이 없다. 사실 그날 밤에 사진을 찍으려 하지 않았다. 어차피 사진에 그 느낌이 담길리 없잖습니까. 그냥 그 느낌을 온전히 느끼고 싶었다. 위의 두 사진에서 동질감을 느낄수 있으신가요. 혹은 비슷한 또 다른 경험이 있으신가요.



    덕분에 이곳에서 즐겁게 책에 또 빠져들수 있었다. 몇페이지 남지 않은 <대통령의 말하기>를 다 읽었고, 하나 더 가져온 하루키의 에세이도 조금 읽을 수 있었다. 베네치아에서 샀던 아직도 반의 반도 못쓴 공책에 오늘의 생각을 옮겨 적을만한 사색도 할 수 있었다. 기술이 너무 발달해서 부산에서 천안까지 겨우 2시간 밖에 안걸린다는게 아쉬울 정도로 이 느낌은 환상적이었다. 그리고 어느새 천안아산역에 닿았다. 짧은 여행이었지만 짧지 않은 추억을 돌아보고 그 만큼의 여행을 더 한 것 같았다. 이 깊은 시련이 끝나고 다음 여행에는 좀더 밝은 기억을 꺼내 볼 수 있었으면 한다.

1. 봉하로 향하는 길

    여행을 좋아하는 나이지만 최근 2년간 이렇다 할 여행을 하지 못했다. 여행을 하기에 금전적 여유도 없었고 마음속에 아름다움을 누릴 공간이 부족했다, 시간은 많은데 말이다. 이러한 욕구불만이 쌓이다 보니 종종 불면을 겪기도 했다. 대학생활 내내 나는 불면과는 거리가 먼 사람이었지만 백수라는 신분은 사람을 아주 쉽게 변화시켰다. 그렇게 여행을 떠나고 싶어서 미칠것 같은 마음을 가슴속에 꾹꾹 눌러두고 살았다.

    지난 목요일이었던가 <무현, 두 도시 이야기>를 보고 문득 봉하마을에 가보고 싶다는 생각을 하게 되었고, 여행을 하고 싶다는 마음과 맞물려 바로 실천에 옮기기로 했다. 가을의 정취를 느끼기에도 지금이 최적기인듯 했다. 여행의 목표는 두 가지였다. 하나는 '노무현', 다른 하나는 '독서'.  영화를 보고 그가 궁금해졌고, 최근의 정치 현실을 보며 또다시 그를 떠올리기에 충분했다. 더불어 책을 읽기에 너무 좋은 계절이기도 했고, 시험을 앞둔 학생이 텔레비전에서 방영하는 다큐멘터리와 토론을 재밌어 하는것 처럼 취직하기 싫은 백수가 자기소개서 대신 독서에 재미를 붙인 꼴이 지금의 나이기 때문이기도 했다.


    어차피 당일치기 여행을 기획한 만큼 여행을 위해 크게 준비할 것은 없었다. 물론 내 여행은 항상 즉흥적이었기 때문에 어디에선가 하루 묵게 될 수도 있다는것을 염두에 두지만 최대한 움직임에 제약이 없도록 가볍게 가려 했다. 가장 중요하게 준비한건 노무현에 관한 책이었다. 어떤 책을 준비할까 생각하다 현 대통령과 가장 비교되는 그의 글과 말에 대해 이야기한 책을 사려했다. 원래는 <대통령의 글쓰기>를 사려 했으나 재고가 없는 통에 대신 <대통령의 말하기>라는 책을 구입했다. 아마 큰 차이는 없을 것이다. 결국 말하기든 글쓰기든 그것을 가치있게 만드는건 그걸 만드는 사람의 생각이니까. 이 책과 요즘 가장 재밌게 읽고 있는 하루키의 에세이 중 하나인 <세일러복을 입은 연필>도 함께 챙겼다. 최근의 독서 패턴이 어려운 책을 독파하다가 중간중간 가벼운 책으로 머리를 식히는 식인데, 그러한 책에 가장 부합하는게 이 하루키의 에세이었다. 그의 소설은 그닥 나에게 별로 와닿지 않는 반면 그의 에세이는 정말로 재밌고 자신의 생각과 느낌을 전달하는 그의 놀라운 표현력이 나를 매료시켰다. 이 글을 보는 독자중에서 주말의 나른한 오후에 카페에서 느긋하게 휴식을 취하는 느낌으로 읽을 만한 책을 찾는 사람이 있다면 그의 에세이를 강력히 추천하는 바입니다. 그리고 이 외에 수건 하나 팬티하나 챙기고 이것으로 준비 끝.



    화요일엔 비 예보가 있었다. 어머니는 굳이 비오는데 여행을 가냐고했다. 머리 시릴정도로 가을의 파란 하늘을 보는것도 좋지만 비가 내리는 풍경도 무척 좋아하기 때문에 가을비는 내 여행의 장애물이 아니었다. 오히려 기차의 차창을 두드리는 빗소리는 독서에 집중력을 높이기도 했고, 비오는 시골이 일말의 소음마저도 차단시켜 연출하는 고요한 풍경을 보는 것도 좋았다. 아쉽게도 화요일 아침에 일어나 보니 비가 올 낌새는 전혀 보이질 않았다.





    천안아산역에서 동대구를 거쳐 진영역으로 가는 여정이었다. 더 일찍 진영역에 도달하는 열차도 있지만 그러다간 열차안에서 진영역에 도착할때까지 모두 꿀잠으로 때워버릴것 같았기 때문에 충분한 수면을 취하고 컨디션이 좋을 만한 시간을 택했다. 의외로 출근시간을 넘긴 시각의 ktx열차였지만 사람들이 꽤나 많았다. 대부분의 경우 서울로 향하는 상행선 열차만 탔기 때문에 천안 아래로 내려가는 열차를 오랜만에 타는바 두근거리지 않을 수 없었다. 자리에 앉아 ktx좌석의 편안함을 조금 느꼈다가 책을 꺼내 읽어내려갔다. 변화하는 바깥 풍경과 약간의 소음, 편안한 좌석, 내가 무슨 책을 읽는지 신경 쓰는듯 안쓰는 듯한 주변 사람의 시선. 사람마다 최적의 독서환경이 제각각이겠지만 난 이러한 환경에서 매우 쉽게 책에 몰입할 수 있었다. 잠시 눈이 아파오거나 집중이 흐트러질 때쯤 시시각각 변화는 바깥 풍경을 보며 머리를 비우고 다시 책에 빠져들었다.





    동대구역에 도착해서 못먹은 아침을 때우기 위해 용우동이라는 가게에서 튀김우동을 시켜 먹었다. 맛은 그냥 그저 그랬다. 분명 그 옛날 언젠가 역안에서 먹었던 우동이 그렇게 맛있을 수 없었는데, 아동기의 기억을 넘어 청소년기 이후의 기억에서는 단 한 번도 그런 맛의 우동을 먹어본 적이 없는듯 하다. 대전역 이었던가 분명 맛있었던 우동이 있었던거 같은데 말이다. 그 우동들은 다 어디 갔는지 모르겠다. 이 가게 다음에는 올 일이 없지 않을까 싶다.




    다시 진영으로 향했다. 경부선 열차에 비해 확실히 적은 사람들이 타고 있었다. 그 사람들은 지금 이 시각에 무엇을 위해 어디로 가고 있는 것인지 궁금했다. 젊은 부부인듯한 커플도 보이고, 샐러리맨 처럼 보이는 사람도 보이고 나이드신 어르신, 공군 군복을 입고 있는 군인도 보였다. 도시에서 내릴것 같은 샐러리맨은 들어보지도 못한 역에서 내렸고, 선글라스를 낀 젊은 부부는 여행지가 아닌 듯 한 곳에서 내렸다. 흠 사실은 내가 잘 모르는 여행지 들이 여기 근처에 많을지도. 그런 생각과 함께 책도 함께 읽다보니 금세 진영역에 닿았다. 진영역은 읍내에서 적잖이 떨어진 곳에 위치하고 있었다. 그래서 대부분의 승객들이 대중교통을 기다리기 보다는 마중나온 지인들의 차를 타고 하나 둘씩 빠르게 떠나고 있었다. 나 처럼 여행을 위해 이곳에 도착한 사람은 없는 듯 보였다. 봉하마을로 가는 노선은 10번버스가 유일했고 12시 10분에 출발한다기에 그 사이 역 주변을 둘러 보았다. 그리고 역 구석에 '화포천 아우름길'이라는 수상한 길을 발견했다. 자세히 가서 살펴보니 화포천 주위를 산책하는 코스인 듯 했다. 그리고 코스 중간에 목표로 하는 봉하마을이 있었다. 걷는걸 좋아하는 나이기도 하고 좋은 풍광을 둘러보며 가을 정취를 맞는것 만큼 좋은 경험은 없기에 한 줌의 미련도 없이 걷기 시작했다.





    그러나 들어온지 10분만에 다시 뒤로 돌아설 수 밖에 없었다. 조금 가다 보니 이게 관광코스인지 의심이 될 정도로 명확한 길이 없었고, 우측 길에는 공사중인 포크레인과 공사 현장 건물이 보였기 때문이다. 헤메다가 시간 낭비하는건 썩 좋아하지 않기 때문에 미련없이 뒤로 돌아왔다. 아직 코스가 다 완성된건 아닌 듯 했다. 완성되면 누군가 저에게 알려주세요. 그나저나 역에 도착해보니 12시 15분이었다. 앞선 버스는 놓쳐버렸기 때문에 어쩔수 없이 다음 버스를 타기 위해 시간표를 확인했다. '다음 버스 13시 40분'...음?

    미련없이 택시에 올라탔다. 번화하지 않은 시 외곽지역의 택시들이 늘 그렇지만 진짜 눈물나게 비쌌다. 기본요금은 3900원에서 시작했고 복합구간이라 140원씩 미터기가 올라갔다.(참고로 천안시내 기본요금은 2800원이다. 새벽 할증을 해도 3380원) 매번 이런지역에서 택시를 탈 때마다 택시 기사들에게 왜 여기는 이런 요금이 책정되는지 묻곤 하지만, 어차피 이 지역의 상황을 잘 모르는지라 들어도 이해를 못하긴 마찬가지이다. 그저 아까운것. 진영역에서 봉하마을까지 요금 7680원.




    아무래도 주중이다 보니 젊은 개인단위 관광객보다 나이드신 단체 관광객이나 가족단위 관광객이 많았다. 혼자 여행온 이는 나 뿐인 듯 했다. 사실 사람이 거의 없을거라 생각했는데 생각보다 많은 사람들이 있다는 것에 놀랐다. 원래 이렇게 방문하는 사람이 많았던 건지, 최근 개봉한 영화의 영향인지, 아니면 지금의 나라 현실을 보며 노무현이 떠오른게 나뿐이 아니었던 건지 새삼 궁금해진다.

    마을에서 떨어져 있는 곳에 묘지와 노무현 추모의 집이 있을거라 생각했던 것과는 달리, 마을의 바로 옆에 관련 장소들이 모두 있었다. 아니 봉하마을과 노무현이 함께 하고 있다고 보는게 더 정확한듯 하다. 한 장소에서 노무현의 묘역도 보이고 생가도 보이고 추모의 집도 보이고, 그리고 여전히 많은 사람들의 가슴을 아프게 하는 봉화산의 부엉이 바위까지 한눈에 보일 정도로 작디 작은 마을이었다.


    나는 마을 입구에서 국화꽃을 사들고 노무현의 묘역으로 향했다. 그의 묘역으로 향하던 나의 마음은 매우 떨리기 시작했다. 그가 서거하고 전 국민의 애도 물결에 빠져있고 모두들 그의 분향소를 찾아 죽음에 대해 한 마디 씩 하고 있을때, 나는 사실 그의 가치를 잘 알지 못했고 우리에게 얼마나 중요한 사람이었는지 깨닫지 못했다. 그가 나의 대통령이던 시절은 내 머리가 아직 완전히 크지 않았던 중고등학생 시절이었고 정치적 현안에 대해 큰 관심이 없을 때였다. 그가 어떠한 정치 역경을 겪어왔고, 어떠한 국민의 지지로 당선이 되었는지 마음에 와닿는 것이 없던 것이었다. 그랬기 때문에 그의 죽음과 그에 관해 알려진 사실에 대해 반신반의했고 결국 그 애도 물결에 참여하지 않았던 것이다. 그리고 노무현이 죽고 7년이 흐르는 동안 새누리당 치하의 대한민국은 도저히 받아들일수 없는 현실의 연속이었다. 학창시절에 배운 국가의 역할과 자유롭고 정의로운 사회에 대한 믿음, 민주주의의 가치에 관해 혼란이 올만한 사건들을 20대 대부분 기간동안 숱하게 봐왔었다. 국민들은 정의롭지 않고 불 합리적이며 억압된 현상에서도 "경제 때문에, 안보 때문에" 묵인하며 살아와야 했다. 하지만 그러한 믿음이 배반되는 현실을 보고야 만 것이다. 정의가 무너진 국가는 경제도, 안보도 그 어떤것도 해결할 수 없었다. 그들만의 경제적 문제만 해결되고 그들만의 안보만 해결이 되었다. 때문에 그 어떤 대통령보다 정의를 중요시 했고 민주주의 가치 실현을 위한 가장 큰 목표를 국민과의 소통으로 삼았던 그가 다시 한 번 떠오를 수 밖에 없는 것이다. 이러한 나라의 우여곡절을 겪은 후에야 그의 죽음이 안타까워 할 수 있게 되었고 그를 그리워 할 수 있게된 것이다.






   그의 묘역의 입구에 올라서며, 바닥에 적힌 수많은 국민들의 글을 보고 국민들의 참여를 바라고 소통을 하려 부단히 노력했던 그의 삶을 간접적으로 나마 느낄 수 있었다. 그의 죽음까지도 국민과 함께 했던 것이다. 수많은 이야기들을 지나 중간에 놓인 헌화대 위에 국화꽃을 놀려 놓고 그의 유해가 묻혀있는 너럭바위에 다다랐다. 차마 이루 말할수 없는 슬픔이 밀려 올려왔다. 자신이 평생 지키고자 한 신념이 깨어질때의 자괴감, 평생의 노력이 수포로 돌아가는 것을 볼 때의 좌절감이 얼마나 컸을지... 너무 가슴이 아팠다. 더 이상 부끄러운 이름으로 남기 싫었던 것이다. 눈시울이 붉어지고 눈물이 흐르려는 것을 꾹 참았다. 진작에 울었어야 하는걸 이제와서 흘리기엔 너무 늦었다. 그가 얼마나 위대했는지 이제 모든 국민이 알 것이다. 곧 다시 정의로운 사회가 도래할 것이고, 더 이상 이세상에 존재하지 않음을 슬퍼할 필요도 없이 그의 노력에 감사하는 것으로 족한 세상이 올 것이다. 그렇기 때문에 크게 울지 않으려 했다.

    묘소 옆을 지나 부엉이바위가 있는 곳으로 향했다. 청바지에 니트차림은 등산하기에 썩 적합한 차림은 아니라 오르는데 약간 애를 먹긴했다. 부엉이 바위는 다른곳보다 높은 목책으로 막혀있었다. 부엉이 바위 위에서 아름다운 자신의 고향을 앞에 두고 떠나야 하는 그의 발걸음이 후련하진 않았을 거라고 생각한다. 아니 쉽게 발이 떨어지지 않았겠지. 복잡한 마음이 자꾸 들어 오래 머물지 못하고 바로 내려왔다. 그리고 추모의 집으로 향했다.




    추모의 집은 아직 노무현을 추모하기 위한 기념시설이 지어지지 않아 그를 기념하기 위한 간이 건물과 같은 곳이다. 마당에는 그의 정치인생에서 유명해진 말들과 사진들이 전시되어 있었다. 건물 한편에는 변호인, 정치인, 대통령, 자연인으로서의 노무현에 대한 동영상이 계속해서 재생되고 있었다. 이미 영화에서 많이 나온 동영상들을 다시 보며 울컥하기도 했다가 숙연해 지기도 했다. 반대편 시설로 옮겨가면 그의 일대기와 사진, 그리고 그의 유품을 확인 할 수 있었다. 특별히 넓은 공간이 아니기 때문에 관람하는데 오래 걸리진 않는다. 얼른 제대로 된 기념건물이 지어졌으면 하는 바람이 들었다.

    생가와 묘역, 부엉이 바위 등산과 추모의 집을 둘러보는데 대략 두시간 반정도 소모한듯 했다. 이곳의 경치는 매우 아름다워서 하이킹 복장을 하고 봉화산 꼭대기에 오르거나 주변 하이킹 코스를 둘러 보는 것도 좋은 경험이겠다 싶었다. 그가 왜 이 주변 자연에 그렇게 많은 관심을 쏟았는지 조금은 이해할 수 있었다. 아름다운 곳에 아름다운 인물이 깃들어 있었다. 한 번쯤은 꼭 들러 볼 만한 곳입니다. 국립현충원의 대통령들의 묘소들과는 전혀 다른 느낌을 받을 수 있을거라고 생각합니다. 자연과 국민친화적인 그의 삶을 이곳에서 충분히 이해할 수 있게 되실겁니다. 이 글을 읽으시는 분들, 언젠가 시간 되신다면 들러보세요. 아참 저처럼 버스를 놓치는 사람 있을지 몰라 버스 시간표도 찍어서 첨부해 봅니다.






    올때는 못탔지만 갈때는 10번 버스를 탈 수 있었다. 진영역으로 가지는 않았다. 왔던길을 그대로 돌아가기엔 아직 해가 중천에 떠있고 이대로 여행을 끝내긴 너무 아쉬우니까 말이다. 진영시외버스터미널에서 내려, 나는 바다를 볼 수 있는 곳으로 향하는 버스를 탔다.



* 글 작성에 앞서, 이 글의 목적은 숙달자의 정보전달이 아니라 초심자의 기록 남기기에 가깝다. 이해가 부족한 상태에서 경험의 과정을 적으니, 미숙한 점이 많이 있을 것이므로 양해 부탁드린다. 또, 미숙함에 대한 지적은 대환영이지만 기본적으로 이 포스팅은 대부분 일방적인 기록 남기기에 가까우니 피드백이 적을 수 있다. 다만 필자뿐 아니라 같은 글을 보는 다른 독자들을 위해 또 하나의 필자가 되어 부연설명을 해 주신다면 감사할 따름이다.


작업 환경: macOS Sierra

0. Python 설치하기

터미널에서 Elastic Beanstalk 서비스를 cui 형태로 사용할 수 있게 하는 EB cli 설치를 위해 Python을 먼저 설치한다. 아마도 이 클라이언트가 Python을 통해 실행되는듯 하다.

$ brew install python

$ python -V

$ sudo pip install --upgrade pip

$ pip -V


1. EB cli 설치하기

AWS의 Elastic Beanstalk의 애플리케이션을 생성하기위해 EB cli를 설치하자.

$ sudo pip install awsebcli


2. git 생성하기

배포하길 원하는 앱에 대한 git을 생성하자.

지난 Ruby on Rails 설치때 만든 myFirstRailsApplication을 배포하겠다.

$ cd myFirstRailsApplication

$ git init

$ git add .

$ git commit -m "default rails project"


3. EB 생성하기

$ eb init

이 명령어를 실행하면 몇가지 입력을 받는다.

첫번째로는 EC2 인스턴스가 생성될 서버의 위치를 결정한다. 기본값으로 US West (Oregon)을 설정되어있다. 한국 서버를 이용하길 원하므로 10번을 선택해주자.

다음으로는 access-id와 secret-key를 입력받는데, AWS 계정 설정에서 IAM을 생성하여 얻을 수 있다.


그 외에 application name과 프로젝트 타입, 버전, ssh 설정 유무를 묻는다. 적절하게 설정하자.


4. 배포하기

$ eb create rails-beanstalk

위 명령어를 실행하면 자동으로 AWS의 Elastic Beanstalk에 기존에 설정한 이름으로 application이 생성되며 rails-beanstalk란 이름으로 environment가 생성된다. 이와 함께 자동으로 ec2 인스턴스를 생성해준다.


생성이 완료되면 다음 명령을 통해 애플리케이션에 접근해보자.

$ eb open


아래 명령어를 통해 오류의 원인을 확인하자.

$ eb logs

production environment 환경을 위한 secret_key_base에 대한 설정이 필요함을 로그로 확인 할 수 있다.

$ eb setenv SECRET_KEY_BASE=임의의 키 입력

$ eb open


그리고 다시 웹서버에 접속하면 웹 컨테이너는 정확하게 작동하나, rails 애플리케이션을 처음 실행할때 만나는 페이지가 아니라 페이지 없음을 띄워준다.

현재 애플리케이션에 생성된 컨트롤러가 존재하지 않으므로 어떠한 페이지도 띄워주지 않는 것이다.

컨트롤러를 생성하여 접속해보자.

$ rails generate controller WelcomPage welcome

$ vi app/views/welcome_page/welcome.html.erb

<h1>WelcomePage#welcome</h1>

<p>Find me in app/views/welcome_page/welcome.html.erb</p>

<p>This is my first Rails application on Elastic Beanstalk!</p>

$ config/routes.rb

Rails.application.routes.draw do

  get "welcome_page/welcome"

  root "welcome_page#welcome"


end

$ git add .

$ git commit -m "welcome page controller, view and route"

$ eb deploy

$ eb open


이제 root 페이지가 설정되어 원하는 화면이 표시됨을 확인 할 수 있다.



* 사용하고 난 후에 ec2 인스턴스를 정지시키자. 한 달 750시간을 초과하면 1년 무료의 기간이라 하더라도 요금이 부과된다. 특히 여러개의 인스턴스를 생성하는 경우 부과된다. 필자는 그것도 모르고 한 달동안 여러개의 인스턴스를 켜 두었다가 15000원 가량의 요금이 부과되었다. 다행이 환불 받을수 있었지만 이것 때문에 그날 밤에 잠을 못이뤘다.


참고자료

1. http://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/create_deploy_Ruby_rails.html

* 글 작성에 앞서, 이 글의 목적은 숙달자의 정보전달이 아니라 초심자의 기록 남기기에 가깝다. 이해가 부족한 상태에서 경험의 과정을 적으니, 미숙한 점이 많이 있을 것이므로 양해 부탁드린다. 또, 미숙함에 대한 지적은 대환영이지만 기본적으로 이 포스팅은 대부분 일방적인 기록 남기기에 가까우니 피드백이 적을 수 있다. 다만 필자뿐 아니라 같은 글을 보는 다른 독자들을 위해 또 하나의 필자가 되어 부연설명을 해 주신다면 감사할 따름이다.


0. Homebrew 설치하기

루비 버전 관리자인 rbenv를 설치하기 위해 맥의 패키지 관리자인 Homebrew를 먼저 설치한다. Redhat 계열의 패키지 관리자인 yum이나 Debian 계열의 패키지 관리자인 apt-get과 비슷한 역할을 한다 보면 된다.


아래 홈페이지에서 터미널에 입력할 명령어를 확인하자.

Homebrew 홈페이지: http://brew.sh/index_ko.html


1. rbenv 설치하기

아래 명령을 터미널에서 수행하자

$ brew update

$ brew install rbenv ruby-build


다음과 같은 화면이 나타날 것이다.



2. ruby 설치하기

기본적으로 맥에는 ruby가 설치되어 있다.

$ ruby -v

위 명령어를 수행하면 2.0.0p648 버전이 설치되어 있음을 알 수 있다.

rbenv를 이용하여 최신 안정버전을 설치해 보겠다.


$ rbenv install -l

$ rbenv install 2.3.1

$ rbenv rehash

위 명령어를 실행하면 설치 가능한 버전 목록이 표시된다. 현재 가장 최신 안정버전인 2.3.1을 설치한다.

새로 루비를 설치하거나 루비 젬을 설치하면 반드시 rbenv rehash를 해주자. 새로운 환경을 재설정 하는 옵션이다.



$ rbenv versions

위의 명령어를 실행하면 현재 시스템에 설치된 루비 버전 목록이 표시된다.

현재 system 버전과 사용자가 설치한 2.3.1 버전이 표시된다. 앞의 * 기호가 현재 활성화된 루비 버전을 의미한다.

$ rbenv global 2.3.1

$ ruby -v

루비 버전을 2.3.1로 활성화 시킨다. 허나 이 상태에서 ruby -v를 실행해보아도 system의 구 버전이 남아있게 된다.


이 문제는 환경변수에 rbenv가 추가되어 있지 않아 발생한다.

.bash_profile에 환경변수에 추가하는 export 명령어를 추가하여 터미널 수행시 추가될 수 있게 설정을 바꿔주자.

$ vi .bash_profile

맥의 초기 상태에서는 .bash_profile이 없기 때문에 새로운 파일을 생성한다. vi에서 다음과 같은 내용을 추가하고 저장하자.

export PATH="$HOME/.rbenv/bin:$PATH"

eval "$(rbenv init -)"


그리고 다시 루비 버전을 확인하면 정상적으로 새로운 버전이 적용되는 것을 확인 할 수 있다.


(http://seonhokim.net/2013/10/30/mac-os-x-%EC%97%90%EC%84%9C-path-%EC%84%B8%ED%8C%85-%EB%B0%A9%EB%B2%95/)

(http://stackoverflow.com/questions/10940736/rbenv-not-changing-ruby-version)


루비 젬을 관리하는 젬 관리자인 bundler를 설치하자.


$ gem install bundler

$ rbenv rehash


3. rails 설치하기


$ gem install rails

$ rbenv rehash

$ rails -v



4. rails 앱 만들어 테스트 하기

원하는 폴더에 rails 앱을 만들어보자.

필자는 documents 경로 아래에 myFirstRailsApplication이라는 앱을 만들었다.

$ cd documents

$ rails new myFirstRailsApplication


생성된 rails 앱의 폴더로 들어가서 작동여부를 확인해보자.

$ cd myFirstRailsApplication

$ rails server -d

$ curl http://localhost:3000


Safari를 통해 위의 경로로 접속하면 실제로 앱이 실행 됨을 확인할 수 있다.



참고자료

1. https://www.gitbook.com/book/rorlab/railsguidebook/details

+ Recent posts