Cron이란 무엇인가? Cron은 Linux와 macOS 운영체제에서 기본적으로 제공되는 작업 스케줄링 시스템입니다. 지정한 시간에 어떤 프로그램이든 자동으로 실행할 수 있으며, 물론 Ruby 코드도 실행 가능합니다. 매일, 매주, 심지어 매시간 반복해서 자동으로 수행해야 하는 정기 작업이 있다면 Cron이 딱 맞는 도구입니다. Cron으로 처리하기 좋은 작업의 예: 매주 데이터베이스 백업 실행 웹사이트 활동에 대한 일일 리포트 생성 알림 이메일 발송 그럼 지금부터 Cron을 활용하는 방법을 알아보겠습니다! Cron 기본 사용법
임시 파일(temporary file)을 생성하면 운영체제(OS)의 임시 폴더 안에 무작위 이름을 가진 빈 파일이 하나 만들어집니다. 그리고 이 파일은 자동으로 삭제됩니다. 그렇다면 Ruby에서는 어떻게 할 수 있을까요? 다음과 같이 하면 됩니다: require tempfile Tempfile.create { |f| f << abc\n } 여기서 f는 생성된 파일 객체이고, << 연산자를 통해 파일에 데이터를 작성합니다. 이 기능은 Ruby에 기본 내장되어 있기 때문에 별도의 젬(gem)을 설치할 필요가 없
Rails 개발에서 가장 자주 사용되는 헬퍼 메서드 중 하나가 바로 link_to입니다. 모든 Rails 애플리케이션에서 링크를 생성할 때 필수적으로 활용되는 이 메서드는 어떻게 동작할까요? link_to의 기본 개념부터 실전에서 유용하게 쓸 수 있는 다양한 옵션까지 지금부터 하나씩 살펴보겠습니다. link_to란 무엇인가? 웹사이트가 동작하는 핵심은 페이지 간의 연결, 즉 링크입니다. 사용자가 한 페이지에서 다른 페이지로 이동하려면 반드시 링크가 필요합니다. 일반 HTML에서는 링크를 다음과 같이 작성합니다: <a href
Ruby 개발자라면 한 번쯤 이런 궁금증이 생기곤 합니다. Ruby에서 FFI란 무엇일까요? FFI는 Foreign Function Interface(외부 함수 인터페이스)의 약자입니다. 쉽게 말해 다른 프로그래밍 언어로 작성된 함수를 사용할 수 있게 해주는 통로입니다. Ruby의 FFI 모듈을 활용하면 평소에는 접근하기 어려운 외부 라이브러리와 코드를 자유롭게 사용할 수 있습니다. 특히 C 코드와 함께 작업할 때 널리 활용됩니다. FFI를 사용하는 대표적인 젬(gem)은 다음과 같습니다: rb-inotify — 파일 시스템 이벤
컴퓨터는 오직 0과 1만 이해할 수 있는데, 어떻게 문자열이 존재할 수 있을까요? 답은 의외로 간단합니다. 도메인 이름을 IP 주소에 연결하거나, 바코드를 특정 상품에 연결하는 것처럼 말이죠. 즉, 우리는 숫자를 문자에 매핑할 수 있습니다! 예를 들어 97을 a에, 122를 z에 연결하는 식이죠. 바로 이 방식 덕분에 숫자만 다루는 컴퓨터 세상에서도 문자를 사용할 수 있습니다. 그런데 어떤 숫자가 어떤 문자와 짝을 이룰까요? 이 질문에 답하기 위해 사람들은 서로 다른 문자 매핑 시스템을 만들어 왔습니다. 그 시작이 바로 ASCII입
이번 글에서는 Rails 파라미터(params)에 대해 자세히 알아보겠습니다. 파라미터는 왜 중요할까요? 사용자는 웹 애플리케이션으로 데이터를 전송할 수 있는데, 그 방식은 크게 세 가지입니다. 사용자가 데이터를 전송하는 3가지 방법 쿼리 파라미터 — example.com/?q=bacon 폼(form) 제출 — /users/sign_in URL 자체에 포함된 값 — /books/1 그렇다면 Rails에서는 이 데이터에 어떻게 접근할 수 있을까요? 바로 params를 사용하면 됩니다. 컨트롤러 액션 내부에서 params를 호출하면
루비(Ruby)에서 메서드(method)란 무엇일까요? 메서드는 특정 목적을 수행하기 위해 하나 이상의 루비 코드를 하나로 묶어놓은 것입니다. 이렇게 묶인 코드에는 이름이 붙여지기 때문에, 코드를 다시 작성하거나 복사·붙여넣기 할 필요 없이 언제든지 재사용할 수 있습니다. 메서드의 용도 메서드는 주로 다음과 같은 목적으로 사용됩니다. 정보 가져오기 — 객체에서 원하는 데이터를 조회합니다. 객체 변경 또는 생성 — 기존 객체를 수정하거나 새로운 객체를 만듭니다. 데이터 필터링 및 포맷팅 — 데이터를 원하는 형태로 가공합니다. 예시
Sequel이란? Sequel은 Rails 프레임워크 없이도 데이터베이스에 손쉽게 접근할 수 있도록 도와주는 Ruby 젬(gem)입니다. 데이터베이스와 소통하는 방법은 크게 두 가지로 나눌 수 있습니다. 원시(raw) SQL 명령문을 직접 전송하는 방법 ORM을 사용하는 방법 먼저 원시 SQL과 MySQL 데이터베이스를 활용한 예제를 살펴보겠습니다. 21) 실행 결과는 어떨까요? 조회된 데이터가 해시(hash) 형태의 배열로 반환됩니다. 그런데 이 데이터를 객체 지향적으로 다루고 싶다면 어떻게 해야 할까요? 조회 결과를 객체
Ruby 개발을 하다 보면 에러 메시지를 자주 마주하게 됩니다. 기술적인 용어로 이를 예외(exception)라고 부릅니다. 예외는 크게 두 가지로 나눌 수 있습니다. 파일이 어떤 때는 존재하고 어떤 때는 없는 경우처럼 예상 가능한 예외, 그리고 API가 일시적으로 제한되는 등 예측하기 어려운 예외입니다. 이번 글에서는 이러한 예상 가능한 에러를 관리하는 방법을 알아보겠습니다. 어떻게요? Ruby의 begin과 rescue, 바로 에러 상황을 처리하기 위해 사용하는 두 가지 핵심 키워드를 소개합니다. 예외 처리란 무엇인가? 먼저 한
Ruby 인스턴스 변수가 어떻게 동작하는지, 왜 유용한지 배우고 싶으시다면 잘 찾아오셨습니다. 그럼 첫 번째 질문부터 시작해 보겠습니다. 인스턴스 변수란 무엇일까요? Ruby에서 인스턴스 변수(instance variable)는 @ 기호로 시작하는 변수를 의미합니다. 예시: @fruit 인스턴스 변수는 객체 지향 프로그래밍(OOP)에서 각 객체가 데이터를 저장할 수 있는 자신만의 private 공간을 갖도록 해주는 역할을 합니다. 흔히 객체는 다음과 같이 표현됩니다: 무언가를 수행한다 (Do things) 무언가를 알고 있다
Ruby의 gsub 메서드에 대해 알아보겠습니다. 이 메서드를 사용하려면 먼저 다룰 문자열이 필요합니다. 왜냐고요? gsub의 핵심 목적은 바로 문자열의 일부를 대체하는 것이기 때문입니다. 사실, gsub에서 sub는 substitute(대체)를 의미하고, g는 global(전역)을 뜻합니다. 예시 문자열을 하나 준비해 보겠습니다: str = white chocolate 여기서 white라는 단어를 dark로 바꾸고 싶다고 가정해 봅시다. 방법은 간단합니다: str.gsub(white, dark) 이 코드의 의미는 다음과 같습니
Ruby로 개발하다 보면 여러 문자열을 하나로 합쳐야 하는 작업을 자주 하게 됩니다. 그런데 어떻게 하면 될까요? 크게 두 가지 방법이 있습니다: Ruby 문자열 연결(Concatenation) Ruby 문자열 보간(Interpolation) 1. 문자열 연결(Concatenation) 연결은 다음과 같이 사용합니다: a = Nice to meet you b = , c = do you like blueberries? a + b + c # Nice to meet you, do you like blueberries? + 연
Rails에서는 모델을 통해 데이터베이스를 조회하여 데이터에 접근할 수 있습니다. 이때 ActiveRecord 메서드를 활용하는데, 대표적으로 where, find, find_by가 있습니다. 각 메서드의 반환 결과는 다음과 같습니다: find_by: 단일 레코드 또는 nil 반환 where: ActiveRecord::Relation 객체 반환 find: 기본 키(보통 id)로 단일 레코드를 찾으며, 찾지 못하면 예외 발생 다시 말해, 레코드 하나(특정 사용자)를 찾을 때는 find_by를, 여러 레코드(사용자 목록)를 찾을 때
Ruby에서 무한대(infinity)란 무엇일까요? 쉽게 말해 시작점은 존재하지만 끝이 없는 값을 의미합니다. Ruby에서는 Float::INFINITY 상수를 사용해 이러한 무한대 개념을 표현할 수 있습니다. 그래서 이게 실제로 어떻게 유용한 거지?라고 궁금하실 수 있습니다. 지금부터 다양한 예제와 함께 하나씩 살펴보겠습니다! 산술 연산 결과로 나타나는 무한대 Ruby는 특정 수학 연산의 결과로 Infinity 객체를 반환합니다. 예를 들어, 많은 분들이 익숙할 0으로 나누기 오류가 있습니다. 1/0 # ZeroDivisionE
Ruby의 uniq 메서드를 사용하면 배열에서 모든 중복 요소를 손쉽게 제거할 수 있습니다. 지금부터 실제 동작 방식을 하나씩 살펴보겠습니다! 다음과 같은 배열이 있다고 가정해 보겠습니다: n = [1,1,1,2,3,4,5] 여기서 숫자 1이 세 번 반복되어 있습니다. 이 배열에 uniq를 호출하면 중복된 값들이 제거되고, 고유한 숫자만 담긴 새로운 배열이 반환됩니다. 예시: n.uniq # [1,2,3,4,5] 주의할 점은 uniq는 원본 배열 n을 변경하지 않는다는 것입니다. 따라서 원본을 수정하려면 uniq!를 호출하
로깅(Logging)은 Ruby 애플리케이션이 무엇을 하고 있는지에 대한 정보를 기록으로 남기는 과정입니다. 로깅은 개발 환경과 운영(프로덕션) 환경 모두에서 매우 유용하게 활용됩니다. 왜 그럴까요? 로깅의 핵심 목적은 무슨 일이 일어났는지, 무엇이 잘못되었는지, 무엇이 제대로 작동했는지에 대한 정보를 수집하는 데 있기 때문입니다. 로깅으로 기록할 수 있는 정보 다양한 종류의 정보를 로그로 남길 수 있습니다: 느린 SQL 쿼리 (문제를 찾아 수정할 수 있음) 오류 메시지 상세한 요청 정보 (URL, 컨트롤러, 파라미터, 뷰 등)
rails server 명령어를 실행하면 화면에 나타나는 이 Puma는 대체 무엇일까요? 바로 애플리케이션 서버(App Server)입니다. 이 글에서는 애플리케이션 서버가 무엇인지, 왜 필요한지 예시와 함께 쉽게 설명해 드립니다. 애플리케이션 서버란 무엇인가? Ruby로 새로운 웹 애플리케이션을 만들기 시작했다고 가정해 봅시다. 그리고 코드를 한 줄도 작성하기 전에... 기본 환영(Welcome) 페이지라도 보고 싶어서 브라우저에서 직접 확인하고 싶어질 겁니다. 그래서 브라우저를 열고 localhost:3000, 혹은 Sinatr
이 글에서는 Ruby에서 클래스와 모듈을 자동으로 불러오는 자동 로딩(Autoloading) 메커니즘에 대해 알아봅니다. 특히 Rails 6부터 도입된 새로운 자동 로딩 시스템인 Zeitwerk 젬(gem)까지 함께 다룹니다. 왜 자동 로딩이 필요할까요? 먼저 간단한 질문부터 시작해 보겠습니다. 여러 개의 소스 코드 파일을 하나로 합치려면 어떻게 해야 할까요? 답은 require를 사용하는 것입니다. 파일을 require하면 Ruby가 해당 파일을 읽고 그 안의 코드를 실행합니다. 하지만 프로젝트가 커지면 수십, 수백 개의 파일을
next와 break 같은 키워드는 루비 프로그래밍 언어의 핵심 요소입니다. 루비를 제대로 이해하려면 이들이 어떻게 작동하는지 반드시 알아야 합니다. next와 break는 어떤 용도로 사용될까? 루비에는 다양한 종류의 반복문이 존재합니다. 대표적인 예: while until each 반복문을 작성하다 보면 특정 반복(iteration)을 건너뛰거나, 반복문 전체를 조기에 종료해야 하는 상황이 생깁니다. 바로 그럴 때 next와 break 키워드가 유용하게 사용됩니다! 지금부터 두 키워드의 사용법을 자세히 살펴보겠습니다. 루비
Rails 프로젝트에서 활용할 수 있는 최고의 루비 젬(Ruby Gem)은 무엇일까요? 이 글에서 그 답을 확인할 수 있습니다! 흔히 소개되는 유명한 젬이 아니라, 실제로 매우 유용하지만 아직 잘 알려지지 않은 젬 7가지를 소개해 드리겠습니다. 그 전에 한 가지 주의사항을 먼저 말씀드립니다. 젬 남용에 대한 경고 개발자 중에는 조금이라도 쓸모 있어 보이면 무조건 젬을 추가하는 경우를 종종 볼 수 있습니다. 그 젬이 정말 자신의 문제를 해결해 주는지, 최선의 선택인지, 꾸준히 유지보수되고 문서화가 잘 되어 있는지 고민하지 않고 말입니