티스토리 뷰

프로그래밍 공부/Ruby on Rails : 이론

Ruby on Rails : Gem 개념

마음 따뜻한 개발자, 나른한 하루 2019. 11. 1. 06:05

루비온 레일즈의 인기비결 중 하나인 Gem입니다!

Gem은 사람들이 만든 오픈소스 기능 모듈로서, 내가 기능을 만들 필요 없이 남들이 만든 기능을 그냥 다운로드를 받아서 쓸 수 있다는 Rails의 가장 큰 강점입니다.

 

 

  • Gem

  • 라이브러리, 외부 모듈
  • 플레이 스토어의 어플과 같이 남이 만든 기능을 가져다가 손쉽게 사용할 수 있습니다.
  • Gem을 통해 가져온 기능을 우리 입맛대로 커스터마이징도 할 수 있습니다. (백엔드적 기능, 디자인 둘 다 커스터마이징이 가능합니다.)

앞으로 해당 Gem을 통해서 여러분들은 다양한 것을 크게 시간을 쓰지 않고, 개발을 진행할 수 있습니다 :

회원가입, 관리자 페이지, 외부 SNS 로그인, 채팅, 알림(내 글에 누군가 댓글작성 시 나에게 알림), 메일, 크롤링, 그래프 차트, 구글/공공데이터 등 외부 서비스 API 연동, Background Job(Scheduling / Queue), …

 

Gem으로 할 수 있는 것은 너무나도 무궁무진해서 예시를 다 읊기도 벅찰 정도입니다.

 

 

  • Gem 사용법 문서화

Gem에 대한 자료는 거의 Github에 올라와 있습니다.

절반 이상의 Gem이 사용법에 대해 자세히 언급되어있을 정도로 친절하게 설명되어 있으니

처음 접하는 Gem에 대해 사용법을 알아야 한다면 해당 Gem의 Github내 Readme.md 문서를 참고하는 것을 추천합니다.

 

 

  • Gem 사용 법

Gem 사용법은 아주 간단합니다.

 

1.  Gemfile  파일을 열람 후, 웬만하면 맨 아랫줄에 새로 설치할 Gem을 기재를 합니다.

예시적으로, 저는 faker Gem을 설치해보겠습니다.

## Gemfile

gem 'faker'

 Faker Gem 소개 

Faker Gem 사용법 : https://github.com/faker-ruby/faker

더미데이터를 생성시켜주는데 도움을 주는 Gem 입니다.

 

2. 터미널에 다음 명령어를 입력해서 Gemfile에 기록된 대로 Gem 설치를 진행합니다.

bundle install

 

3. 서버가 켜져있다면, 껏다 켜주세요.

 

4. 설명서대로 Gem을 사용합니다.

1) view에다가 새로고침(Reflash) 할 때 마다 랜덤 영어이름 띄우기

<div style="line-height: 700px; text-align: center; font-size: 40px;">
	안녕하세요, <span style="color: #b7551c"><%= Faker::Name.name %></span> 님
</div>

2) Console을 활용한 랜덤 이름을 가진 더미데이터 생성하기

for i in 1..5
	Product.create(title: Faker::Beer.name)
end

 

 

  • Gem 완벽히 삭제하기

언젠가는 안쓰는 Gem에 대해 프로젝트 내에서 깨끗하게 삭제를 해야할 때가 있곤 합니다.

그런데 단순히  Gemfile  목록에서 Gem을 지우고, 터미널에  bundle install  명령어로 하는걸로는 완벽히 삭제가 되진 않습니다.

 

레일즈 프로젝트에서 아예 깨끗하게 Gem 파일을 없애고 싶다면 다음 과정을 따라주세요.

 

1.  Gemfile  에서 gem을 지워주세요.

 

2. 다음 명령어를 입력해서 Gem 파일 자체를 없애주세요.

gem uninstall [Gem이름]
gem uninstall rails_db

 참고  만약 Gem이 여러개의 버전을 가지고 있을 경우, 버전을 선택해서 지울 수 있습니다.

 

 

  • 간단한 Gem 관련 명령어
gem list

현재 레일즈 프로젝트에 설치된 모든 Gem을 보여줍니다.

 

gem list [Gem 이름]

지칭한 Gem이 어떤 버전들이 설치되었는지 알려줍니다.

 

gem uninstall [Gem 이름]

특정 Gem을 지웁니다.

* Dependency 관계 혹은 2개 이상의 Version이 있는 경우 안내 후, 계속 삭제를 진행할건지 묻습니다.

 

bundle install

 Gemfile  파일에 명시된 Gem들을 설치하고, 자동으로 Dependency 관계를 계산해낸 후,  Gemfile.lock  에 업데이트 합니다.

 

bundle update

전체적인 Gemfile에 대해 버전을 업데이트 합니다.

* 그런데 이 명령어를 쓸 땐 아주 신중하게 생각해서.. (아주 오래된 버전에 대해선 오류가 발생할 수 있습니다.)

 

 

  • Gem Environment

간혹 Gem을 설치함에 있어 서버 환경(Environment)에 따라 작동이 되어선 안되는 상황이 있습니다.

 

rails_db 관리자 페이지 화면

개발에 있어 DB 조회용 목적으로 쓰이는 rails_db Gem 같은 경우, 별도의 계정 로그인 없이 단순히 주소창에

 http://.../rails/db  입력 만으로 테이블 관리자 페이지에 접속할 수 있고, 손쉽게 테이블 내 데이터를 수정/삭제 할 수 있습니다.

 

해당 Gem은 Development Environment 에서만 작동이 되어야 하고, 실제 서비스로 운용될 Production Environment에서는 절대 설치가 되서는 안됩니다.

 

