소프트웨어 저장소

Software repository

소프트웨어 저장소 또는 줄여서 repo소프트웨어 패키지를 저장하는 위치입니다.목차도 메타데이터와 함께 저장되는 경우가 많습니다.소프트웨어 저장소는 일반적으로 소스 제어 또는 저장소 관리자에 의해 관리됩니다.패키지 관리자를 사용하면 리포지토리("패키지"라고도 함)를 자동으로 설치하고 업데이트할 수 있습니다.

개요

많은 소프트웨어 퍼블리셔 및 기타 조직은 이를 위해 무료로 또는 구독료를 지불하고 인터넷에 서버를 유지하고 있습니다.리포지토리는 Perl 프로그래밍 언어용 CPAN과 같은 특정 프로그램 전용이거나 운영 체제 전체를 위한 것일 수 있습니다.이러한 저장소의 운영자는 일반적으로 저장소에서 소프트웨어 패키지를 검색, 설치 및 조작하기 위한 패키지 관리 시스템, 도구를 제공합니다.예를 들어, 많은 리눅스 어드밴스트 패키징 툴(APT), 일반적으로 데비안 기반 분배에서 발견되거나, 맛있다는 레드 햇을 위주로 분포에서 발견된를 사용한다.또한 차코 뿔 개구리와 같은 여러가지의 독립적인 패키지 관리 시스템,, 아치 리눅스와 equo, 사바욘 리눅스에서 발견된에 사용된다.

으로서 소프트웨어 보관소 유용한 패키지 포함하도록 설계되어 있다고 주요 보관소 악성 코드 무료도록 설계되고 있다.만약 컴퓨터가 공신력 있는 노점상에서 디지털 서명된 저장소를 사용하고, 적절한 사용 권한 시스템을 구성되어 있는 경우가 상당히 맬웨어로 인해 이러한 시스템에 대한 위협을 감소시킨다.부작용으로, 이러한 능력이 많은 시스템 안티 바이러스 소프트웨어와 같은 맬웨어 방지 소프트웨어가 필요 없다.[1]

대부분의 주요 Linux 배포판에는 메인 저장소를 미러링하는 많은 저장소가 있습니다.

기업 환경에서 소프트웨어 저장소는 일반적으로 아티팩트를 저장하거나 보안 제한으로 인해 액세스할 수 없는 외부 저장소를 미러링하는 데 사용됩니다.이러한 저장소는 액세스 제어, 버전 관리, 업로드된 소프트웨어에 대한 보안 검사, 클러스터 기능 등 추가 기능을 제공할 수 있으며, 일반적으로 기업의 모든 요구에 부응하기 위해 하나의 패키지로 다양한 형식을 지원합니다.따라서 단일 정보 제공이 목표입니다.일반적인 예로는 JFrog[2][3] Architectory 및 Nexus 저장소를 [4]들 수 있습니다.

클라이언트 측에서는 패키지 관리자가 리포지토리의 설치 및 업데이트를 지원합니다.

서버측에서 소프트웨어 저장소는 일반적으로 소스 제어 또는 저장소 관리자에 의해 관리됩니다.일부 저장소 관리자는 다른 저장소 위치를 하나의 URL로 집계하여 캐시 프록시를 제공할 수 있습니다.연속 빌드를 수행할 때 많은 아티팩트가 생성되고 종종 중앙에서 저장되므로 릴리스되지 않은 아티팩트를 자동으로 삭제하는 것이 중요합니다.

패키지 관리 시스템과 패키지 개발 프로세스

패키지 관리 시스템패키지 개발 프로세스와 다릅니다.

패키지 관리 시스템의 일반적인 용도는 서로 다른 소스로부터의 코드를 일관성 있는 독립형 운영 유닛에 쉽게 통합할 수 있도록 하는 것입니다.따라서 패키지 관리 시스템을 사용하여 Linux 배포판을 생성할 수 있으며, 제한된 특정 응용 프로그램에 맞게 배포될 수 있습니다.

이와는 대조적으로 패키지 개발 프로세스는 공통 테마를 가진 기능 또는 루틴 집합의 코드 공동 개발 및 문서화를 관리하기 위해 사용되며, 이에 따라 일반적으로 그 자체로 완전하지 않고 사용할 수 없는 소프트웨어 기능 패키지가 생성된다.적절한 패키지 개발 프로세스는 사용자가 적절한 문서 작성 및 코딩 관행을 준수하고 일정 수준의 유닛 테스트를 통합하는 데 도움이 됩니다.

