Computer >> 컴퓨터 >  >> 프로그래밍 >> Ruby

Ruby

  1. Ruby의 마법 같은 Enumerable 모듈 제대로 이해하기

    Ruby Magic 시리즈로 돌아왔습니다! 이번 시간에는 Ruby에서 가장 마법 같은 기능 중 하나를 살펴봅니다. 바로 Array, Hash, Range처럼 열거 가능한(enumerable) 클래스를 다룰 때 사용하는 대부분의 메서드를 제공하는 기능입니다. 이 과정에서 열거 가능한 객체로 무엇을 할 수 있는지, 열거가 내부적으로 어떻게 동작하는지, 그리고 단 하나의 메서드만 구현해서 객체를 열거 가능하게 만드는 방법까지 차근차근 배워보겠습니다.Enumerable, #each, 그리고 Enumerator열거(enumeration)란

  2. Ruby의 redo, retry, next 키워드 완벽 이해하기

    예외 발생 후 재시도하는 방법을 다룰 때 retry 키워드에 대해 소개한 적이 있습니다. 그런데 retry에는 잘 알려지지 않은 짝꿍이 있는데, 바로 redo입니다. 두 키워드는 비슷하게 동작하지만, redo는 블록 전체가 아니라 루프의 개별 반복(iteration)만 다시 실행한다는 점이 다릅니다.redo 키워드란?이전 아카데미 글에서 배웠듯이, retry를 사용하면 블록 안의 코드를 처음부터 다시 실행할 수 있습니다.begin puts Iteration raise rescue retry end이 예제는 예외를 발생시키

  3. Rails ActiveRecord 카운터 캐시로 연관 레코드 수 효율적으로 관리하기

    페이지가 로드될 때마다 데이터베이스에서 연관된 레코드를 일일이 집계하는 대신, ActiveRecord의 카운터 캐시(counter caching) 기능을 활용하면 카운터 값을 저장해 두고 연관 객체가 생성되거나 삭제될 때마다 자동으로 갱신할 수 있습니다. 이번 AppSignal Academy 에피소드에서는 ActiveRecord에서 카운터를 캐싱하는 방법을 모두 살펴보겠습니다.글(article)과 댓글(response)로 구성된 전형적인 블로그 예제를 사용해 보겠습니다. 각 글에는 여러 개의 댓글이 달릴 수 있고, 우리는 블로그 인

  4. Ruby 내부 들여다보기: 파일 "Slurping"과 스트리밍

    Ruby Magic 시리즈의 이번 편에서는 Ruby에서 파일을 스트리밍하는 방법을 알아봅니다. IO 클래스가 어떻게 파일 전체를 메모리에 로드하지 않고도 파일을 읽을 수 있는지, 그리고 읽어 들인 바이트를 버퍼링하면서 어떻게 한 줄씩 파일을 처리하는지 함께 살펴보겠습니다. 바로 시작해 볼까요?Slurping(통째로 읽기)과 파일 스트리밍Ruby의 File.read 메서드는 파일을 열어 전체 내용을 읽은 뒤 하나의 문자열로 반환합니다.irb> content = File.read("log/production.log&quo

  5. Rails 애플리케이션에 자바스크립트 스프링클스 더하기: 캐시 친화적인 동적 콘텐츠 처리법

    Rails의 프래그먼트 캐싱(fragment caching)은 페이지에서 캐시되는 비중이 클수록 더 큰 성능 향상을 제공합니다. 하지만 동적인 콘텐츠나 사용자별 콘텐츠가 많은 페이지에는 적용하기가 쉽지 않습니다. 이때 유용한 해결책이 바로 자바스크립트 스프링클스(JavaScript Sprinkles)입니다. 네덜란드식 빵 토핑인 하겔슬라흐(hagelslag)처럼, 페이지 전체를 캐시에서 바로 제공하고 사용자별 콘텐츠만 자바스크립트로 추가 요청해 얹어 주는 방식입니다. 프래그먼트 캐싱 프래그먼트 캐싱 같은 기법은 렌더링된 페이지의

  6. 루비 매직 여름 특집: AppSignal Academy 베스트 모음

    어릴 때 합본 두 권짜리 만화책을 사서 읽던 그 마법 같은 기억이 나시나요? 이 글이 그만큼 잊지 못할 경험이 되리라고 장담하지는 않겠지만, 해변에서, 공원에서, 혹은 한가한 일요일 오후에 읽기 좋은 알찬 AppSignal Academy 베스트 선집을 준비했습니다. 분명 여러분의 하루를 즐겁게 만들어줄 거예요.그럼 지금부터 가장 인기 있는 햇볕 아래 독서 추천글 5선을 소개합니다.Ruby에서 커스텀 예외(Custom Exceptions) 만들기루비에서는 거의 모든 것이 객체인데, 에러 역시 예외가 아닙니다. #아재개그Ruby에서 실

  7. Ruby에서 난수 생성하기: rand부터 SecureRandom까지 완벽 가이드

    난수는 게임 개발, 암호화, 시뮬레이션 구축 등 다양한 분야에서 활용됩니다. 그런데 흥미롭게도 컴퓨터는 순수한 연산만으로 진정한 의미의 난수를 만들어낼 수 없습니다. 결정론적(deterministic) 장치에서 참난수(true random number)를 생성하는 것은 근본적으로 불가능하며, 우리가 기대할 수 있는 최선은 겉보기에 무작위처럼 보이는 수열, 즉 유사난수(pseudorandom number)입니다.이 글에서는 Ruby에서 난수를 생성하는 다양한 방법을 살펴보겠습니다.Kernel#rand로 난수 생성하기가장 먼저 rand

  8. Ruby 객체 생성 방식을 자유롭게 바꾸는 방법

    Ruby가 훌륭한 언어로 꼽히는 이유 중 하나는 거의 모든 것을 개발자의 필요에 맞게 커스터마이징할 수 있다는 점입니다. 이는 유용하면서도 동시에 위험한 특성입니다. 잘못 사용하면 스스로 발등을 찍기 쉽지만, 신중하게 활용하면 놀랍도록 강력한 솔루션을 만들어낼 수 있습니다.이 글에서는 Ruby가 객체를 생성하고 초기화하는 내부 동작을 살펴보고, 기본 동작을 어떻게 수정할 수 있는지 단계별로 알아보겠습니다.클래스로 새 객체를 만드는 기본 원리먼저 Ruby에서 객체를 생성하는 기본적인 방법부터 확인해 보겠습니다. 새로운 객체(또는 인스

  9. Rails 컬렉션 캐싱으로 뷰 렌더링 속도 개선하기

    이전에 AppSignal Academy에서 Rails의 프래그먼트 캐싱(Fragment Caching)에 대해 살펴본 적이 있습니다. 뷰를 작은 조각 단위로 캐싱하여 성능을 크게 끌어올릴 수 있는 기법인데요, 파셜(Partial)을 캐싱하면 다른 뷰에서도 추가 비용 없이 재사용할 수 있다는 장점까지 있습니다.하지만 이 방식은 소규모 컬렉션에서만 잘 작동합니다. 컬렉션 규모가 커지면 곧바로 성능 문제가 드러납니다. 이번 글에서는 Rails 컬렉션 캐싱(Collection Caching)의 동작 원리와, 이를 활용해 대용량 컬렉션의 렌

  10. Ruby로 구축하는 실시간 푸시와 Pub/Sub: WebSocket 서버 직접 만들기

    Action Cable 같은 라이브러리 덕분에 Rails에서 실시간 기능을 구현하는 일이 한결 쉬워졌습니다. 이번 AppSignal Academy 에피소드에서는 실시간 업데이트의 핵심을 파헤치고, 최소한의 WebSocket 서버를 직접 만들어 보며 내부 동작 원리까지 살펴보겠습니다.이번에 만들 애플리케이션은 데이터를 푸시(push)하고, WebSocket 위에서 Pub/Sub을 사용합니다. 코드를 작성하기 전에 먼저 이 세 가지 개념이 각각 무엇을 의미하는지 짚고 넘어가겠습니다.푸시(Push): 수신자가 데이터를 폴링(polling

  11. 루비 클로저 완벽 이해하기: 블록, 프로시저, 람다의 차이점

    루비 매직(Ruby Magic) 시리즈에서는 우리가 매일 사용하는 기능들 뒤에 숨겨진 마법을 파헤쳐 그 동작 원리를 이해하는 것을 좋아합니다. 이번 에피소드에서는 블록(Block), 프로시저(Proc), 람다(Lambda) 사이의 차이점을 자세히 살펴보겠습니다.일급 함수(first-class function)를 지원하는 프로그래밍 언어에서는 함수를 변수에 저장하거나 다른 함수의 인자로 전달할 수 있습니다. 심지어 함수가 다른 함수를 반환값으로 사용하는 것도 가능합니다.클로저(closure)란 환경(environment)을 가진 일급

  12. Ruby #nil?, #empty?, #blank?, #present? 차이점 완벽 정리

    Ruby와 Rails에는 값의 존재 여부나 객체의 상태를 확인할 때 사용할 수 있는 여러 메서드가 있습니다. Ruby는 기본적으로 #nil?과 #empty?를 제공하고, Rails의 ActiveSupport는 여기에 #blank?와 #present?를 추가합니다. 이 메서드들은 각각 고유한 방식으로 동작하기 때문에, 각 메서드가 데이터를 어떻게 평가하는지 정확히 이해하는 것이 중요합니다. 잘못된 메서드를 선택하면 코드에서 예상치 못한 결과를 초래할 수 있습니다.이 글에서는 이 네 가지 메서드를 다시 한번 정리해 보겠습니다. 각 메서

  13. #to_s vs #to_str: 루비(Ruby) 명시적 캐스팅과 암시적 타입 강제 변환 완벽 가이드

    타입 강제 변환(type coercion)은 객체의 타입을 값과 함께 다른 타입으로 바꾸는 것을 말합니다. 예를 들어 #to_s로 Integer를 String으로 바꾸거나, #to_i로 Float을 Integer로 바꾸는 경우입니다. 한편 일부 객체가 구현하는 #to_str과 #to_int 메서드도 언뜻 보면 같은 작업을 하는 것처럼 보이지만, 실제로는 중요한 차이점이 있습니다.이번 글에서는 루비에서 타입을 명시적으로 캐스팅하는 방법과 암시적으로 강제 변환하는 방법을 깊이 있게 살펴보겠습니다. 두 방식의 차이점은 물론, 각각이 실제

  14. ActiveRecord vs Ecto 비교 (1부): 마이그레이션과 데이터 매핑

    데이터는 대부분의 소프트웨어 애플리케이션에서 핵심적인 역할을 합니다. 개발자에게 데이터베이스에서 데이터를 매핑하고 조회하는 작업은 반복적으로 마주하게 되는 일인데요. 그렇기 때문에 이 과정을 제대로 이해하고, 작업을 단순화해 주는 추상화 도구를 활용할 줄 아는 것이 무엇보다 중요합니다. 이 글은 두 편으로 구성된 시리즈의 첫 번째 글로, ActiveRecord(Ruby)와 Ecto(Elixir)를 비교해 봅니다. 두 도구가 각각 어떻게 데이터베이스 스키마 마이그레이션과 매핑을 지원하는지 함께 살펴보겠습니다. 그러니까 우리는 사과와

  15. 루비 클래스 레벨 인스턴스 변수의 마법: Wrappable 모듈로 메서드 감싸기

    지난 Ruby Magic에서는 클래스의 .new 메서드를 오버라이드하는 방식으로 모듈을 클래스에 안정적으로 주입하고, 기존 메서드 위에 추가 동작을 덧씌우는 방법을 알아봤습니다.이번에는 이 동작을 하나의 모듈로 추출해 어디서든 재사용할 수 있도록 한 단계 더 나아가 보겠습니다. 클래스 확장을 대신 처리해 주는 Wrappable 모듈을 직접 만들어 보면서, 클래스 레벨 인스턴스 변수(class-level instance variables)에 대한 모든 것을 함께 배우게 될 겁니다. 바로 시작해 볼까요?Wrappable 모듈 소개객체가

  16. 루비젬(RubyGem)의 내부 동작 원리와 직접 만들어 보기

    여러분, 모두 모여 앉으세요. 할아버지가 옛날이야기를 들려드리겠습니다. 인생이 고달팠던 그 시절, 젬(gem) 하나 설치하는 데도 머리를 감싸 쥐고 이를 악물며 고생해야 했던 시절 말입니다. 제가 루비를 처음 배우기 시작했을 무렵에는 번들러(Bundler)가 없었습니다. 젬을 설치하려면 정말 힘든 과정을 거쳐야 했죠. 레일즈(Rails)에서는 rake gems:install 명령어를 수없이 반복 실행하고, 도중에 발생하는 버그를 하나씩 잡아가며, 드디어 에러 없이 명령이 통과할 때까지 기다려야 했습니다. 오늘은 젬이 무엇인지, 어떻

  17. 처음부터 배우는 Ruby C 확장 빌드 완벽 가이드

    이번 Ruby Magic 에디션에서는 Ruby에서 C로 작성된 코드를 사용하는 방법을 소개합니다. 이 기법은 성능에 민감한 코드 영역을 최적화하거나, C 라이브러리와 Ruby 사이의 인터페이스를 구축할 때 활용할 수 있습니다. 핵심은 C로 작성된 라이브러리를 감싸는(wrap) 확장(extension)을 만드는 것입니다.C로 작성된 성숙하고 고성능인 라이브러리는 이미 매우 많습니다. 이를 굳이 다른 언어로 포팅하며 바퀴를 재발명하는 대신, Ruby에서 그대로 활용하는 것이 효율적입니다. 이렇게 하면 Ruby가 전통적으로 강점이 없는

  18. Ruby에서 비동기 스레드 테스트하기: '트리거, 수집, 검증' 패턴 완전 정복

    스레드와 비동기 환경은 처음 접하면 상당히 까다롭게 느껴집니다. 상호작용을 정리할 좋은 멘탈 모델이 없으면 쉽게 문제에 부딪히고 예상치 못한 결과를 마주하게 됩니다. 게다가 적절한 도구나 테스트 패턴 없이는 비동기 코드를 테스트하는 일 자체가 어려운 작업이 됩니다.스레드를 사람으로, 공유 객체를 한 번에 한 사람만 소유할 수 있는 사물로 생각하면 멀티스레드 시스템의 동작 방식을 훨씬 체계적으로 이해할 수 있습니다. 이번 글에서는 하나의 예제를 통해 Ruby 비동기 코드를 테스트하는 모든 과정을 살펴보겠습니다.Rails, Rack 또

  19. Ruby의 Fiber와 Enumerator 완벽 가이드: 블록을 뒤집어 생각하기

    Ruby에는 반복 작업을 수행하는 다양한 방법이 있습니다—루프, 블록, 그리고 열거자(Enumerator)입니다. 대부분의 Ruby 개발자는 루프와 블록은 능숙하게 다루지만, Enumerator와 Fiber는 상대적으로 낯설게 느껴지곤 합니다. 이번 Ruby Magic 에디션에서는 게스트 저자 Julik과 함께 Enumerable과 Fiber를 자세히 살펴보며, 흐름을 제어하는 열거형 객체와 블록을 뒤집어서 사용하는 기법을 설명합니다.블록 일시 중단과 연쇄 반복Ruby Magic의 이전 에디션에서 Enumerator를 다룬 적이 있

  20. 평균만 믿지 마세요: 통계 평균과 백분위수 101

    성능 모니터링은 성공적인 애플리케이션 운영의 핵심 요소입니다. 어떤 대상의 성능을 파악하는 가장 기본적인 방법 중 하나는 해당 작업이 발생할 때마다 소요 시간을 측정하고, 이를 바탕으로 통계를 도출하는 것입니다. 평균(Mean) 값들의 집합에서 평균(mean 또는 average)은 대상이 얼마나 좋거나 나쁘게 동작하는지 살펴보는 좋은 출발점입니다. 평균은 고려 대상인 모든 값을 더한 뒤, 발생 횟수로 나누어 계산합니다. Ruby에서는 다음과 같이 평균 응답 시간을 계산할 수 있습니다: 4.5 참고: 예제에서는 나눗셈의 정확도를 높

Total 598 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:12/30  20-컴퓨터/Page Goto:1 6 7 8 9 10 11 12 13 14 15 16 17 18