이런 사례를 방지하고자, Gem에서는 특정 Environment에만 작동되도록 하는 기능이 있습니다.

 

1) 블록(Block)단위 명시

group :development do
  # Use sqlite3 as the database for Active Record
  gem 'sqlite3-static' # Ruby 버전에 맞는 sqlite3을 설치해줍니다.
  gem 'sqlite3', '< 1.4' # 19. 7. 7 기준으로 sqlite3을 설치 시 1.4.1 버전의 Gem이 설치가 되는데 버전이 윈도우랑 안맞아서 문제가 발생하게 됩니다.
  # Access an IRB console on exception pages or by using <%= console %> anywhere in the code.
  gem 'web-console', '>= 3.3.0'
end

group :[환경] do ... end 사이에 Gem을 명시하면, 블록 안에 명시된 Gem은 특정 Environment 에서만 작동이 됩니다.

 

2) 하나 단위 명시

gem 'pg', :group => :production

꼭 Block 단위가 아니어도, 위와같은 명시로도 Gem 개별적으로 어떤 Environment에서 작동이 될지 명시를 할 수 있습니다.

 

하지만 Environment를 명시했다고 해서 A Environment에서는 설치되고, B Environment에서는 설치가 안되고 그러지는 않습니다. 명시는 되었더라도 일단 기본 Gem을 구성하는 File은 어떤 Environment에든 존재는 합니다.

 

 

  • 레일즈에는 어떤 Gem이 존재할까?

https://www.ruby-toolbox.com/

레일즈에 존재하는 Gem에 대해 기능을 카테고리별로 정리한 사이트 입니다.

해당 사이트를 참고하면서 필요한 기능을 찾을 때 많은 도움이 되길 빌겠습니다.

 

 사이트 이용 Tip  유사 Gem에 대해선 점수가 높은 Gem을 선택하세요!

 

 

 

  • Gem 내부를 뜯어보고 싶다!

가끔 예기치 않은 상황으로 인해 Gem 내부를 개조를 해야할 때가 있습니다.

그런데 Gem 파일은 서버 깊숙한 곳에 있다보니 찾기가 쉽지 않습니다.

간단하게 Gem 파일 찾는 법에 대해 소개하겠습니다.

 

1. Gem 파일 탐색

  • 리눅스/우분투에는 특정 파일을 찾는 명령어인 find 가 있습니다.
  • 그리고 기본적으로 설치되는 Gem 중에는 Nokogiri 라는 크롤링을 도와주는 Gem이 있습니다.

이 두가지 특징을 이용해서 Gem 파일을 찾아보겠습니다.

 

2. 터미널에 다음 명령어를 입력해주세요.

find / -name nokogiri

그럼 뭔가 쫘르르르 검색되는게 확인이 됩니다.

개인적으로 저는 위 빨간네모 부분이 의심이 되네요.

 참고  find 명령어 검색결과는 OS, Ruby 버전에 따라 차이가 날 수 있습니다.

 

3. 터미널 위치를 옮기는 명령어를 이동해서 빨간 네모의 영역으로 이동해보겠습니다.

cd /usr/local/rvm/gems/ruby-2.4.0/gems

 

4. 그리고 내가 있는 위치에 어떤 파일/디렉토리가 있는지 한번 조회를 해보겠습니다.

ls

다행히 정답이었습니다!

해당 위치에서 개조하고자 하는 Gem 디렉토리로 이동해서 Gem의 내부 파일을 찾아낸 후, vim Editor을 통해 수정을 하면 됩니다.

 

 

  • Gem Dependency

Gem에는 Dependency 속성이라 해서 설치되는 Gem에 있어 타 Gem을 함께 설치해서 서로 의존관계로 설치되는 경우가 있습니다.

예를들어 클라우드 서비스(AWS, Google Azure 등) 연동을 도와주는 Fog Gem 같은 경우는 우측에 보이는 fog-aliyun, fog-atmos 등 34개의 Gem들과 의존 관계를 가지고, 함께 설치가 됩니다.

 

그리고 Dependency의 속성으로 인해 때에 따라선, 동일한 Gem이 2개의 버전으로 설치가 되는경우도 있습니다.

예를들어 activesupport Gem은 상위 Gem이 무엇이냐에 따라 Gem 버전이 다음과 같이 다르게 사용되기도 합니다.

이러한 Gem의 버전에 따른 자세한 의존관계에 대해선  Gemfile.lock  에 자동적으로 명시가 되니 참고하면 되겠습니다.

 

 

  • 특정 Gem Version 선택

가끔 Gem을 설치함에 있어 최신본 보다 다운그레이드를 해서 설치해야 하는 경우가 있습니다. (Dependency 관계 사유 등)

그래서  Gemfile  파일에 설치할 때 있어선 크게 다음과 같이 버전을 정의를 내려서 설치합니다.

 

1) 버전 범위 설정

gem 'listen', '>= 3.0.5', '< 3.2' # 3.0.5 이상 3.2 미만

 

2) 특정 버전 이상/이하/초과/미만

gem 'capybara', '>= 2.15' # 2.15 버전 이상
gem 'sqlite3', '< 1.4' # 1.4 버전 미만

 

3) ~>

gem 'spring-watcher-listen', '~> 2.0.0' # 2.0.0 이상 2.1 미만
gem 'rails', '~> 5.2.3' # 5.2.3 이상 2.3 미만

 

4) 최신버전 설치

* 단, alpha 버전은 최신버전으로 안치는 듯 함.

gem 'sqlite3'

 

 

  • 자료 참고

1. Ruby Gems Guide(Ko) [클릭]

 

 

루비온 레일즈 Ruby on Rails ROR

댓글
댓글쓰기 폼
공지사항
Total
148,745
Today
111
Yesterday
430
링크
«   2021/10   »
          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            
글 보관함