티스토리 뷰

Ruby on Rails - Gem이란?


| Gem이란?


레일즈가 프레임워크라고 한다면, 잼은 라이브러리입니다. 즉, 필요한 기능이 있을 때 추가해서 사용하면 됩니다


  • 더 추가해서 설명하면, rubygem(Gem)이란 루비에서 지원하는 패키지 시스템으로 리눅스의 패키지 시스템인 yum apt emerge 같은 것으로 필요프로그램을 관리할 수 있는 프로그램입니다. 
  • Gem 또한 저런 시스템들과 마찬가지로 명령만 내리면 인터넷에서 자동으로 프로그램을 받아서 설치를 해줍니다. gem을 통해, 루비 프로그램과 라이브러리를 배포하는 표준 형식과 배포 방법을 제공하는것입니다.(node에서 사용하는 npm과 유사합니다.)
  • 레일스 프로젝트를 생성하면 프로젝트 루트 디렉토리에 Gemfile이 자동으로 생성됩니다. Gemfile은 다양한 gem을 등록하는 파일로 텍스트 파일인 것입니다. 여기서 젬이란 다른 언어에서 흔히 접하게 되는 일종의 루비 라이브러리라고 생각하면 됩니다. 이미 많은  젬들이 공개(http://rubygems.org)되어 있기 때문에, 우리는 그저 필요한 젬을 다운받아 사용하기만 하면 됩니다.


쉽게 말해서!

루비 프로그래머는 gem을 이용해서 간단하게 원하는 프로그램을 설치할 수 있으며, 자신이 개발한 프로그램을 간단하게 배포할 수 있다.


따라서 레일스 프로젝트로 웹서비스를 제작할때 다른 gem들을 활용해 더 멋진 기능을 가진 웹사이트를 만들게 되는 것입니다!


Gem 명령어


https://www.sleepinglion.pe.kr/blogs/31 참고


명령어는 gem 으로 시작합니다.

인스톨시에는 "gem install 패키지명"

업데이트시에는 "gem update 패키지명"

삭제시에는 "gem uninstall 패키지명"

  • 레일즈에서는 이를 통해서 의존성 프로그램들을 설치하는데 예를 들면 gem install rails를 실행하면 레일즈가 설치됩니다. 그후에 "rails new app이름"  명령어를 실행하면 레일즈 app이 해당 이름으로 설치되고 최상위 폴더를 보면 Gemfile이 있는데 여기에  필요프로그램을 기술하면 알아서 설치를 해주는 것입니다. 

  • 이 때는 일일히 gem설치를 할수 없기에 한번에 해결해주는 프로그램이 있는데 bundler라는 프로그램입니다. bundle install, bundle update 명령어를  통해 일괄적으로 처리가 가능합니다. 이를 통해 Rails App에 필요한 프로그램들을  설치하여 배치시 의존성 문제를 쉽게 처리할수 있습니다.

  • 즉, gemfile이 bundler에서 사용하는 의존성 파일이고, bundle은 gemfile에 정의된 gem들의 의존성을 파악해 사용할 수 있게 해주는 명령어입니다.


Gem 찾아보기

rails new "app name"
위와 같이 레일즈 프로젝트를 만들어주면 bundle install이 실행되서 , 레일스 프로젝트에 기본으로 필요한 gem들이 Gemfile을 참고하여 자동으로 설치되는것을 확인 할 수 있습니다.


아래에서 rails 프로젝트 안에 gem file과 gem file.lock이라는 파일들이 생성되어 있는것을 확인 할 수 있습니다.


  







Gem file을 참고해, 필요한 gem 이미 설치되어 있다면, 번들러는 그것을 사용합니다. 이미 설치된 gem은 설치할 필요가 없기 때문이죠!  필요한 gem 시스템에 설치 , 번들러는 설치된 모든 gem 버전관련 정보를 Gemfile.lock 기록합니다.






Gem 검색하기

이제, gem이라는것에 대해서 알아봤으니 어떠한 gem들이 있는지 살펴봅시다. 일단 루비의 라이브러리는 보동 RubyGems.org에서 젬으로 제공됩니다. 직접 웹사이트에서 둘러보거나 gem 명령어로 이용할 수 있습니다.

https://rubygems.org/   



Gem 간단하게 만들기

http://ruby-korea.github.io/rubygems-guides/make-your-own-gem/ 참고


gem이라는것에 대해 알아보았으니, 자신만의 간단한 gem을 만들어 봅시다 아래와 같이 디렉토리를 구성해봅시다.

|----kkul.gemspec
|----lib
     |----kkul.rb

lib/kkul.rb 안의 코드는 뼈대만 있습니다. 즉, gem에서 어떤 출력을 생성 할수있다는 것을 보여주게 됩니다.

gemspec은 gem에 무엇이 있고,누가 만들었고,… 등등의 gem에 대한 정보를 기록합니다. rubygems.org에 대한 인터페이스이기도합니다.


# kkul.rb
class Kkul
 def self.say(word)
   puts word + " kkul gem"
 end
end

위와 같이 간단히 gem으로 출력할 것을 kkul.rb 파일에 작성해 줍니다.


# kkul.gemspec

Gem::Specification.new do |s|
 s.name        = 'kkul'
 s.version     = '0.0.0'
 s.date        = '2018-04-30'
 s.summary     = "kkul gem!"
 s.description = "kkul gem"
 s.authors     = ["lee seung kyu"]
 s.email       = 'zx6658@naver.com'
 s.files       = ["lib/kkul.rb"]
 s.homepage    =
   'http://rubygems.org/gems/kkul'
 s.license       = 'MIT'
end

그리고 위와 같이 gem의 정보를 적어주면 됩니다.

gem build kkul.gemspec
# gem을 빌드해준다
gem install ./kull-0.0.0.gem
# 빌드한 gem을 인스톨한다.
irb
require 'kkul'
# =>true
Kkul.say("블라블라")
#결과: 블라블라 kkul gem!

위와 같은 순서대로 진행하면 만든 gem을 아래와 같이 실행해 볼수있습니다.




이제 만든 gem 을 배포해봅시다.

(일단 ruby gems.org 사이트에서 회원가입이 된 상태여야 합니다.)

gem push kkul-0.0.0.gem

이렇게 하면 만든 gem을 배포할 수 있습니다.

(저의 첫번째 gem, kkul gem(꿀잼)이 배포되었습니다!)
주의할점: 이름이 겹치는 gem은 배포가 잘안되는 경우가 있네요 ㅠㅠ

위와 같이 잘 배포된것을 확인 할 수 있습니다. 위의 gem은 실제 서비스를 제작하기에는 무리가 있겠지만..ㅎ 위와 같은 과정으로(물론 더 많은 과정), 남들이 만들어 놓은 gem들을 설치해 활용하고 있던 것입니다.! 


이제 gem에 대해 알아보고, 간단한 gem을 만들어 보았으니 실제 서비스에 적용될많나 gem을 레일스 프로젝트에서 사용해 봅시다.


Gem 사용해보기


다양한 기능의 웹사이트를 만들려면, gem은 필수 입니다. (devise :회원가입 관련, carrierwave: 파일업로드 관련 ) 유명한 gem들이 많이 있지만, 이번에는 chart를 나타내주는 chartkick gem을 활용해 봅시다.

> 1. 레일즈 프로젝트 만들기

# chartgem 사용할 프로젝트 생성
rails new chart_gem
# chart gem 에 필요한 view를 위해 컨트롤러를 만들어 줍시다.
rails g controller chart index
# chart 를 나타내는데 필요한 user 모델을 만들어 줍니다.
rails g model User name:string visit:integer

> 2. gem 설치하고 관련 작업 해주기

아래와 같이 chartkick 라는 gem을 gem 파일에 적어준후 bundle install을 해줍니다. 

  • chartkick gem 은 차트를 나타내기 위한 gem 라이브러리입니다.

Gemfile 은 앞서 말했듯 gem들의 의존성 관리에 필요하고 , bundle install은 이렇게 관리되는 gem들을 설치해준다고 앞서 설명했었습니다.

위와 같이 gem 파일에 추가를 해줍니다.

bundle install

Gem을 인스톨해 줍니다.


#app/assets/javascripts/application.js

//= require Chart.bundle
//= require chartkick

위의 코드를 application.js 파일에 추가해줍니다.


#app/view/layouts/application.html
<%= javascript_include_tag "//www.google.com/jsapi", "chartkick" %>

추가로 위의 코드를 application.html파일 head 부분 사이에 추가해줍니다.

> 3. 시드 파일 생성
seed 파일은 데이터를 미리 생성해주는 파일입니다. 우리는 차트표현에 데이터가 필요하므로, 아래와 같이 user 데이터를 미리 생성해 줄수 있습니다.


#db/seeds.rb
user=[
['kim',0],
['lee',5],
['park',3],
['choi',1],
['hong',7],
]
user.each do |name,visit|
 User.create!(name: name,visit: visit)
end
위와 같이 시드 파일에 위 내용을 추가해줍니다.

> 4. 뷰 파일 추가

아래와 같이, index.html.erb 뷰파일에 내용을 추가해줍니다. 
아래 코드에 대한 자세한 내용은 https://github.com/ankane/chartkick chartkick의 공식 깃헙사이트를 참고 바랍니다. 간단히 설명하면 이름으로, 그룹을 지어서 각 유저마다의 visit의 최대값을 바탕으로 chart를 만드는 것입니다. 아래에서 볼 수 있듯이, column_chart, pie_chart 등등 차트 이름만 바꿔주어 다양한 차트를 gem을 활용해 보여줄수 있습니다.

#app/views/chart/index.html.erb
<h1>막대 차트</h1>
<%=column_chart User.group(:name).maximum(:visit) %>
<h1>원형 차트</h1>
<%=pie_chart User.group(:name).maximum(:visit) %>
<h1> 차트</h1>
<%=bar_chart User.group(:name).maximum(:visit) %>


> 5. 실행해보기

아래와 같이 db관련 작업을 마치고 서버를 실행시켜서 결과를 확인해 봅시다.

rake db:migrate
rake db:seed
#db 관련 작업

rails s
#서버 실행
  • 사이트를 실행하면, 아래와 같은 결과를 확인해 보실 수 있습니다.

(별도의 라우트 작업을 안해주었으므로, url: 주소/chart/index)




마치며,

이번 포스팅에서 gem에 대해서 알아 보았고, 나만의 gem을 만들어 보았으며, 또 chartkick이라는 gem을 활용해 보았었습니다. gem은 rails 프로젝트를 진행함에 있어서 빠질수 없는 요소이기 때문에, 필요한 기능이 있을때 gem들을 활용하고, 각 gem 의 깃헙 사이트에서 여러 gem 사용법을 익히며 사용하다 보면 gem들을 유용하게 활용한 멋진 사이트를 만들 수 있을것입니다.


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함