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 }) }, } } })() 팩워크 에피소드 1 - The Codest를 통한 Ruby on Rails 모듈화
The Codest
  • 회사 소개
  • 서비스
    • 소프트웨어 개발
      • 프론트엔드 개발
      • 백엔드 개발
    • Staff Augmentation
      • 프론트엔드 개발자
      • 백엔드 개발자
      • 데이터 엔지니어
      • 클라우드 엔지니어
      • QA 엔지니어
      • 기타
    • IT 자문
      • 감사 및 컨설팅
  • 산업 분야
    • 핀테크 및 뱅킹
    • E-commerce
    • 애드테크
    • 헬스 테크
    • 제조
    • 물류
    • 자동차
    • IOT
  • 가치
    • CEO
    • CTO
    • 배달 관리자
  • 우리 팀
  • Case Studies
  • 방법 알아보기
    • 블로그
    • 모임
    • 웹 세미나
    • 리소스
채용 정보 연락하기
  • 회사 소개
  • 서비스
    • 소프트웨어 개발
      • 프론트엔드 개발
      • 백엔드 개발
    • Staff Augmentation
      • 프론트엔드 개발자
      • 백엔드 개발자
      • 데이터 엔지니어
      • 클라우드 엔지니어
      • QA 엔지니어
      • 기타
    • IT 자문
      • 감사 및 컨설팅
  • 가치
    • CEO
    • CTO
    • 배달 관리자
  • 우리 팀
  • Case Studies
  • 방법 알아보기
    • 블로그
    • 모임
    • 웹 세미나
    • 리소스
채용 정보 연락하기
뒤로 화살표 뒤로 가기
2022-01-05
소프트웨어 개발

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

니콜라스 니소리아

인간은 많은 시간과 노력을 들이지 않고는 문제의 큰 그림을 보기가 어렵습니다. 특히 크고 복잡한 애플리케이션으로 작업할 때 이런 일이 자주 발생합니다. 내 변경 사항의 부작용은 무엇인가요? 여기 이 줄이 코드베이스의 원격 부분의 테스트에 영향을 미치는 이유는 무엇인가요? 완벽하거나 완전한 솔루션은 존재하지 않지만, Shopify에서 여러분과 여러분의 팀에 도움이 될 수 있는 도구를 출시했습니다.

소개

다음에 대해 이야기하기 위해 Packwerk를 사용하려면 먼저 몇 가지 개념을 소개해야 합니다.

  • 응집력는 모듈 또는 클래스의 요소가 얼마나 많이 함께 속해 있는지를 나타내는 척도입니다.
  • 커플링는 모듈 또는 클래스 간의 종속성 수준을 나타냅니다.
  • 경계사이의 장벽을 나타냅니다. 코드. 이 경우 코드 경계는 동일한 코드베이스 내에서 서로 다른 관심 도메인을 의미합니다.
  • 모듈화소프트웨어 시스템을 여러 개의 개별 모듈로 나누어 각 모듈이 독립적으로 작동하도록 하는 프로세스입니다.

문제

아시다시피 Ruby 는 코드 경계를 적용하는 데 좋은 솔루션을 제공하지 않습니다. 가시성을 지정할 수는 있지만 모든 종속성이 전역 네임스페이스에 로드됩니다. 대규모 또는 모놀리스 애플리케이션에서 이러한 경계가 없으면 다음과 같은 문제가 발생합니다.

  • 낮은 응집력,
  • 높은 커플링,
  • 스파게티 코드.

Shopify의 모놀리스를 모듈화하고 경계를 강화하기 위해 다양한 솔루션을 시도했지만 기대했던 결과를 얻지 못했습니다:
- 비공개 상수 설정하기,
- 보석을 통해 경계를 설정합니다,
- 테스트를 사용하여 교차 컴포넌트 연결을 방지합니다,
- 루비의 변조 보석 사용,
- 마이크로서비스 만들기.

이전 시도에서 얻은 모든 지식을 바탕으로 자체 도구를 만들기로 결정했습니다: Packwerk.

Packwerk

Packwerk란 무엇인가요?

Packwerk 그룹 간의 경계를 설정하는 데 사용되는 정적 분석 도구입니다. Ruby 파일에 패키지.

패키지란 무엇인가요?

A 패키지 는 자동 로드된 코드가 포함된 폴더입니다. Shopify의 팀 는 패키지를 만들 때 모범 디자인 사례를 사용하도록 권장합니다.
- 기능성이 높은 것들을 함께 포장해야 합니다. 응집력,

  • 패키지는 서로 비교적 느슨하게 결합되어 있어야 합니다.

경계 검사 유형

개인정보 보호 및 종속성 경계를 적용하고, 경계 위반 및 주기적 종속성을 확인할 수 있습니다.

실무에 적용하는 팩워크

