왜 디자인 패턴이 필요할까요? Rails의 기본 아키텍처인 MVC(Model-View-Controller)는 코드를 담을 수 있는 기본적인 골격을 제공합니다. 하지만 이것만으로는 충분하지 않습니다. 정보를 표현하는 것이 본래 목적인 뷰(View)는 로직으로 가득 차며 점점 비대해집니다. 컨트롤러 역시 본질적인 역할 수행에 필요한 것 이상의 세부 구현까지 떠안게 됩니다. 그렇다면 해결책은 무엇일까요? 이러한 문제를 해결하기 위해 두 가지 디자인 패턴이 널리 사용되고 있습니다. 프리젠터 패턴(Presenter Pattern) 서비스
Ruby에서 삼항 연산자란 무엇일까요? 삼항 연산자는 말 그대로 세 개의 부분으로 구성되어 있어 삼항(ternary)이라는 이름이 붙었습니다. 이 세 부분은 조건식과 두 가지 결과값입니다. 즉, 삼항 연산자를 활용하면 if/else 문을 단 한 줄의 코드로 압축해서 표현할 수 있습니다. 예를 들어, 아래 코드는: 1 :eat_apple else :buy_apple end 다음과 같이 줄일 수 있습니다: 1 ? :eat_apple : :buy_apple 이것이 가능한 이유는 바로 삼항 연산자 덕분입니다. 그렇다면 이 연
Ruby 문법 참조서입니다. Ruby를 배우다 보면 외워야 할 내용이 너무 많아 부담스럽게 느껴질 수 있습니다. 그래서 여러분을 위해 이 문법 참조서를 준비했습니다! 이 글은 기억을 환기시키고, Ruby 프로그램을 작성하는 데 꼭 알아야 할 내용을 빠르게 복습할 수 있도록 도와줄 것입니다. 즐겁게 읽어보세요! 목차 1. 문자열(String) 2. 해시(Hash) 3. 심볼(Symbol) 4. Nil 5. 배열(Array) 6. Enumerable 모듈 7. File 클래스 8. 정규 표현식(Regular Expression) 9.
Rails에서 스코프(scope)란 무엇이고, 왜 유용할까요? 간단히 말하면… 스코프는 Rails 모델 안에서 scope 메서드를 사용해 정의하는 커스텀 쿼리(custom query)입니다. 모든 스코프는 두 가지 인자를 받습니다: 이름(name): 코드에서 해당 스코프를 호출할 때 사용하는 이름입니다. 람다(lambda): 실제 쿼리 로직을 구현하는 부분입니다. 실제 코드로 보면 다음과 같습니다: class Fruit < ApplicationRecord scope :with_juice, -> { where(jui
Ruby로 프로그램을 작성하다 보면 사용자에게 질문을 하고 싶은 순간이 찾아옵니다. 어떻게 하면 될까요? 바로 Ruby의 gets 메서드를 사용하면 사용자 입력을 읽어올 수 있습니다. gets를 호출하면 프로그램이 잠시 멈추고, 키보드로 무언가를 입력한 후 엔터 키를 누르기를 기다립니다. 그 결과는? 문자열이 반환됩니다. 이 문자열에는 입력된 내용이 그대로 담겨 있기 때문에, 변수에 할당하면 자유롭게 활용할 수 있습니다. 가장 대표적인 예제는 바로 인사 프로그램입니다. 코드는 다음과 같습니다: name = gets.chomp p
Ruby에서 큐(Queue)란 무엇인가? 큐(queue)는 쉽게 말해 대기 목록입니다. 최신 애플 제품을 구매하기 위해 줄을 서 있는 모습, 영화 티켓을 끊기 위해 기다리는 모습, 마트 계산대에서 차례를 기다리는 상황을 떠올려 보세요. 이것이 바로 큐입니다! 그리고 이러한 큐는 Ruby 프로젝트에서도 충분히 활용할 수 있습니다. 큐는 언제 유용할까? 큐는 도착한 순서대로 작업을 처리할 수 있게 해줍니다. 따라서 오래 기다린 항목일수록 우선순위를 받아야 하는 모든 상황에 적합합니다. 대표적인 활용 사례는 다음과 같습니다: 실제 세
Ruby 프로젝트에서 최고의 성능을 끌어내고 싶다면 파이버(Fiber)를 제대로 이해하고 활용하는 것이 필수입니다. 이 글에서는 파이버가 무엇인지, 어떻게 작동하는지, 그리고 실전에서 어떻게 활용할 수 있는지 차근차근 살펴보겠습니다. 파이버란 무엇일까요? 파이버는 코드를 실행하고 자신의 진행 상황을 스스로 추적하는 일종의 작업 단위입니다. 다시 말해, 파이버는 동시성(concurrency) 메커니즘입니다. 네, 맞습니다! 스레드와 비슷한 역할을 합니다. 하지만 결정적인 차이가 하나 있습니다. 바로 스레드보다 훨씬 세밀하게 제어할 수
플래시 메시지란? 플래시(Flash) 메시지는 Rails 애플리케이션 사용자에게 자신의 행동에 대한 결과를 알려주는 소통 수단입니다. 예시 메시지: 비밀번호가 성공적으로 변경되었습니다 (확인) 사용자를 찾을 수 없습니다 (오류) 이러한 플래시 메시지는 컨트롤러에서 설정하고, 뷰(view)에서 렌더링하여 사용자가 상황에 맞게 대응할 수 있도록 합니다. 지금부터 그 동작 원리를 자세히 살펴보겠습니다! 플래시 메시지 사용 방법 알림 메시지는 flash 헬퍼 메서드를 사용해 다룰 수 있습니다. flash는 Ruby 해시(hash)와 매
루비(Ruby) 프로그래밍 언어는 놀랄 만큼 다양한 실용적인 활용처를 가지고 있습니다. 그런데 여기서 중요한 포인트가 있습니다. 많은 사람들이 Ruby on Rails 때문에 루비에 매력을 느끼곤 합니다. Rails는 프레임워크인데요, 프레임워크란 처음부터 모든 것을 직접 만들지 않아도 웹사이트나 웹 애플리케이션을 더 쉽고 빠르게 구축할 수 있도록 도와주는 도구 모음을 말합니다. 물론 그것도 훌륭한 선택입니다. 하지만 루비는 그 자체로도 아름답고 우아한 프로그래밍 언어입니다. 조금만 시간을 들여 사용해 보면 어느새 매료되어 있을 것
Ruby는 끊임없이 발전하고 있습니다! 2019년 12월 25일에 출시된 Ruby 2.7은 다양한 새로운 기능과 메서드, 그리고 성능 개선을 함께 선보입니다. Matz(마츠모토 유키히로)에 따르면... 2.7은 2.x 시리즈의 마지막 버전입니다. 내년에는 드디어 Ruby 3.0이 출시되기 때문입니다! 하지만 그 전에... 버전 업그레이드를 준비할 수 있도록 Ruby 2.7의 주요 변경 사항과 신규 기능을 하나씩 살펴보겠습니다. Enumerable#tally tally는 배열의 모든 요소를 세어서 각 요소의 개수를 해시 형태로 반환
Ruby에서 yield라는 단어는 정확히 무엇을 의미할까요? 그리고 실제로 어떤 역할을 할까요? 간단히 말하면… yield는 키워드(즉, 언어의 핵심 구성 요소)로, 메서드 내부에서 블록을 호출하기 위해 사용됩니다. 꼭 알아야 할 핵심 사항은 다음과 같습니다: 블록을 호출하면 해당 블록 내부의 코드가 실행됩니다(메서드를 호출하는 것과 유사) yield는 블록에 원하는 만큼 인수를 전달할 수 있습니다 블록의 반환값이 yield의 반환값이 됩니다 이 내용을 제대로 이해하려면 먼저 블록 개념을 알아야 합니다. 블록은 이름 없는 메서드
Rails 헬퍼(Helper)란 무엇인가? 헬퍼는 주로 Rails 뷰(View)에서 재사용 가능한 코드를 공유하기 위해 사용되는 메서드입니다. Rails는 기본적으로 다양한 내장 헬퍼 메서드를 함께 제공합니다. 대표적인 내장 헬퍼 중 하나가 바로 time_ago_in_words입니다. 예시를 살펴보겠습니다: time_ago_in_words(Time.now) # less than a minute time_ago_in_words(Time.now + 60) # 1 minute time_ago_in_words(Time.now + 60
자바에서 루비로 어떻게 넘어올 수 있을까요? 이 가이드에서는 두 언어의 주요 차이점을 하나씩 짚어보며, 성공적인 전환에 필요한 모든 것을 알려드립니다. 자바나 C#에서 루비로 이전하려는 많은 개발자에게 특히 유용한 내용입니다. 하지만… 단순히 두 언어의 차이가 궁금하신 분들께도 도움이 될 것입니다. 그럼 시작해 보겠습니다! 1. 정적 타이핑 vs 동적 타이핑 타이핑 방식은 두 프로그래밍 언어의 코드를 나란히 놓고 볼 때 가장 크고 눈에 띄는 차이입니다. 핵심부터 정리하면 다음과 같습니다: 자바는 정적 타이핑(static typin
Ruby만으로 파일 시스템을 자유롭게 탐색할 수 있다는 사실을 알고 계셨나요? 핵심은 바로 Ruby의 Dir 클래스입니다. 디렉토리 항목을 나열하고, 현재 작업 디렉토리를 변경하고, 새 폴더를 생성하는 것까지 모두 가능합니다! 간단한 예제부터 살펴보겠습니다: filenames = Dir.entries(.) entries 메서드는 파일명 항목들의 배열을 반환합니다. 모든 항목은 문자열이므로, 실제 파일 내용을 읽으려면 Ruby의 File 클래스와 함께 사용해야 합니다. 참고로 위 코드의 점(.)은 현재 디렉토리를 의미합니다. 여기
Rails를 배우다 보면 애플리케이션을 시작하기 위해 스캐폴드(scaffold)를 만들어야 한다는 이야기를 자주 접하게 됩니다. 방법은 아주 간단합니다. rails g scaffold 명령어 하나면 충분하니까요. 그런데 스캐폴딩(scaffolding)이란 정확히 무엇일까요? 스캐폴딩은 건물, 교량 등 인공 구조물의 건설, 유지보수 및 수리 작업을 돕기 위해 작업 인부를 지원하는 임시 구조물입니다. – 위키백과 이 개념을 Rails에 비유하면 다음과 같습니다 스캐폴드는 Rails 프로젝트의 기본 골격을 이루는 파일들을 자동으로 생성해
Ruby를 배우다 보면 self 키워드의 사용법이 꽤 헷갈릴 때가 있습니다. 대체 어떻게 작동하는 걸까요? 정확히 self란 무엇일까요? self는 현재 객체(current object)에 접근할 수 있게 해주는 루비 키워드입니다. 만약 객체가 무엇인지 잘 모르겠다면, 객체 지향 프로그래밍과 관련된 학습 자료를 먼저 참고해 보시길 권합니다. 그런데 이 현재 객체는 문맥(context)에 따라 달라집니다. 문맥이라고요? 네, 문맥이란 특정 시점에 여러분의 코드가 어디에 위치해 있는지를 의미합니다. 예를 들어볼까요? 코드가 인스턴스 메
루비 해시(Ruby Hash)란 무엇일까요? 해시는 데이터를 고유한 키(key)-값(value) 쌍의 형태로 저장하는 자료구조입니다. 배열과 달리 숫자 인덱스가 없으며, 대신 키를 사용하여 해시의 값에 접근합니다. 해시가 활용되는 대표적인 예 국가 이름과 해당 국가 코드 목록 (예: ES ⇾ 스페인) 사전 — 각 단어마다 여러 개의 정의가 연결되어 있는 형태 도메인 이름과 그에 대응하는 IP 주소 적절한 상황에서 해시를 활용하면 루비 프로그램의 실행 속도를 크게 높일 수 있습니다. 다시 말해: 데이터가 사전과 같은 형태이거나,
환경 변수(environment variable)는 KEY=VALUE 형태의 키/값 쌍으로 이루어진 설정 정보입니다. KEY=VALUE 환경 변수는 컴퓨터에서 실행되는 모든 프로그램 사이에서 설정 옵션을 공유하기 위해 사용됩니다. 그렇기 때문에 환경 변수가 어떻게 동작하는지, 그리고 Ruby 프로그램에서 특수 객체인 ENV를 통해 어떻게 접근할 수 있는지 이해하는 것이 중요합니다. 환경 변수의 대표적인 활용 예시 기본 에디터(default editor) 설정하기 Ruby에게 gem을 찾을 위치 알려주기 (GEM_PATH / G
클래스 상속(Inheritance)은 객체 지향 프로그래밍(OOP)의 핵심 기능으로, 기존 클래스를 더 구체적이고 특화된 버전으로 확장할 수 있게 해주는 강력한 도구입니다. 간단한 예시를 볼까요? Food -> Fruit -> Orange 이 클래스들 사이에는 분명한 관계가 있습니다. 오렌지는 과일이고, 과일은 음식이기 때문입니다. 부모 클래스(슈퍼 클래스 또는 베이스 클래스라고도 불립니다)는 항상 하위 클래스보다 더 일반적인 개념입니다. 즉, Fruit(더 일반적)는 Orange(더 구체적)의 부모 클래스가 되는 것이죠
Ruby 코드만으로 웹 브라우저를 직접 조종할 수 있다는 사실을 알고 계셨나요? Watir 젬(gem)을 사용하면 이것이 가능합니다. 게다가 최신 브라우저의 강력한 기능을 그대로 활용할 수 있습니다: 페이지의 보이는 영역을 스크린샷으로 캡처할 수 있습니다 개발자 도구를 열고 코드를 직접 입력할 필요 없이, 어떤 페이지에서든 JavaScript를 실행할 수 있습니다 링크를 찾아 클릭하고, 입력 필드에 텍스트를 자동으로 채워 넣을 수도 있습니다 이 모든 기능은 Watir와 Selenium 프로젝트 덕분에 사용할 수 있습니다. 지금부