Clojure CLI: 용어집

Clojure CLI: 용어집 (Glossary)

이 페이지는 Clojure 의존성 시스템 전반에서 쓰이는 용어들을 정의해요.

출처: Clojure CLI Reference - Glossary

본문

라이브러리 (Library)

어떤 문제를 해결하는 Clojure 또는 다른 코드의 컬렉션으로, 단일 디렉터리 루트 아래 관리돼요. 전형적(그러나 배타적이지 않은) 사용에서, 대부분의 GitHub 저장소는 단일 라이브러리를 보유해요. 각 라이브러리는 구별되는 네임스페이스화된 이름을 가져요 — Maven에서는 group-id/artifact-id로 결정돼요.

아티팩트 (Artifact)

시간의 한 지점에서 라이브러리의 상태를 포착하는, 아마 어떤 빌드 과정을 거쳐, 버전으로 표시되고, 의존성을 문서화하는 어떤 매니페스트를 포함하며, 예컨대 jar 안에 패키징된 컨테이너 파일로 출시된 라이브러리.

좌표 (Coordinate)

사용을 위해 선택된 라이브러리의 특정 버전으로, 라이브러리를 얻고 사용하기에 충분한 정보를 담고 있어요.

의존성 (Dependency)

프로젝트/라이브러리 레벨의 표현으로, 선언하는 라이브러리가 자신의 어떤 기능을 제공하기 위해 선언된 라이브러리가 필요함을 나타내요. 최소한 라이브러리 이름을 지정해야 하며, 버전과 다른 속성도 지정할 수 있어요. 실제(기능적) 의존성은 더 세분화돼요.

의존성 타입:

  • Maven 아티팩트 (아티팩트 기반)
  • Git 라이브러리 (소스 기반)
  • 로컬 라이브러리 (소스 기반) — 로컬 디렉터리
  • 로컬 아티팩트 (아티팩트 기반) — 로컬 jar 파일

클래스패스 (Classpath) (그리고 루트/경로들, roots/paths)

런타임에 require/import 검색의 루트 경로를 형성할 로컬 '장소'(파일시스템 디렉터리 및/또는 jar)의 순서 있는 목록으로, 의미를 제어하는 Java에 인자로 제공돼요. 우리는 클래스패스의 순서 의존성을 지양하도록 권장하는데, 그것은 네임스페이스나 리소스 파일이 중복(따라서 아마 깨졌을)되었음을 의미하기 때문이에요.

확장 (Expansion)

루트 의존성 집합이 주어지면, 전이 의존성 집합의 완전한 클로저.

해석 (Resolution)

루트 의존성 컬렉션과 추가 수정이 주어지면, 완전히 확장된 의존성 트리를 만들고, 그다음 언급된 각 라이브러리에서 모든 의존자를 충족시킬 단일 버전으로의 매핑과 그 소스나 아티팩트의 로컬 경로를 만들어내요. 각 항목에 그 의존자들도 포함할 거예요. 충돌은 라이브러리가 라이브러리의 서로 다른 메이저 버전에 의존할 때만 발생해요.

버전 (Version)

해석이 규칙에 의해 결정되는 인간-이해 숫자 체계로, 종종 x.y.z예요. 한 인기 있는 체계는 "시맨틱 버저닝" aka "semver"로, 각 레벨의 변화에 의미를 부여하는데, 예: 첫 메이저 숫자의 변화는 파괴적 변화를 나타내요.

버전 차이 (Version difference)

의존성 확장이 같은 라이브러리에서 한 개 이상의 "버전"을 지정했지만 (숫자나 sha 등에 의한) 상대적 순서가 있을 때 발생해요. 그 관계가 확립될 수 있을 때 "더 나중"(later) 또는 "가장 새로운"(newest) 버전을 선택해 버전 차이를 해결할 수 있어요.

버전 충돌 (Version conflict)

의존성 확장이 같은 라이브러리에서 한 개 이상의 "버전"을 지정해 최선의 선택이 자동으로 결정될 수 없을 때 버전 충돌이 발생해요:

  • semver 버전 파손 (메이저 버전 변경)
  • 어떤 공통 루트나 조상도 포함하지 않는 github sha들 (예: 서로 다른 브랜치나 관련 없는 저장소의 두 sha)
  • 어떤 상대 관계도 확립할 수 없도록 서로 다른 저장소나 저장소 타입을 가로지르는 버전

Maven 저장소 (Maven Repo)

라이브러리 아티팩트의 저장소 — 예: Maven central 또는 Clojars.

더 알아보기