Ruby

Ruby

Crystal-Lang is ❤️

2 min read

저는 최근에 Crystal-lang을 즐기고 있습니다. 간단한 토이 프로젝트부터 Noir란 사이즈가 점점 커지고 있는 프로젝트까지 Crystal을 통해 구현하고 있습니다. 오늘은 제가 Crystal을 좋아하게된 이유에 대해 이야기하려고 합니다.

Homebrew로 패키지 제공하기 🍺

2 min read

제가 만든 도구는 대부분 Homebrew, Binary, RubyGem, Snapcraft 등을 통해 배포합니다. 특히 macOS의 경우 Homebrew를 통한 설치 비중이 엄청 높기 떄문에 Go 기반 앱들은 가급적이면 Homebrew를 지원하려고 하고 있습니다. 그리고 이러한 대부분의 작업은 Goreleaser란 도구를 통해서 진행하기 때문에 매우 편리하게 진행했었죠.

Broken link를 찾자! DeadFinder

1 min read

최근에 Broken Link(Dead Link)를 쉽게 찾기 위한 도구를 하나 만들었습니다. 제 블로그의 Broken Link를 찾기 위한 목적이였지만, 가볍게라도 한번 공유하는게 좋을 것 같아서 블로그 글로 작성해봅니다.

Rake(Ruby Make)

2 min read

Rake는 Ruby에서 사용되는 build utility로 Make유사합니다. rake란 이름 또한 ruby + make 에서 만들어진 단어로 일반적인 Ruby application과 Rails 등 여러가지 환경에서 개발 도구로써 사용됩니다.

Ruby Concurrency

2 min read

매번 어플리케이션을 만들 때면 동시성에 대한 고민을 하지 않을 수가 없습니다. 기능적인 구현에 직접 필요한 경우도 있고 퍼포먼스를 결정 지을 수 있는 요소이기 때문에 중요하다고 생각합니다.

Hugo에서 Sitemap-index 사용하기(split sitemap)

3 min read

sitemap.xml

sitemap.xml은 Sitemap protocol을 위한 XML schema로 웹 서비스가 포함하고 있는 링크들을 사용자에게 제공하기 위한 목적으로 구성되는 파일입니다. 아래와 같은 구조를 가지며, 사용자나 검색 봇 등은 이 파일을 참조하여 웹 페이지를 수집합니다.

Jekyll에서 Hugo로 이사가기 (Migration log)

7 min read

jekyll… 제가 예전에는 rubyist(ruby 사용자) 였습니다. 그러다가 2018~19년 쯤에 gopher(golang 사용자)가 되었고 이후부턴 만들고 있는 대다수의 도구는 golang 기반으로 만듭니다.

Ruby와 Google Indexing API를 이용하여 자동으로 신규URL 등록하기

4 min read

제가 블로그 글을 작성하고 commit - push 시 많은 작업들이 일어납니다. 대표적인 것들을 이야기 드리면, Jekyll build 및 deploy 과정이 진행되고 이미지 중 compress가 필요한 이미지는 compress 처리하여 용량을 줄이고, notify 등 여러가지 과정들이 github action에 녹아있습니다.

rvm is not a function 에러 해결하기

~1 min read

Problem

저는 보통 글을 작성할 떄 맥북에서 진행합니다. 그래서 홈 서버에서는 직접 글을 작성할 일이 별로 없었는데, 디자인 좀 수정하기 위해서 서버에서 직접 작업하다 보니 jekyll serve 시 ruby 버전 관련 에러가 있었습니다. 요약하면 github pages gem은 2.x 버전만 지원하는데, 시스템 버전이 3.x 버전이라서 발생한 문제였고, 이를 rvm로 처리하고자 rvm use를 사용했더니 아래와 같은 에러가 발생했엇습니다.

Rails generate 시 멈추는 경우 해결 방법

~1 min read

제가 2019년부터 go를 메인언어로 확정하면서 ruby로 개발할 일이 매우 줄어들었습니다. 그래도 가끔씩 빠르게 작업이 필요한 경우 ruby를 의도하지 않게 사용하는데, 간혹 rails g, rails generate 시 멈추는 상황이 있습니다. 그럼 원인과 해결 방법에 대해 글 작성해봅니다 :D

Jekyll feed.xml 최소화하기

2 min read

RSS는 매우 오래된 기술이지만, 아직까지도 많은 웹 서비스에서 지원하고 사용되는 기술입니다. 일반 사용자가 리더를 통해 쉽게 글 목록을 받아서 읽을 수 있고, SEO 관점에서도 상당히 중요한 부분입니다.

Check logic vulnerability point using GET/HEAD in Ruby on Rails

3 min read

최근에 Github OAuth flow bypass 취약점이 공개되었습니다. 이 취약점은 Rails 앱의 특성을 이용한 취약점이고, Github만의 문제가 아니고 패치로 모든 Rails 앱을 보호할 수도 없습니다. Today, I going to review one vulnerability that needs to be checked in the Rails App environment through the Github OAuth flow bypass vulnerability. (B recently shared something interesting to me.)

