Engineering
NCR 이미지 보호/정리 기능 소개
2022년 8월 18일
원문에서 보기 ↗컨테이너 레지스트리는 많은 컨테이너 이미지를 저장할 수 있습니다. 대부분의 이미지는 시간이 지남에 따라 필요하지 않거나 다른 버전의 이미지로 대체될 수 있습니다. 불필요한 이미지가 사용하는 저장 공간을 확보하기 위해 사용자가 직접 삭제하는 것은 번거로운 작업입니다.
이러한 불편함을 해소하기 위해 NCR(NHN Container Registry)에서는 이미지 정리 기능과 이미지 보호 기능이 새롭게 추가되었습니다. 이미지 정리 기능을 이용하여 더 이상 사용하지 않는 아티팩트를 주기적으로 정리할 수 있습니다. 이미지 보호 기능을 이용하면 삭제되거나 변경되지 않아야 하는 아티팩트를 보호할 수 있습니다. 이미지 정리 기능과 이미지 보호 기능의 설정은 다이제스트에 매핑된 태그를 이용하기에 직관적으로 설정할 수 있습니다.
이미지 정리 기능
NCR(NHN Container Registry)에서 새롭게 추가된 이미지 정리 기능은 사용자가 설정한 정리 정책으로 불필요한 이미지를 정리할 수 있습니다.
특징
NCR에서 제공하는 이미지 정리 기능의 특징은 다음과 같습니다.
- 이미지 정리 정책을 적용할 대상 이미지를 설정할 수 있습니다.
- 이미지 정리 정책에서 제외하지 않은 모든 태그나 아티팩트는 삭제됩니다.
- 가장 최근에 Pull/Push 하거나 Pull/Push 한 날짜를 이용하여 이미지 정리 정책을 설정할 수 있습니다.
- 이미지 정리 정책은 레지스트리 당 15개까지 설정할 수 있습니다.
- 이미지 정리 히스토리는 최근 50개까지 조회할 수 있습니다.
- 이미지 정리 정책은 OR 논리를 사용합니다.
- 정리 정책에 대한 우선순위는 없으며, 규칙은 백그라운드에서 동시에 실행되고 각 정책의 결과를 집계하여 결과를 보여줍니다.
정리 정책 설정
이미지 정리 정책을 사용하려면 NCR 콘솔에서 정리 정책을 추가해야 합니다. NCR 콘솔에서 정리 정책을 적용할 레지스트리를 선택합니다. 레지스트리 선택 후 이미지 정리 탭으로 이동하면 현재 설정된 정리 정책 목록을 확인할 수 있습니다. 
새로운 정리 정책을 설정하기 위해 [정리 정책 추가] 버튼을 클릭합니다. 정리 정책 모달창에서 필요한 정보를 입력하여 새로운 정책을 생성할 수 있습니다. 정리 정책에는 순차적으로 적용되는 3개의 필터가 있습니다.
- 이미지: 정리 정책을 적용할 이미지를 설정합니다. 전체 이미지를 대상으로 하거나 특정 이름, 와일드카드(예: *repo, repo* 및 **)에 매칭되는 이미지를 지정할 수 있습니다. 이 단계에서 지정되지 않은 이미지에 대한 정리 작업은 수행되지 않습니다.
- 아티팩트: 정리 정책을 적용할 태그를 설정합니다. 전체 아티팩드를 대상으로 하거나 특정 태그 이름, 와일드카드(예: *repo, repo* 및 **)를 사용할 수 있습니다.
- 정리 정책: 가장 최근에 Pull/Push 하거나 Pull/Push 한 날짜를 지정하여 보유할 이미지 개수를 설정합니다.
정리 정책은 5가지 옵션 중에 하나를 선택합니다. 각 옵션에 대한 설명은 다음과 같습니다.
- 해당 아티팩트는 모두 제외하고 정리: 이 정리 정책이 적용된 아티팩트는 항상 유지합니다.
- 가장 최근에 Pull 한 n 개의 아티팩트는 제외하고 정리: 가장 최근에 다운로드(Pull)한 이미지 순서대로 유지합니다.
- 가장 최근에 Push 한 n 개의 아티팩트는 제외하고 정리: 가장 최근에 저장(Push)한 이미지 순서대로 유지합니다.
- Pull 한 날짜가 n 일인 아티팩트는 제외하고 정리: 이 기간에 다운로드(Pull)한 이미지만 보관합니다.
- Push 한 날짜가 n 일인 아티팩트는 제외하고 정리: 이 기간에 저장(Push)한 이미지만 보관합니다.
이 문서에서는 이름이 postgres인 이미지를 대상으로 태그 이름이 v2에 해당하는 아티팩트 중 가장 최근에 Pull 한 15개의 아티팩트를 제외하고 정리하는 정책을 추가합니다. 
새롭게 추가한 정책은 이미지 정리 정책 목록에서 확인할 수 있습니다. 
사용 예 1
- NCR 레지스트리에 3개의 이미지(A~C)가 있습니다.
- 이미지 A는 10개의 아티팩트가 있으며 모두 지난 주에 다운로드한 이력이 있습니다.
- 이미지 B, C는 각각 5개의 아티팩트가 있으며 모두 다운로드한 이력이 없습니다.
- 이미지 정리 정책 추가에서 대상 이미지는 전체 이미지로 선택합니다.
- 대상 아티팩트는 전체 아티팩트로 선택합니다.
- 가장 최근에 다운로드(Pull)한 8개의 아티팩트는 제외하고 정리하도록 정리 정책을 설정합니다.
위에서 설정한 정리 정책으로 실행하면 이미지 A는 8개의 아티팩트가 남아있고, 이미지 B와 C는 5개 아티팩트가 모두 유지됩니다. 즉, 정리 정책은 이미지 A에서 C까지 모든 이미지 중 가장 최근에 다운로드한 8개의 아티팩트를 선택하는 것이 아닌 각각의 이미지에서 8개의 아티팩트를 유지합니다.
사용 예 2
이 예에서는 1과 동일한 레지스트리와 이미지를 사용하지만, 지난 7일 동안 다운로드(Pull)한 아티팩트를 제외하고 정리하도록 정리 정책을 설정합니다. 이 경우 이미지 A의 모든 아티팩트는 지난 주에 다운로드한 이력이 있기 때문에 유지되지만, 이미지 B와 C의 아티팩트는 다운로드한 이력이 없기 때문에 모두 삭제됩니다.
정리 실행
이미지 정리를 주기적으로 실행하도록 설정하거나 즉시 실행할 수 있습니다. 실제로 이미지 정리를 수행하기 전에 설정한 정리 정책이 기대한 동작으로 실행되는지 확인할 수 있습니다. [테스트 실행] 버튼을 클릭하여 테스트를 실행합니다. 
실행한 결과는 히스토리 조회 탭에서 확인할 수 있습니다. 히스토리를 클릭하여 정리 정책 조건으로 수행된 이미지들의 삭제 전 아티팩트 수와 삭제 후 아티팩트 수를 확인할 수 있습니다. 기대한 결과와 테스트 실행 결과가 부합하지 않다면 정리 정책을 추가하거나 삭제합니다. 
정리 정책은 [지금 실행] 버튼을 클릭하여 즉시 실행할 수 있습니다. 
또한, 정리 주기를 설정하여 주기적으로 이미지 정리를 실행할 수 있습니다. [정리 주기 설정] 버튼을 클릭합니다. 정리 주기 설정 모달창에서 실행 방법을 자동 실행으로 선택하고 반복 주기를 Cron 표현식으로 설정합니다. 이 문서에서는 UTC를 기준으로 매일 12시 30분에 정리를 실행하도록 Cron 표현식에 30 12 * * * 를 입력합니다. 
정리 실행 결과는 히스토리에서 확인할 수 있습니다.
히스토리
NCR에서는 이미지 정리가 실행된 이력을 확인할 수 있도록 히스토리를 제공합니다. 사용자는 이미지 정리가 실행된 방식, 정리 시작 시각, 정리 진행 시간 및 상태를 확인할 수 있습니다. 
이미지 정리 수행 결과에 대한 상세 정보를 확인하기 위해 히스토리 중 하나를 클릭합니다. 히스토리 상세 보기 모달창에서는 정리 대상 이미지, 삭제 전 아티팩트 수, 삭제 후 아티팩트 수, 정리 수행 시간, 로그를 볼 수 있습니다. 
이미지 보호 기능
기본적으로 NCR(NHN Container Registry)에서는 동일한 태그를 갖는 이미지를 레지스트리에 저장(Push)할 수 있습니다. 동일한 태그의 이미지를 저장(Push)하면 태그는 새로운 이미지를 가리키고 이전에 태그를 사용했던 이미지는 태그가 없는 이미지가 됩니다. 이는 태그와 이미지 다이제스트가 매핑되지 않기 때문입니다. 태그 변경은 이미지 버전을 식별하기 어렵게 하므로 동일한 태그로 이미지를 저장(Push)하는 것은 바람직하지 않을 수 있습니다.
또한, 사용 중인 이미지를 정리할 때 태그를 삭제하면 동일한 다이제스트를 가리키는 다른 모든 태그가 삭제되는 상황이 발생할 수 있습니다.
중요한 이미지가 삭제되는 것을 방지하기 위해 NCR에서는 이미지 보호 기능을 제공합니다. 이미지 보호 기능을 이용하면 보호 정책으로 설정한 태그와 일치하는 경우, 이미지를 저장(Push)할 수 없도록 설정하여 기존 이미지를 덮어쓰는 것을 방지할 수 있습니다. 또한, 보호 정책으로 설정한 태그와 지정된 이미지는 삭제할 수 없으며 태그를 변경할 수 없도록 설정하여 이미지의 신뢰성을 높일 수 있습니다.
특징
NCR에서 제공하는 이미지 보호 기능의 특징은 다음과 같습니다.
- 이미지 보호 정책을 적용할 대상 이미지와 아티팩트를 설정할 수 있습니다.
- 이미지 보호 정책으로 설정한 태그는 삭제, 변경할 수 없습니다.
- 이미지 보호 정책으로 설정한 태그와 동일한 태그를 갖는 이미지는 저장(Push), 삭제할 수 없습니다.
- 이미지 보호 정책은 OR 논리를 사용합니다. 여러 정책을 설정하고 태그가 정책 중 하나라도 일치하면 보호 정책이 적용됩니다.
- 이미지 보호 정책은 개별적으로 활성화하거나 비활성화할 수 있습니다.
보호 정책 설정
이미지 보호 정책을 사용하려면 NCR 콘솔에서 이미지 보호 정책을 추가해야 합니다. NCR 콘솔에서 이미지 보호 정책을 적용할 레지스트리를 선택합니다. 레지스트리 선택 후 이미지 보호 탭으로 이동하면 현재 설정된 이미지 보호 정책 목록을 확인할 수 있습니다. 
새로운 보호 정책을 설정하기 위해 [보호 정책 추가] 버튼을 클릭합니다. 보호 정책 모달창에서 필요한 정보를 입력하여 새로운 정책을 생성할 수 있습니다. 이 문서에서는 이미지 이름이 postgres와 일치하는 이미지 중에서 태그 이름이 v2에 해당하는 아티팩트를 변경할 수 없는 정책을 추가합니다. 
새롭게 추가한 정책은 이미지 보호 정책 목록에서 확인할 수 있습니다. 이미지 보호 정책은 OR 논리를 사용하며, 태그가 정책 중 하나라도 일치하면 보호 정책이 적용됩니다. 보호 정책은 활성화 버튼을 이용하여 개별적으로 활성화하거나 비활성화할 수 있습니다. 
마치며
NCR의 이미지 정리 기능과 이미지 보호 기능에 대해서 알아보았습니다. 두 기능을 정리하면 아래와 같습니다.
이미지 정리 기능
- 이미지 정리 정책을 설정하여 주기적으로 불필요한 이미지를 삭제할 수 있습니다.
- 가장 최근에 Pull/Push 하거나 Pull/Push 한 날짜를 이용하여 이미지 정리 정책을 설정할 수 있습니다.
- 이미지 정리 작업 히스토리를 확인할 수 있습니다.
이미지 보호 기능
- 이미지 보호 정책을 설정하여 기존 이미지를 덮어쓰거나 삭제되는 것을 방지합니다.
- 태그를 변경할 수 없도록 설정하여 이미지의 신뢰성을 높일 수 있습니다.