InfoGrab DocsInfoGrab Docs

Gem 개발 가이드라인

GitLab 모노레포에서 Ruby Gem을 생성·관리·배포하는 방법과 Gem 명명 규칙, 의존성 처리, 외부 저장소 활용에 대해 설명합니다.

GitLab은 모노리식 코드베이스에서 코드 재사용성과 모듈성을 향상시키기 위한 도구로 Gem을 사용합니다. 기능이 충분히 독립적이고, 다른 애플리케이션에서도 사용하고 싶거나 더 넓은 커뮤니티에 도움이 될 것으로 판단될 때 코드베이스에서 라이브러리를 분리합니다. 코드를 Gem으로 분리하면 Gem이 애플리케이션 코드에 대한 숨겨진 의존성을 포함하지 않도록 보장할 수 있습니다. Gem은 GitLab의 비즈니스 로직과 분리되어 독립적으로 개발 가능한 격리된 기능을 구현할 때 항상 사용해야 합니다. Rails 코드베이스에서 새 Gem을 추출하기 가장 좋은 위치는 lib/ 폴더입니다. lib/ 폴더에는 범용적인 코드, GitLab 전용 코드, 그리고 나머지 코드베이스와 긴밀하게 통합된 코드가 혼재되어 있습니다. 코드베이스의 일부를 Gem으로 분리할지 결정하려면 다음 질문들을 스스로에게 해보세요: 이 코드는 별도의 소규모 프로젝트로 구현할 수 있는 범용적이거나 보편적인 코드인가? Monolith 외부의 내부 사용 환경에서도 활용될 것으로 예상되는가? 별도의 컴포넌트로 릴리스하는 것이 더 넓은 커뮤니티에 유용한가? 위 질문 중 하나라도 예 라고 답했다면, 새 Gem 생성을 적극적으로 검토해야 합니다. 언제든지 같은 리포지터리 내에 새 Gem을 먼저 만들고, 나중에 더 넓은 커뮤니티에서 사용될 의도가 확인되면 별도 리포지터리로 마이그레이션할지 평가할 수 있습니다. 악의적인 행위자가 분리된 Gem 이름을 선점하는 것을 방지하려면 Gem 이름 예약 지침을 따르세요. Gem 사용의 장점 # Gem을 사용하면 코드 유지 관리에 여러 가지 이점을 제공합니다: 코드 재사용성 - Gem은 단일 목적을 수행하는 격리된 라이브러리입니다. Gem을 사용하면 공통 기능을 잘 문서화되고 테스트된 간단한 패키지로 격리하여 다양한 애플리케이션에서 재사용할 수 있습니다. 모듈성 - Gem은 특정 기능을 독립적인 라이브러리로 캡슐화하여 격리를 만드는 데 도움이 됩니다. 이를 통해 코드를 더 잘 구성하고, 특정 모듈의 소유자를 더 명확히 정의하며, 특정 Gem을 유지 관리하거나 업데이트하기 쉽게 만듭니다. 소규모 - Gem은 설계 상 격리된 함수 집합을 구현하기 때문에 크기가 작습니다. 작은 프로젝트는 이해하고 확장하고 유지 관리하기가 훨씬 쉽습니다. 테스트 - Gem은 작기 때문에 모든 테스트를 훨씬 빠르게 실행하거나 Gem 테스트를 매우 철저하게 진행할 수 있습니다. Gem은 패키지화되어 자주 변경되지 않으므로, 테스트를 덜 자주 실행하여 CI 테스트 시간을 개선할 수도 있습니다. Gem 명명 # Gem은 세 가지 경우로 분류될 수 있습니다: unique_gem : Gem에 GitLab 전용 내용이 포함되지 않으면 gem 이름에 gitlab 을 포함하지 않습니다 existing_gem-gitlab : 공개적으로 사용 가능한 gem을 포크하여 수정/확장하는 경우 RubyGems 규약 에 따라 -gitlab 접미사를 추가합니다 gitlab-unique_gem : GitLab 프로젝트