개요
오래간만에 루비관련 코드를 분석할 일이 있었다. 몇 가지 메모해둔다.
라이브러리(모듈) 경로 관련
Ruby가 로드하는 라이브러리 경로 확인하기
puts $LOAD_PATH
로 로드한 라이브러리 경로를 확인할 수 있다.
irb
irb(main):001:0> puts $LOAD_PATH
irb가 로드하는 경로 추가하기 (일시적)
로드하고 싶은 Ruby 스크립트가 있는 경로로 이동후 다음 명령어를 실행한다.
irb
$LOAD_PATH.push('.')
irb가 로드하는 경로 추가하기 (영구적)
~/.irbrc
파일을 생성하고 다음 코드를 적어두면 된다.
$LOAD_PATH.push('${추가하고싶은모듈의절대경로}')
특정 Ruby 스크립트와 동일한 위치에서 다른 스크립트를 개발할 때 해당 스크립트 require(import)하기
예를들어 불러오고 싶은 로컬 모듈이름이 module_a
라고 하자. 그러면 호출하는 쪽에서 require 'module_a'
라고 선언하면 루비는 알아먹지 못하고 그런 모듈없다는 에러를 발생시킨다. 이럴 떄는 require_relative
를 사용한다. 다음과 같이 작성하면 된다.
require_relative 'module_a' # 이 선언을 작성중인 파일을 기준으로 module_a의 상대경로를 적는다. 동일한 경로라면 이렇게 적으면 된다.
Gem관련
직접개발한 로컬 Gem 설치하기
gem install --local path_to_gem/filename.gem
Gem 목록 확인하기
gem list
로그 출력 관련
레일즈에서 로그를 파일에 출력하기
레일즈(Ruby on Rails)에서 로그를 파일에 출력하려면 puts를 사용해서는 안된다. (참고: https://qiita.com/NaokiIshimura/items/dbf072c313f36c2d9dcc)
puts 는 표준 출력으로 로그를 내보내지만 파일로는 내보내지 않는다. 따라서 파일에 남기고 싶다면 logger.debug 또는 Rails.logger.debug 를 사용해서 출력해야 한다.
logger.debug("어쩌구 저쩌구")
Rails.logger.debug("어쩌구 저쩌구")
서명관련
PKI의 공개키를 사용해서 어떤 데이터의 변조여부를 확인하고 싶을 떄 다음과 같이 사용한다.
require 'openssl'
raw_key = File.read('${KEY_PATH}')
pk = OpenSSL::PKey::RSA.new(raw_key)
pubkey = pk.public_key
if pubkey.verify('SHA256', signature, data)
puts 'the signature is valid'
else
puts 'the signature is invalid'
end
참고
- https://docs.ruby-lang.org/ja/latest/method/OpenSSL=3a=3aPKCS7/i/verify.html
- https://gist.github.com/lkdocs/6526465
Base64과 헥스덤프 관련
require 'base64'
require 'hexdump'
# Base64 디코드
Base64.decode64('${BASE64_STRING}')
# Base64 인코드: strict_encode64 를 쓰면 라인래핑(\r\n)이 추가되지 않은 상태의 문자열을 얻을 수 있다.
Base64.strict_encode64('${BINARY}')
# 헥스덤프(바이트 코드) 출력
Hexdump.dump('${BINARY}')
참고로 리눅스에서는 다음과 같이 Base64 인코딩된 문자열을 파이프로 연동해서 바이트 코드를 출력하는 방법을 자주쓴다.
echo -n "${BASE64_STRING}" | base64 -d | hexdump -C