입문자를 위한 Ruby 프로젝트 만들기

Ruby는 유연성과 생산성을 강조하는 동적 프로그래밍 언어예요. 이 글에서는 제가 실무에서 사용하는 최소한의 흐름으로, 설치 → 프로젝트 생성 → 실행 → 테스트 → 빌드까지 빠르게 통과해봅니다. 처음 시작하는 분들이 "바로 써본다"에 집중할 수 있도록 가볍게 구성했습니다.

1) Ruby 설치

  • RVM(Ruby Version Manager) 사용 (macOS/Linux)
curl -sSL https://get.rvm.io | bash -s stable
source ~/.rvm/scripts/rvm
  • Ruby 설치
rvm install ruby --latest
rvm use ruby --default
  • 설치 확인
ruby --version
gem --version
bundler --version

2) 새 프로젝트 만들기

Ruby는 bundler라는 의존성 관리 도구를 씁니다. gem 패키지를 만든다면 bundle gem이 편해요.

  • gem 라이브러리
bundle gem my_gem
cd my_gem

생성된 기본 구조:

my_gem/
├─ Gemfile
├─ lib/
│   └─ my_gem.rb
├─ my_gem.gemspec
└─ spec/
    └─ my_gem_spec.rb

3) 첫 코드 작성

lib/my_gem.rb 파일을 열어 간단한 모듈부터 시작해봅니다.

# lib/my_gem.rb
module MyGem
  def self.greet(name = "Ruby")
    "Hello, #{name}!"
  end
end

실행:

ruby -e "require_relative 'lib/my_gem.rb'; puts MyGem.greet"

4) 의존성 관리

Gemfile에 라이브러리를 추가했다면 설치합니다.

bundle install

처음 수준에선 필요 없지만, HTTP 클라이언트나 웹 프레임워크를 넣을 때 필수입니다.

5) 코드 포맷

RuboCop을 설치하고 사용합니다.

  • 설치
gem install rubocop
  • 실행/자동수정
rubocop
rubocop -a

6) 간단한 테스트(RSpec)

테스트 파일 spec/my_gem_spec.rb:

# spec/my_gem_spec.rb
require "my_gem"

RSpec.describe MyGem do
  it "기본 인사말을 출력한다" do
    expect(MyGem.greet).to eq "Hello, Ruby!"
  end

  it "사용자 이름으로 인사한다" do
    expect(MyGem.greet("World")).to eq "Hello, World!"
  end
end

테스트 실행:

bundle exec rspec
# 자세히 보고 싶다면
bundle exec rspec -v

7) gem 빌드

gem을 빌드합니다.

gem build my_gem.gemspec

설치 테스트:

gem install ./my_gem-0.1.0.gem

8) 의존성 그래프 보기(디버깅에 유용)

bundle viz

9) 선택: Lint(RuboCop)

이미 위에서 언급했지만, 추가 설정:

rubocop --auto-gen-config

전체 흐름 한눈에 보기

 flowchart LR
  A[Ruby 설치] --> B[bundle gem my_gem]
  B --> C[lib/my_gem.rb 작성]
  C --> D[ruby 실행]
  D --> E[bundle exec rspec]
  E --> F[rubocop]
  F --> G[gem build]
  G --> H[gem install]

다음 단계

  • 자주 쓰는 gem들
    • 웹: Sinatra, Rails
    • 테스트: RSpec
    • HTTP 클라이언트: Faraday
  • 작은 gem이나 Rails 앱을 만들어 보며 감각을 익히세요. 필요해질 때 테스트를 보강하고, Gemfile로 의존성을 관리하면 됩니다.

참고: 설치 시 발생할 수 있는 문제 해결은 별도 문서에서 자세히 다룹니다. 우선은 위 흐름으로 첫 프로젝트를 끝까지 만들어 보고, 막히는 지점이 생기면 개별 트러블슈팅 글을 참고하세요.