선택한 저장소

다음 표에는 제공된 소프트웨어에 대한 리포지토리가 있는 몇 가지 언어가 나와 있습니다."자동 검사" 열에는 수행된 일상적인 검사가 설명되어 있습니다.

코어 코드의 버전이 다른 복수의 operating system으로 소프트웨어를 테스트할 수 있는 사람은 극히 소수입니다.R 프로그래밍 언어의 경우 Complexive R Archive Network(CRAN; 종합 R 아카이브 네트워크)는 정기적으로 테스트를 수행합니다.

이것이 얼마나 중요한지 이해하기 위해 Sally와 John이라는 두 명의 개발자가 있는 상황을 상상해 보십시오.Sally는 패키지 A를 기부한다.Sally는 Microsoft Windows의 한 버전에서만 소프트웨어의 현재 버전을 실행하고 있으며, 이 환경에서 테스트한 적이 있습니다.CRAN은 운영체제와 핵심 R언어 소프트웨어 버전을 12개 조합하여 Sally의 공헌도를 정기적으로 테스트합니다.둘 중 하나가 오류를 생성하면 오류 메시지가 나타납니다.이 에러 메시지의 상세를 사용하면, 현재의 하드웨어나 소프트웨어로 에러를 복제할 수 없는 경우에서도, 에러의 수정을 유효하게 할 수 있는 충분한 정보를 얻을 수 있습니다.다음으로 John이 패키지 A를 사용하는 패키지 B를 저장소에 제공한다고 가정합니다.패키지 B는 모든 테스트를 통과하여 사용자가 사용할 수 있습니다.나중에 Sally는 A의 개선된 버전을 제출하지만, 안타깝게도 B는 망가집니다.자동 검사를 통해 존이 문제를 해결할 수 있도록 정보를 제공할 수 있습니다.

이 예에서는 R 기여 패키지 시스템의 장점과 단점을 모두 공개하고 있습니다.CRAN은 기여 패키지의 이러한 자동 테스트를 지원하지만 CRAN에 기여하는 패키지는 사용하는 다른 기여 패키지의 버전을 지정할 필요가 없습니다.특정 버전의 패키지를 요청하는 절차가 있지만 기여자가 이러한 절차를 사용하지 않을 수 있습니다.

또한 CRAN과 같은 저장소에서 투고된 패키지의 정기적인 체크를 실행할 경우 핵심 언어의 개발 버전에 대한 광범위한 임시 테스트 스위트를 실제로 제공합니다.Sally(위의 예에서)는 특히 언어 개발 버전에서 이해할 수 없거나 부적절하다고 생각되는 오류 메시지를 받았을 경우 핵심 개발 팀에 언어 지원을 요청할 수 있습니다.이와 같이 저장소는 핵심 언어 소프트웨어의 품질 향상에 기여할 수 있습니다.

언어/목적 패키지 개발 프로세스 저장소 설치 방법 공동 개발 플랫폼 자동 검사
하스켈 응용 프로그램 및 라이브러리[5] 구축을 위한 공통 아키텍처 해킹 cabal(소프트웨어)
자바 메이븐[6]
줄리아.[7]
일반적인 리스프 퀵리스프[8]
.그물 NuGet NuGet[9]
Node.js npm[10]
CPAN PPM[11]
PHP PEAR, Composer PECL, Packagist
파이썬 셋업툴 PyPI pip, EasyInstall, PyPM, Anaconda
R R CMD 체크[12][13] 프로세스 크랜[14] install.install.install.install을 실행합니다[15].
리모트[16]
깃헙[17]
12개의 플랫폼 또는 서로 다른 운영 체제(Linux, Windows, macOS 및 Solaris의 다른 버전)의 서로 다른 버전의 R(개발, 프리렐, 패치 적용, 릴리스) 조합에서 자주 사용됩니다.
루비 루비젬스 루비젬스[18] RubyGems,[18] 번들러[19]
카고[20] 상자[21] 카고[20]
TeX, LaTeX CTAN