패키지를 만들 때 애플리케이션을 구조화하거나 재구조화할 수 있는 특정한 방법은 없습니다. 이 문서에서는 다음에서 제안하는 접근 방식을 따르겠습니다.
스테판 하게만 Ruby on Rails의 점진적 모듈화.

프로젝트 선택

새 프로젝트 를 클릭하거나 프로젝트 중 하나를 선택하세요. 저는 다음과 같은 오픈 소스 프로젝트를 사용하기로 결정했습니다. 코드트리지. Rails 6 애플리케이션이 필요하다는 점을 언급하는 것이 중요합니다. Packwerk Zeitwerk를 사용합니다.

Packwerk 초기화

먼저 젬파일에 다음과 같이 젬을 추가해야 합니다. 보석 '팩워크' 를 클릭한 다음 번들을 클릭합니다. 그런 다음 실행 중인 젬을 초기화할 준비가 되었습니다. 팩워크 초기화.

그 후, 우리는 다음과 같은 사실을 알게 되었습니다. Packwerk 세 개의 파일을 생성했습니다:

  • packwerk.yml

  • package.yml

  • inflections.yml

packwerk.yml 의 구성 파일입니다. Packwerk 여기서 포함 및 제외 파일을 정의하고, 로드 경로를 나열하고, 굴절 파일을 정의하는 등의 작업을 수행합니다;

package.yml 는 패키지의 구성 파일입니다. 이 파일에서 패키지의 경계에 대한 구성을 추가합니다. package.yml이 있는 모든 폴더는 다음에서 패키지로 인식됩니다. Packwerk. 그게 다입니다, Packwerk 첫 번째
패키지라고 부르며 root 패키지입니다.

inflections.yml 는 사용자 정의 굴절과 약어를 사용할 경우 이를 배치하는 곳입니다.

파일 및 파일 구성에 대한 자세한 내용은 다음에서 확인할 수 있습니다.
Packwerk.

Packwerk 속성

모듈화가 작동하려면 세 가지 기본 속성이 필요합니다: 명명된 컨테이너, 그 콘텐츠및 명시적 종속성 다른 컨테이너. 따라서 이러한 속성을 Packwerk:

  • 이름: 패키지의 이름은 루트에서 상대 경로입니다.
    애플리케이션입니다.

  • 콘텐츠: package.yml을 폴더에 넣으면 이제 폴더의 모든 파일이 패키지의 콘텐츠가 됩니다.

  • 종속성: 다른 패키지에 대한 종속성 키를 추가하여 종속성을 정의할 수 있습니다. package.yml.

기본적으로 포함되지는 않지만 권장되는 또 다른 파일은 README입니다. 패키지 사용법에 대한 정보를 제공하는 것이 중요합니다.

에피소드 1의 끝

디지털 제품 개발 컨설팅

자세히 보기

GraphQL Ruby. 성능은 어떨까요?

철도 및 기타 운송 수단

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

관련 문서

소프트웨어 개발

미래 지향적인 웹 앱 구축: The Codest의 전문가 팀이 제공하는 인사이트

The Codest가 최첨단 기술로 확장 가능한 대화형 웹 애플리케이션을 제작하고 모든 플랫폼에서 원활한 사용자 경험을 제공하는 데 탁월한 성능을 발휘하는 방법을 알아보세요. Adobe의 전문성이 어떻게 디지털 혁신과 비즈니스를 촉진하는지 알아보세요...

최신
소프트웨어 개발

라트비아에 본사를 둔 10대 소프트웨어 개발 기업

최신 기사에서 라트비아 최고의 소프트웨어 개발 기업과 그들의 혁신적인 솔루션에 대해 알아보세요. 이러한 기술 리더들이 어떻게 귀사의 비즈니스를 향상시키는 데 도움을 줄 수 있는지 알아보세요.

thecodest
엔터프라이즈 및 스케일업 솔루션

Java 소프트웨어 개발 필수 사항: 성공적인 아웃소싱을 위한 가이드

The Codest로 효율성을 높이고 전문 지식을 활용하며 프로젝트 성공을 이끌 수 있는 성공적인 outsourcing Java 소프트웨어 개발에 대한 이 필수 가이드를 살펴보세요.

thecodest
소프트웨어 개발

폴란드 아웃소싱을 위한 최고의 가이드

폴란드에서 outsourcing가 급증한 것은 경제, 교육, 기술 발전으로 인한 IT 성장과 비즈니스 친화적인 환경이 조성된 덕분입니다.

더코데스트
엔터프라이즈 및 스케일업 솔루션

IT 감사 도구 및 기술에 대한 완벽한 가이드

IT 감사는 안전하고 효율적이며 규정을 준수하는 시스템을 보장합니다. 전체 기사를 읽고 그 중요성에 대해 자세히 알아보세요.

The Codest
야쿱 야쿠보비치 CTO & 공동 설립자

지식창고를 구독하고 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