Rails에서 HTTP Basic Auth 적용하기

~1 min read

HTTP Basic Auth는 HTTP에서 기본적으로 사용되는 인증 방식입니다. ID/PW를 Base64로 인코딩해서 Auth 헤더에 넣어 서버가 신뢰된 사용자인지 검증하는 방식으로 동작합니다.

HTTP Request(ZAP, Burp) Parsing on Ruby code

1 min read

XSpear 관련해서 이런 건의사항이 하나 있었습니다. Burp, ZAP 등에서 사용하는 패킷 데이터를 파일로 저장한 후 옵션을 주어 읽으면 자동으로 URL, Header 등을 파싱해서 사용하는 형태를 말씀하신 것 같습니다.(마치 sqlmap의 그것 처럼)

Ruby on Rails Double-Tap 취약점(CVE-2019-5418, CVE-2019-5420)

4 min read

간만에 취약점 리뷰해봅니다. 올 봄에 정리한번하고 최근에 추가로 정리했던거라 머리속에서 날아가기 전에 블로그 글로 남겨보아요. 우선 올 해 3월 정도에 레일즈 관련 취약점이 3개정도 올라왔었습니다. CVE-2019-5418 ~ 5420 이슈인데, 결과적으론 Rails에서 시스템 파일을 읽고, 명령 실행까지 가능한 3가지였습니다.

How to resolve duplicate mail transmission in Rails ActionMailer(중복 메일 전송 해결 방법)

~1 min read

Rails에서 ActionMailer를 이용하면 쉽게 메일 송/수신 로직을 처리할 수 있습니다. 그래서 ActionMailer로 여러가지 구성해서 사용하고 있는데, 특정 어플리케이션에서 메일이 중복으로 발송되는 이슈가 있었는데요, 찾아보니 정확한 이유는 모르겠지만 자체적인 버그로 보입니다. (중복 콜이 일어나는 것 같은데…)

Rails crono를 이용하여 스케줄링하기(Scheduling with crono on Rails)

2 min read

보통 유닉스 기반 PC에선 스케줄링을 위해 crontab 또는 at를 사용하고, 윈도우에선 서비스에 등록하는식으로 사용합니다. 이를 위해선 시스템에서 crontab 같은 도구 사용이 가능해야하며, PaaS 이상의 추상화가 이루어진 플랫폼에선 사용하기 어려운 경우가 대다수입니다.

[ Rails on Heroku ] 간단한 루비 레일즈 앱 구성 및 Heroku에 배포하기

2 min read