(이 표의 일부는 Stack[22] Overflow의 "프로그래밍 언어별 상위 저장소 목록"에서 복사되었습니다.)

C, C++, Fortran다른 많은 프로그래밍 언어에는 범용 스코프를 가진 중앙 소프트웨어 저장소가 없습니다.범위가 제한된 주요 저장소는 다음과 같습니다.

  • Netlib(주로 Fortran 및 C의 수학적 루틴)은 역사적으로 최초의 오픈 소프트웨어 저장소 중 하나입니다.
  • Boost는 C++용 고품질 라이브러리의 엄밀하게 큐레이션된 모음입니다. Boost에서 개발된 일부 코드는 나중에 C++ 표준 라이브러리의 일부가 되었습니다.

패키지 매니저

패키지 관리자는 리포지토리 및 배포 관리를 지원합니다.리포지토리가 업데이트되면 패키지 관리자는 일반적으로 사용자가 패키지 관리자를 통해 해당 리포지토리를 업데이트할 수 있도록 허용합니다.또한 다른 소프트웨어 저장소 간의 종속성 등의 관리에도 도움이 됩니다.Package Manager의 예는 다음과 같습니다.

인기 있는 패키지 매니저
패키지 매니저 묘사
npm Node.js[23] 패키지 매니저
삐삐 Python용 패키지[24] 설치 프로그램
적절한 Debian 패키지[25] 관리용
홈브루 Apple이 설치하지 않은 패키지를[26] 설치할 수 있는 MacOS용 패키지 설치 프로그램
vcpkg C 및 C++[27][28]용 패키지 매니저
yumdnf Fedora 및 Red Hat Enterprise[29] Linux용 패키지 매니저
팩맨 Arch[30] 리눅스용 패키지 관리자

저장소 관리자

지속적인 통합과의 관계

개발 라이프사이클의 일부로서 소스 코드는 연속적인 통합을 사용하여 바이너리 아티팩트에 지속적으로 내장되고 있습니다.이는 개발자가 저장소에서 아티팩트를 가져와 빌드를 푸시하는 것과 마찬가지로 바이너리 저장소 관리자와 상호 작용할 수 있습니다.CI 서버와의 긴밀한 통합으로 다음과 같은 중요한 메타데이터를 저장할 수 있습니다.

  • 빌드를 트리거한 사용자(수동 또는 리비전 제어에 커밋됨
  • 구축한 모듈
  • 사용된 소스(커밋 ID, 리비전, 브랜치)
  • 사용되는 의존관계
  • 환경 변수
  • 패키지 설치

아티팩트 및 패키지

아티팩트와 패키지는 본질적으로 다른 것을 의미합니다.아티팩트는 단순히 파일(JAR, WAR, DLL, RPM 등)의 출력 또는 집합이며 이러한 파일 중 하나에 메타데이터(예: POM 파일)가 포함될 수 있습니다.반면 패키지는 잘 정의된 형식의 단일 아카이브 파일입니다(예:패키지 유형에 적합한 파일을 포함하는 NuGet).DLL, PDB).[31]많은 아티팩트가 빌드에서 발생하지만 다른 유형도 중요합니다.패키지는 기본적으로 라이브러리 또는 애플리케이션 [32]중 하나입니다.

소스 파일에 비해 바이너리 아티팩트는 크기가 큰 경우가 많고 스냅샷이나 야간 빌드 등의 드문 경우를 제외하고는 삭제 또는 덮어쓰기가 거의 없으며 ID, 패키지 이름, 버전, 라이센스 등의 메타데이터가 많이 수반됩니다.

메타데이터

메타데이터는 이진 아티팩트를 설명하고 아티팩트 자체와 별도로 저장 및 지정되며 여러 가지 추가 용도로 사용될 수 있습니다.다음 표에서는 일반적인 메타데이터 유형과 그 용도를 보여 줍니다.

메타데이터 유형 사용처
사용 가능한 버전 자동 업그레이드 및 다운그레이드
의존 관계 현재 아티팩트가 종속된 다른 아티팩트 지정
다운스트림 의존관계 현재 아티팩트에 종속된 다른 아티팩트 지정
면허증. 법령 준수
구축일시 트레이서빌리티
문서 IDE에서 상황에 맞는 문서를 오프라인에서 사용할 수
승인정보 트레이서빌리티
측정 기준 코드 적용 범위, 규칙 준수, 테스트 결과
사용자가 작성한 메타데이터 커스텀 리포트 및 프로세스

