미래 지향적인 웹 앱 구축: The Codest의 전문가 팀이 제공하는 인사이트
The Codest가 최첨단 기술로 확장 가능한 대화형 웹 애플리케이션을 제작하고 모든 플랫폼에서 원활한 사용자 경험을 제공하는 데 탁월한 성능을 발휘하는 방법을 알아보세요. Adobe의 전문성이 어떻게 디지털 혁신과 비즈니스를 촉진하는지 알아보세요...
인간은 많은 시간과 노력을 들이지 않고는 문제의 큰 그림을 보기가 어렵습니다. 특히 크고 복잡한 애플리케이션으로 작업할 때 이런 일이 자주 발생합니다. 내 변경 사항의 부작용은 무엇인가요? 여기 이 줄이 코드베이스의 원격 부분의 테스트에 영향을 미치는 이유는 무엇인가요? 완벽하거나 완전한 솔루션은 존재하지 않지만, Shopify에서 여러분과 여러분의 팀에 도움이 될 수 있는 도구를 출시했습니다.
다음에 대해 이야기하기 위해 Packwerk를 사용하려면 먼저 몇 가지 개념을 소개해야 합니다.
아시다시피 Ruby 는 코드 경계를 적용하는 데 좋은 솔루션을 제공하지 않습니다. 가시성을 지정할 수는 있지만 모든 종속성이 전역 네임스페이스에 로드됩니다. 대규모 또는 모놀리스 애플리케이션에서 이러한 경계가 없으면 다음과 같은 문제가 발생합니다.
Shopify의 모놀리스를 모듈화하고 경계를 강화하기 위해 다양한 솔루션을 시도했지만 기대했던 결과를 얻지 못했습니다:
- 비공개 상수 설정하기,
- 보석을 통해 경계를 설정합니다,
- 테스트를 사용하여 교차 컴포넌트 연결을 방지합니다,
- 루비의 변조 보석 사용,
- 마이크로서비스 만들기.
이전 시도에서 얻은 모든 지식을 바탕으로 자체 도구를 만들기로 결정했습니다: Packwerk.
Packwerk 그룹 간의 경계를 설정하는 데 사용되는 정적 분석 도구입니다. Ruby 파일에 패키지.
A 패키지 는 자동 로드된 코드가 포함된 폴더입니다. Shopify의 팀 는 패키지를 만들 때 모범 디자인 사례를 사용하도록 권장합니다.
- 기능성이 높은 것들을 함께 포장해야 합니다. 응집력,
개인정보 보호 및 종속성 경계를 적용하고, 경계 위반 및 주기적 종속성을 확인할 수 있습니다.
패키지를 만들 때 애플리케이션을 구조화하거나 재구조화할 수 있는 특정한 방법은 없습니다. 이 문서에서는 다음에서 제안하는 접근 방식을 따르겠습니다.
스테판 하게만 Ruby on Rails의 점진적 모듈화.
새 프로젝트 를 클릭하거나 프로젝트 중 하나를 선택하세요. 저는 다음과 같은 오픈 소스 프로젝트를 사용하기로 결정했습니다. 코드트리지. Rails 6 애플리케이션이 필요하다는 점을 언급하는 것이 중요합니다. Packwerk Zeitwerk를 사용합니다.
먼저 젬파일에 다음과 같이 젬을 추가해야 합니다. 보석 '팩워크'
를 클릭한 다음 번들
을 클릭합니다. 그런 다음 실행 중인 젬을 초기화할 준비가 되었습니다. 팩워크 초기화
.
그 후, 우리는 다음과 같은 사실을 알게 되었습니다. Packwerk 세 개의 파일을 생성했습니다:
packwerk.yml
package.yml
inflections.yml
packwerk.yml 의 구성 파일입니다. Packwerk 여기서 포함 및 제외 파일을 정의하고, 로드 경로를 나열하고, 굴절 파일을 정의하는 등의 작업을 수행합니다;
package.yml 는 패키지의 구성 파일입니다. 이 파일에서 패키지의 경계에 대한 구성을 추가합니다. package.yml이 있는 모든 폴더는 다음에서 패키지로 인식됩니다. Packwerk. 그게 다입니다, Packwerk 첫 번째
패키지라고 부르며 root 패키지입니다.
inflections.yml 는 사용자 정의 굴절과 약어를 사용할 경우 이를 배치하는 곳입니다.
파일 및 파일 구성에 대한 자세한 내용은 다음에서 확인할 수 있습니다.
Packwerk.
모듈화가 작동하려면 세 가지 기본 속성이 필요합니다: 명명된 컨테이너, 그 콘텐츠및 명시적 종속성 다른 컨테이너. 따라서 이러한 속성을 Packwerk:
이름: 패키지의 이름은 루트에서 상대 경로입니다.
애플리케이션입니다.
콘텐츠: package.yml을 폴더에 넣으면 이제 폴더의 모든 파일이 패키지의 콘텐츠가 됩니다.
종속성: 다른 패키지에 대한 종속성 키를 추가하여 종속성을 정의할 수 있습니다. package.yml.
기본적으로 포함되지는 않지만 권장되는 또 다른 파일은 README입니다. 패키지 사용법에 대한 정보를 제공하는 것이 중요합니다.
에피소드 1의 끝
자세히 보기