window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster가 이미 존재합니다') } else { w.LeadBooster = { q: [], on: 함수 (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: 함수 (n) { this.q.push({ t: 't', n: n }) }, } } })() Ruby on Rails(Pub/Sub 포함 - The Codest)에 대해 자세히 알아보기
The Codest
  • 회사 소개
  • 서비스
    • 소프트웨어 개발
      • 프론트엔드 개발
      • 백엔드 개발
    • Staff Augmentation
      • 프론트엔드 개발자
      • 백엔드 개발자
      • 데이터 엔지니어
      • 클라우드 엔지니어
      • QA 엔지니어
      • 기타
    • IT 자문
      • 감사 및 컨설팅
  • 산업 분야
    • 핀테크 및 뱅킹
    • E-commerce
    • 애드테크
    • 헬스 테크
    • 제조
    • 물류
    • 자동차
    • IOT
  • 가치
    • CEO
    • CTO
    • 배달 관리자
  • 우리 팀
  • Case Studies
  • 방법 알아보기
    • 블로그
    • 모임
    • 웹 세미나
    • 리소스
채용 정보 연락하기
  • 회사 소개
  • 서비스
    • 소프트웨어 개발
      • 프론트엔드 개발
      • 백엔드 개발
    • Staff Augmentation
      • 프론트엔드 개발자
      • 백엔드 개발자
      • 데이터 엔지니어
      • 클라우드 엔지니어
      • QA 엔지니어
      • 기타
    • IT 자문
      • 감사 및 컨설팅
  • 가치
    • CEO
    • CTO
    • 배달 관리자
  • 우리 팀
  • Case Studies
  • 방법 알아보기
    • 블로그
    • 모임
    • 웹 세미나
    • 리소스
채용 정보 연락하기
뒤로 화살표 뒤로 가기
2022-12-07
소프트웨어 개발

Ruby on Rails(Pub/Sub 포함)에 대해 자세히 알아보기

The Codest

마이클 폴락

선임 루비 개발자

Pub/Sub는 코드를 깔끔하게 만들고, 서비스를 분리하고, 쉽게 확장할 수 있도록 하는 등 프로젝트에 많은 이점을 가져다줍니다. 다음 글에서 Pub/Sub에 대해 자세히 알아보고 프로젝트의 수준을 높여보세요!

Ruby on Rails (Rails, RoR)은 잘 알려진 웹 애플리케이션 프레임워크입니다. Ruby 프로그래밍 언어입니다. Pub/Sub 라는 소프트웨어 디자인 패턴의 줄임말입니다. 게시-구독. Rails의 소프트웨어 컴포넌트 간의 통신을 Pub/Sub에서 어떻게 처리할 수 있는지 설명하겠습니다.

Pub/sub란 무엇인가요?

Pub/sub 는 서비스 간 통신을 제공하는 소프트웨어 디자인 패턴입니다. 서비스
는 게시자(생산자) 또는 수신자(소비자)의 두 가지 역할 중 하나를 수반합니다. 무엇
생성되어 소비되는 것은 이벤트나 메시지 또는 알림으로 결정됩니다. 이벤트의
이 글의 맥락에서는 같은 것을 지칭할 때 같은 의미로 사용됩니다.
생산하는 서비스는 누가 소비하는지 알 수 없습니다. 소비하는 서비스는
메시지의 출처를 알 수 있습니다. 서로에게 알려지지 않은 상태로 남아있을 수 있습니다. 다음과 다릅니다.
메시지 대기열에서 메시지를 보내는 컴포넌트가 종종 목적지를 알고 있습니다.
- 이 메시징 스타일을 사용하면 어디서나 메시지를 보낼 수 있습니다. 이 메커니즘은 핵심입니다.
의 Pub/sub 분리되어 있다는 의미입니다.

서로의 관심사를 표현하려면 공통의 이해를 공유해야 합니다. 따라서
두 가지 역할 모두 메시지 생산자와
메시지의 소비자를 만납니다. 이 메커니즘을 제목, 구독 또는 주제라고 합니다. 이는
주제에 대한 메시지 분류를 담당하며, 본질적으로 상태 비저장 메시지 필터입니다.
토픽은 방송국 역할을 합니다. 퍼블리셔는 토픽에 대한 메시지를 생성합니다,
구독자는 토픽의 메시지를 즉시 수신합니다. 디커플링으로 인해
서비스에서 메시지를 교환하는 가장 효율적인 방법은 비동기적으로 처리하는 것입니다.

Pub/Sub 없는 레일