「 」를 참조해 주세요.

레퍼런스

  1. ^ ITMWEB: Wayback Machine에서 2007년 10월 14일 아카이브된 컴퓨터 바이러스 대책
  2. ^ "JFrog Artifactory - wikieduonline".
  3. ^ "Artifactory - Universal Artifact Management".
  4. ^ "Nexus Repository Software Component Management".
  5. ^ "The Haskell Cabal Overview". www.haskell.org. Retrieved 2019-03-25.
  6. ^ "Maven – Welcome to Apache Maven". maven.apache.org. Retrieved 2019-03-25.
  7. ^ "Julia Package Listing". pkg.julialang.org. Retrieved 2019-03-25.
  8. ^ "Quicklisp beta". www.quicklisp.org. Retrieved 2019-03-25.
  9. ^ karann-msft. "NuGet Package Manager UI Reference". docs.microsoft.com. Retrieved 2019-03-25.
  10. ^ "npm". www.npmjs.com. Retrieved 2019-03-25.
  11. ^ "Installing Perl Modules - www.cpan.org". www.cpan.org. Retrieved 2019-03-25.
  12. ^ Leisch, Friedrich. "Creating R Packages: A Tutorial" (PDF).
  13. ^ Graves, Spencer B.; Dorai-Raj, Sundar. "Creating R Packages, Using CRAN, R-Forge, And Local R Archive Networks And Subversion (SVN) Repositories" (PDF).
  14. ^ "The Comprehensive R Archive Network". cran.r-project.org. Retrieved 2019-03-25.
  15. ^ "R Installation and Administration". cran.r-project.org. Retrieved 2019-03-25.
  16. ^ Wickham, Hadley; Bryan, Jenny. "Package structure and state". R Packages. O'Reilly.
  17. ^ Decan, Alexandre; Mens, Tom; Claes, Maelick; Grosjean, Philippe (2015). "On the Development and Distribution of R Packages: An Empirical Analysis of the R Ecosystem". Proceedings of the 2015 European Conference on Software Architecture Workshops - ECSAW '15: 1–6. doi:10.1145/2797433.2797476. S2CID 1680582.
  18. ^ a b "RubyGems.org your community gem host". rubygems. Retrieved 2022-02-03.
  19. ^ "Bundler: The best way to manage a Ruby application's gems". bundler.io. Retrieved 2022-02-03.
  20. ^ a b "The Cargo Book". Documentation. Rust Programming Language. Retrieved 2019-08-26.
  21. ^ "Rust Package Registry". crates.io. Retrieved 2019-08-26.
  22. ^ "List of Top Repositories by Programming Language". Stack Overflow. Retrieved 2010-04-14.
  23. ^ "npm About". www.npmjs.com. Retrieved 2019-11-21.
  24. ^ developers, The pip, pip: The PyPA recommended tool for installing Python packages., retrieved 2019-11-21
  25. ^ "Apt - Debian Wiki". wiki.debian.org. Retrieved 2019-11-22.
  26. ^ "Homebrew". Homebrew. Retrieved 2019-11-22.
  27. ^ "Yelp launches Yelp Fusion, Microsoft creates Vcpkg tool, and the new Touch Sense SDK for Android developers". SD Times. September 20, 2016.
  28. ^ "Microsoft's C++ library manager now available for Linux and macOS". SD Times. April 25, 2018.
  29. ^ Chinthaguntla, Keerthi. "Linux package management with YUM and RPM". Enable Sysadmin. Retrieved 2021-04-11.
  30. ^ "pacman - ArchWiki". wiki.archlinux.org. Retrieved 2021-04-11.
  31. ^ Chris, Tucker (2007-03-15). "Optimal Package Install/Uninstall Manager" (PDF). UC San Diego: 1. Retrieved 2011-09-14. {{cite journal}}:Cite 저널 요구 사항 journal=(도움말)
  32. ^ "Linux repository classification schemes". braintickle.blogspot.com. 13 January 2006. Retrieved 2008-03-01.