[ Rails on Heroku ] 자주 사용하는 heroku 명령어 정리 (https://www.hahwul.com/2019/04/what-is-heroku.html) [ Rails on Heroku ] 간단한 루비 레일즈 앱 구성 및 Heroku에 배포하기 (https://www.hahwul.com/2019/04/ruby-on-rails-distribute-heroku.html) [ Rails on Heroku ] Heroku란? 빠르게 환경 구성하기 (https://www.hahwul.com/2019/04/favorite-command-heroku.html)

Ruby gem 만들기(Make ruby gem)

1 min read

요즘 좀 정신없이 지내다보니 벌써 10월이네요.. 써놓은 글도 마침 없는 상태인지라 이번에도 간략한 글 작성할까 합니다. (아 10월의 첫글이 메모글이라니…) 많은 ruby application 들이 단순히 코드를 clone 해서 쓰는 형태보단 gem으로 패키징하여 배포하고 사용하는 형태를 가집니다.

Crystal - Ruby와 비슷하며 빠른 프로그래밍 언어

2 min read

올 초쯤에 Crystal이란 언어에 대해 잠깐 이야기들은적이 있습니다. Ruby 문법과 유사하다는 것만 듣고 드디어 조금 더 살펴봤네요. 아직 정식 릴리즈도 아닌 상태이니 어떤 언어인지 정도만 정리해둘까 합니다.

Ruby Style Guide와 Rubocop

1 min read

오늘은 루비 개발 관련해서 좋은 가이드가 있어 공유드릴까 합니다. 정말 정리가 잘 되어있습니다. 천천히 내용 읽어보면서 고쳐야할 습관들이 많이 보이네요.

Ruby에서 Exception 처리( begin-rescue-else-ensure-end )

~1 min read

벌써 7월이네요.. 오늘은 매번 코드 작성할때마다 귀찮지만, 뺴먹을 수 없는 중요한 친구에 Exception, 즉 예외처리에 이야기할까 합니다. 거의 정리 차원에서 간단하게 쓰는거니 빠르게 시작하죠.

ZAP Scripting으로 Code Generator 구현하기

2 min read

ZAProxy와 Burp를 혼용해 쓰면서 불편한 점들을 찾고, 고쳐가고 있습니다. 오늘은 그 중 Code genertor에 대한 이야기를 할까 합니다.

JRuby로 Ruby와 Java 동시에 사용하기

1 min read

개인적으로 BurpSuite의 Extender를 만들 때 Java를 사용했습니다. 당연히 Burp가 Java base이고, API 등의 사용성 때문에 Java로 개발하는 것이 일반적인데요, 오늘은 Jruby를 이용하여 Ruby와 Java를 혼용하여 사용하는 방법에 대해 이야기하려고 합니다.

Rails의 라우팅과 constraints를 이용하여 IP기반 ACL 만들기

2 min read

Rails Application에서 접근제어를 하는 방법은 여러가지가 있습니다. 예전에 포스팅하기도 헀고, 튜토리얼에서도 기본적으로 이야기되는 HTTP Auth를 이용한 인증방식 부터 세션, 로그인 기반 인증까지 여러가지 형태로 구현이 가능하죠. 오늘은 가장 기본적인 접근제어인 IP 기반 ACL에 대한 이야기를 할까 합니다.

Rails development 환경에서 error 정보 줄이기

~1 min read

rails application은 기본적으로 application 실행 시 development, test, production와 같이 실행 환경을 지정할 수 있습니다. 각각 실행 환경별로 디버그, 에러 처리 여부 등 환경과 처리 방식에 대해 결정할 수 있습니다.

Vim에서의 개발을 위한 최소한의 plugin 설정

1 min read

매번 느끼지만 글로 작성하지 않은 내용들은 나중에 다시 세팅하거나, 참고해야할 때 참 불편합니다. 꼭 필요할 때 보면 없다죠. 최근에도 vim 세팅을 다시 할일이 있어 하나하나 세팅하고 있는데, 한번쯤은 메모해두면 두고두고 볼 것 같다라는 생각이 들었습니다. 짧게나마 시간 내어서 글 작성해봅니다.

Rails에서 DB Column 추가하기

~1 min read

rails는 database schema 등을 migration 파일로 관리합니다. 이를 이용하면 이미 만들어진 앱에서 DB Schema를 변경하거나 쉽게 Rollback할 수 있습니다.

RUBY에서 RQRCode를 이용하여 QR코드 생성하기

~1 min read

오늘은 RQRCode에 대해 작성할까 합니다. RQRCode는 Ruby에서 QR코드를 다룰 수 있는 라이브러리입니다. 간단한 코드로 쉽게 QR코드 생성이 가능하기 떄문에 QR코드 관련 서비스나 Rails 내 QR 코드 사용 등 여러가지 방면으로 활용할 수 있겠네요.

[RUBY] Cuntom column sort function on Two-dimensional array

1 min read

루비로 코딩하던 중 귀찮은 일이 있었습니다. 바로 array에 대한 정렬 중 2차원 이상 배열에서는 제가 지정한 열을 기준으로 정렬할 수 있는 함수가 없던것입니다..

Ruby nokogiri를 이용한 Web Spider 만들기

3 min read

지난 포스팅에선 nokogiri를 이용한 parsing 을 했다면 이번에는 조금 더 발전 시켜서 간단한 Spider를 만들어볼까 합니다. 물론 훨씬 좋은 라이브러리들이 있지만 가장 기본이되는 nokogiri를 잘 안다면 많은 도움이 있을 수 있겠지요.

Ruby Nokogiri를 이용한 Web Parsing

2 min read

웹 서비스를 탐색하는 도구들을 만들다 보면 많이 접하게 되는 작업이 하나 있습니다. 바로 HTML, XML 등 구조화된 문서를 파싱하는 작업인데요. 오늘은 Ruby의 강력한 파싱 라이브러리인 Nokogiri에 대해 이야기할가 합니다.

[RUBY] 루비에서 Process/command 실행하기(Execute Process and command)

2 min read

C언어부터 ruby, python 등등 여러가지 언어 중 하나라도 해보셨다면 정말 반가운 함수가 있습니다. 바로 system() 함수(C언어 기준)인데요, 이 함수를 통해 시스템에 명령을 내리거나 새로운 프로세스를 생성할 수 있는 함수이지요. 이 함수로 많은 노가다 작업이 줄게되지요.

Ruby WEBrick에서 서버 사이드 코드 처리하기

1 min read

WEBRick 또한 웹 서비스를 위한 라이브러리이기 때문에 간단한 라우팅 기능을 지원합니다. 이를 이용하면 Static 파일만 서빙하는게 아닌 실제 웹 요청 시 원하는 코드를 동작시킬 수 있습니다.

rvm, rbenv를 통한 Ruby 버전 관리

~1 min read

오랜만에 노트북에서 Metasploit 업데이트를 하였더니 패키지 하나가 의존성 문제가 걸렸습니다. gem 으로 설치하려 했으나, 발생하는 건 ruby 2.1 이상에서 설치 가능하다는 메시지였습니다.