태그
태그는 짧은 이름입니다. 버전관리와 컨테이너 이미지와 마크업과 분류 메타데이터, 네 자리가 이 낱말을 각자의 뜻으로 씁니다. 네 자리가 공유하는 것은 짧은 이름이라는 것 하나뿐입니다. 같은 낱말을 주고받으면서 서로 다른 물건을 떠올린 채 이야기가 흘러가기 쉬운 말입니다.
상세
네 자리가 공유하는 뼈대는 짧은 이름이라는 것 하나입니다. OCI(Open Container Initiative) 배포 명세는 사람이 읽을 수 있다는 말을 태그의 정의 안에 아예 넣어 둡니다. 갈리는 자리는 그 이름이 무엇을 겨누는가입니다.
버전관리와 컨테이너 이미지에서 태그는 포인터입니다. Git 용어집은 태그를 refs/tags/ 이름공간 아래에 놓인 ref 라고 적습니다. 임의의 타입을 가진 객체를 가리킵니다. 대체로 태그 객체나 커밋 객체를 가리킨다고 덧붙입니다. OCI 배포 명세는 태그를 매니페스트를 가리키는 맞춤 포인터라고 적습니다.
분류 메타데이터에서 태그는 포인터가 아니라 레이블입니다. AWS(Amazon Web Services) 문서는 태그를 자원을 정리하는 메타데이터 노릇을 하는 키와 값의 쌍이라고 적습니다. 태그가 대상을 겨누는 것이 아니라 대상에 얹힙니다.
마크업에서는 뼈대 자체가 깨집니다. 태그가 아무것도 겨누지 않습니다. WHATWG(Web Hypertext Application Technology Working Group) 의 HTML(HyperText Markup Language) 표준은 태그가 마크업 안에서 요소의 시작과 끝을 구분하는 데 쓰인다고 적습니다. <p> 와 </p> 라는 문자열 자체가 태그입니다. 대상에 붙는 이름표가 아니라 문서 텍스트의 일부입니다.
맺어지는 수도 자리마다 다릅니다. Git 태그 하나는 객체 하나를 가리킵니다. OCI 명세는 반대 방향까지 적어 둡니다. 하나의 매니페스트 다이제스트를 참조하는 태그가 없을 수도, 하나일 수도, 여럿일 수도 있습니다. 분류 메타데이터 쪽은 태그 하나가 다시 태그 키와 태그 값 두 부분으로 나뉩니다.
이 갈림은 문서 자신도 의식합니다. Git 용어집은 Git 태그가 Lisp 태그와 아무 상관이 없다고 따로 못 박습니다. Lisp 의 그것은 Git 의 맥락이라면 객체 타입이라고 불렀을 것이라고 덧붙입니다.
어느 뜻이 원래 뜻인지는 이 문서들이 적지 않습니다. 태그라는 말만으로는 무엇을 가리키는지가 정해지지 않습니다. 맥락 이름을 먼저 대야 뜻이 섭니다.
맥락별 뜻
| 맥락 | 뜻 | 출처 |
|---|---|---|
| 버전관리 | refs/tags/ 아래에 놓여 객체 하나를 가리키는 ref |
Git 문서 git-tag · gitglossary |
| 컨테이너 이미지 | 저장소 안에서 매니페스트를 가리키는, 사람이 읽을 수 있는 맞춤 포인터 | OCI Distribution Spec 정의 절 · Docker docker image tag 레퍼런스 |
| 마크업 | 요소의 시작과 끝을 문서 안에서 구분하는 마크업 조각 | WHATWG HTML Standard 13.1.2 · MDN 용어집 Tag |
| 분류 메타데이터 | 자원에 붙여 정리하는 키와 값의 쌍 | AWS Tagging AWS resources |
버전관리
git-tag 문서는 이 명령이 refs/tags/ 에 태그 참조를 추가한다고 적습니다. -d · -l · -v 로 지우거나 나열하거나 검증하는 경우만 예외입니다. -f 를 주지 않으면 그 이름의 태그가 아직 없어야 합니다.
태그는 두 갈래로 갈립니다. -a · -s · -u <key-id> 중 하나를 주면 명령이 태그 객체를 만들고 태그 메시지를 요구합니다. 그렇지 않으면 주어진 객체를 직접 가리키는 태그 참조가 만들어집니다. 앞쪽이 주석 달린 태그, 뒤쪽이 경량 태그입니다.
flowchart TD
R1["경량 태그"] --> C["커밋 객체"]
R2["주석 달린 태그"] --> T["태그 객체"]
T --> C
태그 객체 안에는 생성 날짜, 태그를 붙인 사람의 이름과 전자우편, 태그 메시지, 그리고 선택적인 암호 서명이 들어갑니다. 서명이 붙은 것을 서명된 태그 객체라고 부릅니다. 경량 태그는 객체에 붙은 이름일 뿐입니다. git-tag 문서는 주석 달린 태그가 릴리스를 겨냥한 것이고 경량 태그는 사적이거나 임시인 객체 레이블을 겨냥한 것이라고 적습니다. 그래서 객체 이름을 다루는 일부 Git 명령은 경량 태그를 기본적으로 무시한다고 덧붙입니다. git describe 를 예로 듭니다.
태그는 저절로 움직이지 않습니다. Git 용어집은 head 와 달리 태그가 커밋 명령으로 갱신되지 않는다고 적습니다. 태그를 커밋 조상 사슬의 특정 지점을 표시하는 데 가장 흔히 쓴다고 덧붙입니다.
사람이 옮기는 경우는 문서가 한 절을 따로 들여 다룹니다. 아직 아무것도 내보내지 않았다면 -f 로 그냥 다시 붙이면 끝입니다. 이미 내보냈다면 남들이 옛 태그를 이미 봤습니다. 문서는 제정신인 쪽으로 다른 이름을 쓰는 것을 듭니다. 같은 이름을 고집하는 쪽은 제정신이 아닌 쪽이라고 적습니다. 그러면서 Git 이 사용자 모르게 태그를 바꾸지 않으며 그래서도 안 된다고 못 박습니다. 누군가 이미 옛 태그를 받았다면 그쪽에서 git pull 을 한다고 해서 옛 태그를 덮어쓰게 되어서는 안 됩니다. 문서는 그 이유로 사람들이 자기 태그 이름을 믿을 수 있어야 한다는 점을 듭니다.
컨테이너 이미지
OCI 배포 명세는 자주 쓰는 낱말을 정의 절에 모아 둡니다. 레지스트리는 이 명세가 정한 API(Application Programming Interface, 응용 프로그램 인터페이스)를 다루는 서비스입니다. 리포지토리는 매니페스트 · 블롭 · 태그를 포함한 콘텐츠 모음에 걸리는 API 호출의 범위입니다. 매니페스트는 매니페스트 엔드포인트로 올리는 JSON(JavaScript Object Notation) 문서입니다. 다이제스트는 블롭 내용의 암호 해시로 만든 고유 식별자입니다. 태그는 매니페스트를 가리키는, 사람이 읽을 수 있는 맞춤 포인터입니다.
명세는 반대 방향도 적습니다. 하나의 매니페스트 다이제스트를 참조하는 태그가 없을 수도, 하나일 수도, 여럿일 수도 있습니다.
flowchart TD
T1["태그 latest"] --> M["매니페스트"]
T2["태그 2.0"] --> M
D["다이제스트"] --> M
매니페스트를 받는 요청 경로는 /v2/<name>/manifests/<tag-or-digest> 꼴입니다. <name> 은 리포지토리의 이름공간을 가리킵니다. <tag-or-digest> 자리에는 매니페스트의 다이제스트 아니면 태그가 들어가야 합니다. 명세는 다른 어떤 형식도 안 된다고 적습니다. 태그로 쓰는 값은 128자를 넘지 않아야 하고 정규식 [a-zA-Z0-9_][a-zA-Z0-9._-]{0,127} 에 맞아야 합니다.
Docker 문서는 이 이름이 실제 참조 문자열의 어느 칸에 들어가는지를 적습니다. 이미지 참조는 [HOST[:PORT]/]NAMESPACE/REPOSITORY[:TAG] 꼴입니다. 태그는 이미지의 특정 버전이나 변형을 지정하는 선택적 식별자입니다. 태그를 주지 않으면 Docker 는 latest 로 기본값을 잡습니다. example.com:5000/team/my-app:2.0 에서 호스트는 example.com, 포트는 5000, 이름공간은 team, 리포지토리는 my-app, 태그는 2.0 입니다. docker image tag 명령은 원본 이미지를 가리키는 대상 태그를 만듭니다.
마크업
WHATWG HTML 표준은 요소가 여섯 갈래라고 적습니다. void 요소 · template 요소 · raw text 요소 · escapable raw text 요소 · foreign 요소 · 일반 요소입니다. 태그는 그 요소들의 시작과 끝을 마크업 안에서 구분하는 데 쓰입니다.
시작 태그의 첫 글자는 < 입니다. 그 다음 몇 글자가 요소의 태그 이름입니다. 마지막은 > 로 닫습니다. 끝 태그의 꼴도 같습니다. 두 번째 글자가 / 라는 점만 다릅니다.
모든 요소가 태그 둘을 갖지는 않습니다. raw text 요소 · escapable raw text 요소 · 일반 요소는 시작하는 자리를 알리는 시작 태그와 끝나는 자리를 알리는 끝 태그를 가집니다. void 요소는 시작 태그만 가집니다. void 요소에 끝 태그를 지정해서는 안 됩니다. foreign 요소는 시작 태그와 끝 태그를 가지거나, 자기 닫음으로 표시된 시작 태그를 가져야 합니다. 뒤쪽이면 끝 태그를 가져서는 안 됩니다. 일부 일반 요소는 시작 태그와 끝 태그를 생략할 수 있습니다. 생략할 수 없는 것은 생략해서는 안 됩니다.
MDN(Mozilla Developer Network) 용어집은 HTML 에서 태그가 요소를 만드는 데 쓰인다고 적습니다. HTML 요소의 이름은 그 요소의 시작 태그 맨 앞과 끝 태그 안에 나타나는 이름입니다. <p> 시작 태그와 </p> 끝 태그에 있는 p 가 HTML 문단 요소의 이름입니다. 끝 태그의 요소 이름 앞에는 빗금이 옵니다. void 요소에서는 끝 태그가 요구되지도 허용되지도 않습니다.
분류 메타데이터
AWS 문서는 태그를 자원을 정리하는 메타데이터 노릇을 하는 키와 값의 쌍이라고 적습니다. 대부분의 AWS 자원에서는 자원을 만들 때 태그를 붙이는 선택지가 있습니다.
태그 하나는 두 부분으로 이루어집니다. 태그 키와 태그 값입니다. 키의 예로 CostCenter · Environment · Project 를 듭니다. 값의 예로 111122223333 · Production 을 듭니다. 키도 값도 대소문자를 구분합니다.
태그는 자원을 관리하고 식별하고 정리하고 검색하고 걸러 내는 데 도움이 됩니다. 목적 · 소유자 · 환경 같은 기준으로 자원을 분류하도록 태그를 만들 수 있습니다. IAM(Identity and Access Management) 정책 안에서 태그를 써서 누가 자원을 보고 다룰 수 있는지 통제하는 방법도 문서가 따로 안내합니다.
문서는 여기에 경고를 붙입니다. 개인 식별 정보나 그 밖의 기밀 · 민감 정보를 태그에 담지 말라고 적습니다. AWS 가 청구와 관리 서비스를 제공하는 데 태그를 쓰기 때문입니다. 태그는 사적이거나 민감한 데이터를 담으라고 만든 것이 아니라고 적습니다.
경계
화면에 문단 하나를 만드는 그 물건을 실무에서는 「p 태그」라고 부릅니다. 그렇게 부를 때 태그라는 말이 가리키는 것이 그 문단인가. 아닙니다. 명세 어휘에서 태그와 요소는 다른 것입니다.
근거는 WHATWG HTML 표준에 있습니다. 태그는 마크업 안에서 요소의 시작과 끝을 구분하는 데 쓰인다고 적습니다. 태그가 요소 자체는 아닙니다. 요소의 경계를 표시하는 자리에 놓이는 문자열입니다. MDN 용어집도 같은 선을 긋습니다. <p> 시작 태그와 </p> 끝 태그에 있는 p 는 HTML 문단 요소의 이름입니다. 이름은 요소의 것이고 태그는 그 이름이 나타나는 자리입니다.
선이 실제로 드러나는 자리가 void 요소입니다. WHATWG 표준은 void 요소가 시작 태그만 가진다고 적습니다. void 요소에 끝 태그를 지정해서는 안 됩니다. area · base · br · col · embed · hr · img · input · link · meta · source · track · wbr 가 그 목록입니다. 요소는 있습니다. 끝 태그는 없습니다. 일반 요소 쪽도 마찬가지입니다. 표준은 일부 일반 요소의 시작 태그와 끝 태그를 생략할 수 있다고 적습니다. 태그가 문서에 적혀 있지 않아도 요소는 있습니다.
관련 항목
이것이 속하는 상위 분류
버전관리 · 컨테이너 이미지 · 마크업 · 분류 메타데이터 · ref · 메타데이터
이것의 하위 종류
태그 객체 · 경량 태그 · 주석 달린 태그 · 서명된 태그 객체 · 시작 태그 · 끝 태그 · 자기 닫음 태그
이것이 가리키는 대상
커밋 · 태그 객체 · 매니페스트
이것이 놓이거나 오가는 저장소·경로
레지스트리 · 리포지토리 · 이름공간 · 이미지 참조 · API · Docker Hub · 블롭 · 커밋에서 배포까지
이것을 정의하는 표준·문서
Git · OCI · WHATWG · HTML · AWS · MDN
이것을 이루는 구성 요소
태그 키 · 태그 값 · PGP 서명(Pretty Good Privacy) · 태그 이름
이것을 다루는 명령
git describe · git pull · docker image tag
이것과 맞세워지는 대립 개념
head · Lisp 태그
이것이 나타나는 방식을 가르는 요소 종류
요소 · void 요소 · foreign 요소
이것에 적용되는 규칙·원칙
접근 제어 · 개인 식별 정보
이것을 대신할 수 있는 다른 수단
다른 이름: tag