기본적으로 컴포넌트 간에 메시지를 전달하기 위한 소프트웨어 디자인 패턴에 대한 Rails 오버헤드는 없습니다. 개발자는 표준 객체 지향 프로그래밍 (OOP) 패러다임: 함수에 매개변수를 전달하고 값에 대한 클래스를 요청합니다.

애플리케이션이 다소 복잡하지 않은 경우에는 이 정도면 충분할 수 있습니다. 예를 들어 애플리케이션이 성장하여 일부 작업을 비동기적으로 수행해야 하는 경우, 애플리케이션이 커지면 프로젝트 데이터 워크플로우를 해결하는 추상화가 필요합니다. 개발자는 바퀴를 재발명하는 대신 다음과 같이 구현할 수 있습니다. Pub/sub 를 사용하여 이러한 추상화의 부족함을 채울 수 있습니다.

레일이 있는 게시/서브의 장점

  • 활성 레코드 콜백을 피하세요.
  • 시스템에 비동기 병렬 처리를 추가하면 성능, 안정성 및 확장성이 향상됩니다.
  • 메시지는 시스템의 다른 부분에 비동기적으로 브로드캐스트할 수 있습니다.
  • 메시지를 시스템의 다른 부분으로 비동기적으로 브로드캐스트할 수 있습니다.
  • 디커플링 - 기능을 추가하거나 변경해도 게시/서브는 아무런 영향을 미치지 않습니다.
    를 사용하면 모든 항목의 상호 작용 방식을 수정할 수 있습니다.
  • 메시지 소비자는 더 이상 주기적으로 업데이트 또는 새
    정보를 제공합니다. 시스템에서 특히 문제가 될 수 있는 전송 지연 시간을 줄입니다.
    지연을 용납하지 않습니다.
  • 시스템에서 처리할 수 있는 구독자 수에는 제한이 없으므로 변경할 수 있습니다,
    언제든지 업그레이드, 증식 또는 사라질 수 있습니다.

레일이 있는 게시/서브의 단점

  • 퍼블리셔/서브 시스템의 가장 큰 단점은 퍼블리셔와 퍼블리셔가 분리되어 있다는 것입니다.
    구독자.

Rails Pub/Sub 소개

라이브러리를 사용하여 작성된 Rails의 소스 예시
게시/서브 온 레일즈 (루비의 명명법에서는 라이브러리를 gem이라고 합니다): 자세한 내용은 gem의 readme에서 확인할 수 있습니다. 구현은 모듈로 구성됩니다:

  1. 도메인,
  2. 이벤트,
  3. 이벤트 핸들러,
  4. 이벤트 게시자,
  5. 구독.

도메인

게시/서브에 컨텍스트를 제공하기 위한 비즈니스 로직을 설명하여 깔끔하게 정리합니다. 코드.

 모듈 알림
   PubSub::도메인 확장
 end
 모듈 보고서
   PubSub::도메인 확장
 end

이벤트

어떤 일이 일어났는지 설명하는 클래스입니다. 클래스 이름은 취소, 변경, 생성, 삭제, 전송, 업데이트와 같이 가능한 한 어떤 일이 일어났는지를 설명하는 자체 설명으로 선언하세요. 이벤트 이름은 다음과 같을 수 있습니다: 손익 계산서가 생성되었음을 의미하는 ProfitAndLossStatementCreatedEvent.

 Reports::ProfitAndLossStatementCreatedEvent 클래스 < PubSub::DomainEvent
   속성 :profit_and_loss_statement_id, Types::Strict::Integer
 end

이벤트 게시자

이벤트를 방출할 수 있는 클래스입니다. 이 예는 서비스 보고서를 만드는 것을 보여줍니다. 보고서가 성공적으로 생성되면 해당 보고서 생성 이벤트를 발생시킵니다.

Reports::ProfitAndLossStatementService 클래스
   포함 PubSub::Emit
    def execute
     emit(:report_profit_and_손실명세서_created, profit_and_손실명세서_id: id) if result.ok?
   end
 end

이벤트 핸들러

이 클래스는 이벤트 처리에 대한 응답으로 실행되어야 합니다.

모듈 Notifications
 ReportsProfitAndLossStatementCreatedHandler 클래스 < PubSub::DomainEventHandler
   def call
     ReportMailer.profit_and_loss_statement(profit_and_loss_statement).deliver_now
   end

   private

   def profit_and_loss_statement
     profit_and_손실명세서.find(event_data.profit_and_손실명세서_id)
   end
 end
end

구독

이벤트는 구독을 통해 핸들러에 바인딩됩니다.

알림:
 보고서__profit_and_손실_명세서_생성: 비동기

