lawfully.dev
lawfully.dev blog

이 글은 아직 작성중입니다.

지킬로 블로그 만들기

오픈소스 블루스

내가 처음 철학과 입학했을 때, 나는 뭔가 좀 새것을 배우고 싶었다. 예를 들면, 칸트나 헤겔이나 마르크스같은… 이해하라. 1980년대였다. 교수나 선배는 말했다. 칸트를 알려면 데카르트를 알아야 돼. 그래서 데카르트를 공부하겠다고 하면, 데카르트를 알려면 토마스 아퀴나스를 알아야 한다는 충고를 들었다. 이런 식으로 하다보면 의당 결국 공부할 것은 소크라테스나, 아니면 그보다 앞서서 소피스트나 피타고라스나 심지어는 탈레스까지 올라가곤 했다. 문제는 이런 식으로 해서는 졸업할 때까지 소크라테스까지도 가기 힘들다는 것이다.

지킬은 블로그를 만드는 데 사용하는 도구이다. 링크를 따라가 보면 아주 쉬워 보인다. 루비라는 프로그래밍 언어로 만들었다고 한다. 그야 뭐, 어쨌든 소프트웨어인 이상 뭔가로 만들었겠지? 일단 넘어가자. 다만, 지킬을 이용해서 블로그를 만들려면, 어쩌면 루비부터 깔아야 할지도 모르겠네…

잠깐! 인생이 그렇게 쉽지 않다. 왜냐하면, 일단 루비를 포함하여 모든 오픈소스 프로그램은 설치를 하는 수천가지 방법이 있기 때문이다. 일단 우리는 적어도 소크라테스까지 거슬러 올라갔다가 다시 내려와야 한다. 그렇게 하지 않으면 뭔가 큰 실수를 하게 된다. 컴퓨터가 두세 대 있어서 연습할 컴퓨터가 따로 있거나 하지 않다면 실패했을 때 다시 할 수 있도록 자기가 무슨 짓을 했는지 일기장같은 곳에 기록해 두는 것이 좋다. 아니면, 웹사이트 돌아다니면서 설명을 꼼꼼히 읽고 직접 순서도를 만들어 보든지…

이렇게 해야 하는 이유는 두가지이다. 첫째, 대부분의 오픈소스 프로그래밍 언어는 유닉스/리눅스 기반이다. 유닉스/리눅스 프로그램에는 나름의 철학이 있는데, 그것은 단 하나만 제대로 하는 프로그램을 만들자는 것이다. 따라서, 제대로 일을 하려면 여러 프로그램을 조합하고 결합하는 기술이 필수적이다. 둘째 이유는 오픈소스 개발자 커뮤니티의 특징인데, 대체로 한 사람의 지도자가 개발방향이나 프로그램을 만드는 것을 관리감독하지 않으므로, 비슷하거나 동일한 일을 하는 수많은 프로그램이 존재하게 된다. 그 가운데 몇몇은 잘 사용하다가 더 좋은 프로그램이 나오면 갈아타기도 하고, 다시 옛날 것으로 돌아가기도 하고, 좀 혼란스럽다. 오히려 프로그래밍보다는 커뮤니티에 가까이 있는 것이 나중에 낭패를 피하는 방법이기도 하다.

소크라테스와 헤겔 사이에는 수많은 철학자가 있다. 지킬과 루비 사이에도 엄청나게 많은 장애물들이 있다. 하나씩 살펴 보자. 오픈소스 프로그램은 위대함에도 불구하고, 다소 무정부적인 개발문화 때문에 처음 입문하는 사람으로서는 어려움을 느낀다. 유닉스 철학 때문에 윈도에서는 하나의 프로그램으로 간주될 것들도 수십, 수백개의 작은 프로그램으로 나뉘어져 있다.

이게 왜 문제가 되냐 하면 현실적으로 내게 필요한 것은 A라는 프로그램인데, A를 위해서는 B가 필요하고, B를 위해서는 C가 필요한 식으로 무한후퇴를 한다. 그러면, 나는 A라는 프로그램을 쓰기 위해서는 우선 여기에 필요한 것이 무엇이며, 또 역으로 여기에 필요한 것이 무엇인지에 대한 개념의 지도를 그려야 한다.

이 문제를 풀기 위해 상당히 오랫동안 고심해서 내어 놓은 것이 패키지 관리자라는 개념이다. 여러 프로그램의 의존성 문제를 한꺼번에 해결하려는 시도였다. 대표적인 것이 RubyGems이다. 이것은 루비로 만들어진 소프트웨어의 설치와 관리를 쉽게 할 목적으로 만들어진 패키지 관리자이다.

문제는, 패키지 관리자도 소프트웨어를 관리하는 소프트웨어라는 것이다. 그러므로, 이제는 패키지 관리자를 관리하는 (말하자면) 메타-패키지 관리자 소프트웨어도 생겼다. 더 문제는 루비 자체도 프로그래밍 언어이기는 하지만 계속해서 발전하는 소프트웨어이다. 그러므로, 루비 자체를 관리하는 패키지 관리자도 생겼다. 약간 정신이 없을 수도 있으므로, 맨 처음부터 이야기를 정리해 보자.

루비 자체를 관리하는 패키지 관리자는 자그마치 3개정도가 있다. chruby도 있고, rbenv도 있다. 그러나, 요즘 대세는 역시 rvm이다. 그러므로, 여기서도 rvm을 사용한다. 이것은 루비 프로그래밍 언어를 여럿 설치하고, 그 가운데 골라서 쓸 수 있도록 해 주는 프로그램이다. 그러므로, 먼저 rvm을 깔고, rvm을 통해서 루비를 설치한다.

생각해 보면, 루비 프로그램의 버전을 바꾸면, 루비의 기본 패키지 관리자인 RubyGems의 버전도 바뀐다. 그러므로, gem (RubyGems로 관리하는 각각의 프로그램을 gem이라 한다)도 바꾸어야 한다. 하나의 루비 프로그램을 위해서는 수십, 수백개 정도의 gem이 필요하다. 따라서, 그 의존성 문제도 아주 골치아프다. 이 문제를 해결하기 위해 나온 것이 바로 bundler이다. 그러므로, 이것을 설치한 다음에 블로깅 소프트웨어 gem인 지킬을 설치한다.

그러니까, 순서는 다음과 같다.

  1. rvm 설치하고, rvm으로 루비 설치
  2. bundler 설치하고, bundler를 이용해서 지킬 설치
  3. 지킬 theme인 Ed. 설치

RVM을 이용하여 루비 설치하기

이제 루비를 설치하기 위해 RVM을 설치해야 한다. RVM 홈페이지에 가 보면 간단히 할 수 있는 방법이 나온다.

$ gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
$ \curl -sSL https://get.rvm.io | bash -s stable // RVM 만 설치할 경우
$ \curl -sSL https://get.rvm.io | bash -s stable --rails // 루비까지 한꺼번에 설치할 경우

좀 더 자세한 설치와 설정 방법은 설치 페이지를 참고하라. 이어서 사용법도 나온다. 생각보다 간단하다. 다음과 같은 방식이다.

$ rvm list known
$ rvm install 2.6
$ rvm use 2.6

그리고, 특정 gemset을 만들어서 사용하고자 할 때에는,

$ rvm gemset create ed
$ rvm gemset use ed // 생성된 젬셋을 사용할 때마다 실행

bundler 및 이를 이용한 jekyll 등의 gem 설치

간단히 말해,

$ gem install bundler
$ bundle install
$ bundle exec jekyll serve