사용 사례 예시:

  • "소셜 네트워크의 '팔로우' 기능,
  • 사물 인터넷,
  • 메일링,
  • 생성된 파일에 대한 알림.

유사한 패턴

  1. 이벤트 버스 - 컴포넌트는 누가 이벤트를 수신할지, 얼마나 많은 응답자가 반응할지 모른 채 이벤트버스에 이벤트를 보낼 수 있습니다,
  2. 옵저버 - 대상은 관찰자라고 하는 부양 가족의 목록을 관리하고 상태가 변경될 때마다 이들에게 알림을 보냅니다,
  3. 풀링 - 폴링할 때 클라이언트는 주기적으로 시스템에 새로운 이벤트나 데이터가 있는지 묻습니다.

보석

  • https://github.com/edisonywh/rocketman

  • https://github.com/krisleech/wisper

  • https://github.com/stevo/pubsubon레일

요약

Pub/sub는 루비 인 레일즈에서 일반적인 접근 방식은 아닙니다. 이 문서에서 소개한 것처럼 이 패턴은 코드를 깔끔하게 만들고, 서비스를 분리하며, 쉽게 확장할 수 있도록 하는 등 프로젝트에 많은 이점을 가져올 수 있습니다.

협력 배너

관련 문서

핀테크

루비를 가장 잘 활용하는 5가지 예

루비로 무엇을 할 수 있는지 궁금한 적이 있으신가요? 글쎄요, 아마도 하늘이 한계일 것입니다만, 어느 정도 알려진 몇 가지 사례에 대해 이야기하게 되어 기쁩니다...

The Codest
파웰 무진스키 Software Engineer
소프트웨어 개발

TMUX, Vim, Fzf + Ripgrep을 사용한 레일 개발

몇 년 전, 저는 모두 Java 개발자인 친구들과 함께 고기를 구워 먹고 있었습니다. 어떻게 시작되었는지 모르겠지만 코딩 환경에 대해 이야기를 나누기 시작했습니다. I...

The Codest
마르신 돌리와 Software Engineer
소프트웨어 개발

제품 개발: Python 대 루비

Python와 Ruby는 모두 가장 널리 사용되는 백엔드 프로그래밍 언어입니다. Python가 조금 더 대중적이고 더 광범위하게 사용됩니다. 하지만 루비도 많은 이점을 제공하며 ...

The Codest
카밀 페렌스 성장 책임자
소프트웨어 개발

팩워크 에피소드 1을 통한 Ruby on Rails 모듈화

인간은 많은 시간과 노력을 들이지 않고는 문제의 큰 그림을 보기가 어렵습니다. 이는 특히 크고 복잡한 애플리케이션을 작업할 때 발생합니다....

니콜라스 니소리아
소프트웨어 개발

루비 생태계에서 랙의 역할

전문가로부터 루비 생태계에서 랙의 역할에 대해 자세히 알아보고 루비 게임의 기술을 향상하세요.

니콜라스 니소리아

지식창고를 구독하고 IT 분야의 전문 지식을 최신 상태로 유지하세요.

    회사 소개

    The Codest - 폴란드에 기술 허브를 둔 국제 소프트웨어 개발 회사입니다.

    영국 - 본사

    • 사무실 303B, 182-184 하이 스트리트 노스 E6 2JA
      영국 런던

    폴란드 - 현지 기술 허브

    • 파브리츠나 오피스 파크, 알레야
      포코주 18, 31-564 크라쿠프
    • 뇌 대사관, 콘스트럭터스카
      11, 02-673 바르샤바, 폴란드

      The Codest

    • 홈
    • 회사 소개
    • 서비스
    • Case Studies
    • 방법 알아보기
    • 채용 정보
    • 사전

      서비스

    • IT 자문
    • 소프트웨어 개발
    • 백엔드 개발
    • 프론트엔드 개발
    • Staff Augmentation
    • 백엔드 개발자
    • 클라우드 엔지니어
    • 데이터 엔지니어
    • 기타
    • QA 엔지니어

      리소스

    • 외부 소프트웨어 개발 파트너와의 협력에 대한 사실과 오해
    • 미국에서 유럽으로: 미국 스타트업이 유럽으로 이전을 결정하는 이유
    • 테크 오프쇼어 개발 허브 비교: 테크 오프쇼어 유럽(폴란드), 아세안(필리핀), 유라시아(터키)
    • CTO와 CIO의 주요 과제는 무엇인가요?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • 웹사이트 이용 약관

    저작권 © 2025 by The Codest. 모든 권리 보유.

    ko_KRKorean
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese es_ESSpanish nl_NLDutch etEstonian elGreek ko_KRKorean