Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

Linter 규칙 참조

규칙은 Foundry 내부 메타데이터 저장소에서 모은 리소스 정보를 평가합니다. 조건에 해당하면 조치 방법을 추천하며 각 규칙은 특정 모드에 속합니다.

Resource Savings의 절감액은 우선순위용 추정입니다. 업무에 맞지 않는 전제가 있을 수 있으므로 실제 감소는 Resource Management로 확인합니다. 아래에서 지난달 사용량은 직전 달력월을 뜻합니다. 예를 들어 6월 21일에 계산하면 5월 1일부터 31일까지를 사용합니다. 최근 일주일, 최근 30일과는 다른 구간입니다.

Code workbook pipeline crosses schedules

Code Workbook으로 빌드하는 바로 아래 데이터셋이 같은 일정에 있지 않을 때 탐지합니다. 같은 일정의 Workbook 변환은 이미 준비된 Spark 모듈을 재사용하고 디스크에서 구체화 데이터를 다시 읽는 작업을 줄일 수 있습니다.

직접 하위 Workbook 변환을 같은 일정으로 옮기는 방안을 검토합니다. 절감량은 관측 시험에서 얻은 휴리스틱으로 데이터셋 읽기 시간을 추정한 값이며 연산 환경별 실제 시간과 다를 수 있습니다.

Dataset build time exceeds threshold

최근 7일 동안 이 리소스의 작업이 실행 중이었던 시간 비율이 70%를 넘으면 탐지합니다. 짧은 작업의 빈번한 실행과 긴 작업 모두 해당될 수 있습니다.

빌드 빈도를 줄이거나 성능을 개선할 여지가 있는지 조사합니다. 추정에 사용하는 기준 사용량은 지난달 전체 리소스 사용량입니다.

Dataset code out of date

데이터셋 JobSpec 커밋이 저장소 master의 최신 커밋과 다르면 빌드가 최신 로직을 반영하지 않을 수 있습니다. 해당 데이터셋을 일정에서 제거하거나 변환 로직을 master에 다시 커밋하여 의도한 코드와 연결합니다.

Dataset has a filtered projection

규칙 이름과 달리 탐지 조건은 Contour 대시보드의 시작 증분 데이터셋 중 필요한 프로젝션이 없는 경우입니다. 반복 필터 계산을 줄여 대시보드를 더 빨리 채우려는 추천입니다.

대시보드 사용량과 중요성, 필터 열의 순서를 확인합니다. 플랫폼 인스턴스에서 데이터셋 프로젝션을 활성화하고 표시된 열 순서의 필터에 맞춰 기반 데이터셋의 프로젝션을 구성합니다. 정기 갱신 일정도 설정해야 합니다.

Dataset should be view

변환 입출력 통계가 실제 로직을 적용하지 않는 복사를 나타내면 탐지합니다. Spark로 읽고 다시 쓰는 연산과 중복 저장을 줄이도록 Foundry 뷰로 바꾸는 방안을 권고합니다. 절감 추정의 기준은 지난달 리소스 사용량입니다.

Dataset should use native acceleration

변환의 @configure에 실행기 메모리 기반 프로필이 있고 아직 Velox를 사용하지 않으면 탐지합니다. Velox 백엔드 전환으로 절감할 수 있는지 검토하며 변경 후 실제 사용량을 확인해야 합니다.

Default branch unprotected

코드 저장소 기본 브랜치가 보호되지 않은 경우입니다. 변경 이력과 버전 관리 및 실수에 의한 수정을 통제하도록 저장소 설정에서 기본 브랜치를 보호 목록에 추가합니다.

Executor high memory ratio

메모리 대 코어 비율이 기본 7.5GB/core보다 높을 때 탐지합니다. 메모리와 무관한 문제에 메모리를 늘린 경우 비용이 증가할 수 있습니다. 반대로 행 수 폭증처럼 실행기 메모리를 실제로 늘려야 하는 경우에는 코어 수도 맞추어 병렬성과 파티션 크기를 개선할 수 있습니다.

EXECUTOR_MEMORY_X와 EXECUTOR_CORES_X를 맞추어 비율을 낮추는 방안을 검토합니다. 메모리 문제가 생기면 Spark 그래프에서 단계를 찾습니다. 읽기 단계는 입력 파티션 수를 늘려 실행기당 크기를 줄이고, 셔플 단계는 작업 수가 설정된 셔플 파티션보다 적은지 확인하여 ADAPTIVE_DISABLED로 적응형 쿼리 실행을 끄거나 SHUFFLE_PARTITIONS_LARGE로 더 작은 작업으로 나누는 방법을 검토합니다.

추정은 지난달 사용량이 기본 메모리/코어 비율이었다면 얼마였을지를 계산하고 실제 사용량에서 뺍니다.

Incremental append dataset too many files

증분 데이터셋의 평균 파티션이 너무 작거나 클 때 탐지합니다. 작은 파티션은 고정 처리 비용이 커지고 큰 파티션은 메모리 관리, OOM과 장시간 실행을 일으킬 수 있습니다.

파티션 크기를 확인하여 적절한 파일 크기로 저장하는 로직을 구성합니다. APPEND는 기존 출력 파일 수도 확인합니다. Python 또는 Java 변환 로직이 아닌 데이터셋은 프로젝션으로 개선할 수도 있습니다. 필터 최적화만으로 필요한 파일 압축 효과를 얻을 수 있으며 하위 조회에 따라 조인 최적화의 추가 이점도 있습니다.

절감 추정은 최근 작업의 파일 읽기 시간과 같은 크기 데이터셋의 기대 읽기 시간 비율을 구하고, 최근 일주일에 해당 입력을 읽은 하위 변환별 발생 횟수를 반영합니다.

Incremental over-provisioned cores

고정 실행기 수를 사용하는 정적 할당에서 최근 작업의 병렬성이 기본 임계값 70%보다 낮으면 탐지합니다. 유휴 실행기가 예약된 채 다른 작업을 기다리는 상황을 줄이도록 DYNAMIC_ALLOCATION_MAX_N 프로필의 동적 할당을 권고합니다.

추정은 완전한 병렬성을 가정하여 지난달 사용량 중 유휴 비율을 계산합니다. 예를 들어 최근 병렬성이 70%이면 지난달 사용량의 약 30%를 절감 후보로 봅니다.

Incremental replace dataset too many files

증분 출력 replace 모드의 파일 및 파티션 문제입니다. 기본 판단은 append 규칙과 같지만 UPDATE 트랜잭션이 파일 추가만 하는 것이 아니라 기존 파일을 수정 또는 삭제하면 프로젝션 전체 재계산이 발생하므로 프로젝션을 해결책으로 권고하지 않습니다.

Overlapping schedules

같은 데이터셋을 서로 다른 일정이 빌드하면 탐지합니다. 중복 연산, 대기열과 불안정한 지연을 줄이도록 일정의 빌드 액션을 바꿔 겹침을 제거합니다.

Repository should only allow squash and merge

저장소에 Squash and merge Git 동작이 활성화되지 않은 경우입니다. 저장소 설정에서 해당 병합 방식을 활성화합니다.

Repository upgrade blocked

열린 저장소 업그레이드 PR을 병합할 수 없으면 탐지합니다. 오래된 저장소는 새 기능을 쓰지 못하거나 시간이 지나면서 빌드 실패와 연산 낭비를 일으킬 수 있습니다. PR 병합이 막힌 원인을 확인하고 업그레이드를 수정합니다.

Repository upgrades disabled

업그레이드 PR 자동 병합을 꺼 둔 경우입니다. Fix assistant를 사용하거나 Settings > Repository > Upgrades에서 Automatically merge upgrade pull requests를 켭니다. 조직의 코드 검토 정책과 필요한 권한을 함께 적용합니다.

Schedule always fails

최근 30일에 일정이 한 번도 성공하지 않았으면 실패 데이터셋 목록을 제공합니다. 반복해서 실패를 재현하는 일정을 중지하거나 데이터셋을 수정하거나 일정에서 제외합니다. 절감 추정은 해당 브랜치에서 실패한 데이터셋의 최근 30일 연산 비용 합계입니다.

Schedule builds Code Workbook

일정 대상 데이터셋에 Code Workbook JobSpec이 있으면 탐지합니다. 운영 파이프라인은 가능한 경우 Pipeline Builder나 Code Repositories로 옮기는 것이 권장됩니다. 정기 실행이 필요하면 해당 도구로 로직을 이전합니다.

Schedule builds Contour analysis

일정 대상 데이터셋의 JobSpec이 Contour이면 탐지합니다. 정기 운영 변환은 Pipeline Builder나 Code Repositories로 옮기는 방안을 권고합니다. 절감 추정에 사용되는 값은 해당 브랜치의 실패 데이터셋에 대한 최근 30일 연산 비용 합계입니다.

Schedule builds trashed dataset

휴지통에 있는 데이터셋을 일정이 계속 빌드할 때 탐지합니다. 일정에 남은 이유를 확인하고 데이터셋을 복원하거나 일정을 갱신합니다.

Schedule does not abort on failure

abort on failure가 꺼져 있으면 탐지합니다. 이 설정이 없으면 일정 안의 데이터셋이 실패해도 모니터링이 일정 종료를 기다릴 수 있습니다. 활성화하면 실패 알림과 조치를 더 빨리 진행할 수 있습니다.

Schedule exceeded duration mode disabled

exceeded duration 모드를 사용하지 않는 일정입니다. 지속 시간 한도를 설정하면 네트워크 불안정 시 Data Connection 빌드가 무기한 실행되어 하위를 막는 상황을 줄일 수 있습니다. 일정에 해당 모드를 활성화합니다.

Schedule has no built datasets

실제 빌드 대상이 없는 일정입니다. 자원 및 모니터링 잡음을 줄이기 위해 용도를 확인하고 삭제하거나 모니터링 범위에서 제외할지 결정합니다.

Schedule ignores irrelevant datasets

ignore 목록에 있지만 실제 빌드 액션을 바꾸지 않는 데이터셋입니다. 영향 없는 항목을 ignore 목록에서 제거합니다.

Schedule inputs disconnected

일정 입력으로 지정했지만 실제 빌드 대상의 입력에 연결되지 않은 데이터셋입니다. 제외 데이터셋 구성에서 생기는 경우가 많습니다. 제외 범위를 수정하거나 연결 빌드 액션에서 해당 입력을 제거합니다.

Schedule inputs unscheduled

빌드 가능한 입력 중 정기 일정이 없고 Fusion 기반도 아닌 데이터셋을 탐지합니다. 해당 데이터셋을 예약하거나 코드 및 JobSpec을 제거하여 원시 입력으로 전환합니다. 수동 스냅샷처럼 JobSpec은 필요하지만 일정은 없어야 한다면 예외를 추가합니다.

Schedule missing description

일정 설명이 없습니다. 목적과 동작을 설명하는 내용을 입력합니다.

Schedule missing name

일정 이름이 없습니다. 빌드에 포함된 데이터셋 이름과 경로를 바탕으로 이름을 지정합니다. 자동 생성 기능도 사용할 수 있습니다.

Schedule on branch

master가 아닌 브랜치에서 실행되는 일정을 탐지합니다. 대체 데이터나 실험을 위해 필요한 일정일 수 있지만 필요 기간이 지난 뒤 계속 실행되기도 합니다.

용도를 확인하고 필요 없으면 중지하거나 삭제합니다. master가 매일 실행될 때 실험 브랜치는 주간 실행으로도 충분한지 검토할 수 있습니다. 추정은 지난달 해당 브랜치 작업 수와 master 작업 수의 비율로 데이터셋 사용량을 브랜치별 정규화한 뒤 합산합니다.

Schedule outputs not targets

계산된 일정 출력과 targets로 지정한 목록이 서로 다를 때 탐지합니다. 실제 출력과 목표 목록이 일치하도록 갱신합니다.

Schedule potentially unused

일정의 모든 리소스 계보를 조사하여 최근 하위 사용이 있는지 확인합니다. 예약 파이프라인, Contour 같은 대화형 분석, 객체 저장소 목적지와 외부 API 호출도 사용처에 포함합니다.

미사용 일정은 일시 중지 대상으로 검토합니다. 전체가 아니라 미사용 부분집합이 드러날 수도 있으며 해당 부분을 제거하면 연산을 줄일 수 있습니다. 추정은 지난달 미사용 리소스 사용량 합계입니다.

Schedule retries disabled

재시도를 사용하지 않는 일정입니다. 환경 준비 같은 일시적 실패는 두 번째 실행에서 나타나지 않을 수 있으므로 재시도를 활성화하는 것이 권장되며 권장 횟수는 세 번입니다.

Schedule scope invalid

프로젝트 범위가 해당 빌드 액션이 실행해야 할 데이터셋을 제외하는 경우입니다. 모든 대상 데이터셋의 프로젝트가 포함되도록 범위를 수정하고 불가능하다면 일정의 프로젝트 범위를 제거하는 방안을 검토합니다.

Schedule trigger is not input

발동 데이터셋이 입력에 포함되지 않은 경우입니다. 연결 빌드 액션에서 발동 대상을 제거하거나 입력에도 추가합니다.

Schedule triggers itself

빌드하는 데이터셋을 같은 일정의 발동 조건으로 지정한 경우입니다. 문제 데이터셋을 발동 목록 또는 출력에서 제거하도록 빌드 액션을 수정합니다.

Schedule triggers too often

발동 조건이 여러 개인 일정입니다. 예를 들어 매시간 갱신되는 두 입력을 OR로 연결하면 시간당 두 번 실행될 수 있습니다. 데이터가 함께 준비된 뒤 실행하려면 AND 조건 또는 시간당 한 번의 시간 기반 조건을 검토합니다.

Schedule unnecessary force builds

Data Connection 수집 일정이 아닌데 force build를 사용하는 경우입니다. Foundry는 입력 계보의 트랜잭션 변화가 없으면 연산을 건너뛸 수 있지만 force build는 그 판단과 무관하게 실행합니다.

API 호출처럼 추적되지 않는 외부 의존성이 있는지 먼저 확인합니다. 없다면 강제 빌드 설정을 제거합니다. 관련 추정은 지난달 대상 데이터셋 사용량과 최근 일주일의 입력 변경 작업 비율을 사용합니다. 이 비율은 입력이 갱신된 작업 수를 전체 작업 수로 나눈 값이며 사용량 집계 기간과 다릅니다. 규칙의 계산에 이 비율을 곱한 값이 사용되지만 실제 절감량은 변경 후 Resource Management에서 확인합니다.

Snapshot dataset too many files

SNAPSHOT 트랜잭션 데이터셋의 과도한 파일 및 파티션 문제입니다. 기본 판단은 증분 append 규칙과 같지만 이 경우 프로젝션을 해결책으로 권고하지 않습니다.

Snapshot over-provisioned cores

SNAPSHOT 실행의 과도한 정적 코어 할당입니다. 병렬성, 동적 할당과 추정 방식은 Incremental over-provisioned cores와 같습니다.

Spark plan potentially non-deterministic

Spark 실행 계획에서 잠재적으로 비결정적인 로직을 탐지합니다. 일부 경계 조건은 결과 불일치나 불안정을 만들 수 있습니다. 개별 추천이 설명하는 비결정성의 성격을 조사하고 기반 변환 로직을 수정합니다.

Transform should be lightweight

Spark context나 Spark DataFrame을 사용하지 않거나 Pandas 기반으로 구성한 변환을 탐지합니다. 경량 변환 전환으로 절감할 수 있는지 검토하고 실제 사용량으로 확인합니다.

Transform should build incrementally

새 데이터만 추가하는 증분 입력 바로 아래의 변환이 SNAPSHOT으로 전체 이력을 재처리하면 탐지합니다. 증분 처리로 바꾸거나 이미 증분으로 설정한 변환이 자주 SNAPSHOT으로 빌드되는 이유를 조사합니다.

추정 실행 사용량은 지난달 사용량에 입력 크기의 증분 비율을 곱한 값입니다. 비율의 분자는 증분 입력이면 증분 크기를 사용한 입력 크기 합, 분모는 증분 여부와 무관한 전체 입력 크기 합입니다. 과거 사용량에서 이 추정치를 뺀 차이가 예상 절감입니다.

Transform should build locally

사용하는 데이터셋이 300Mb 이하인 작은 변환을 탐지합니다. 입출력이 작고 앞으로도 그 범위에 머무르면 분산 연산 대신 로컬 실행으로 자원을 줄일 수 있습니다. 변환 또는 저장소의 해당 변환에 KUBERNETES_NO_EXECUTORS 같은 프로필을 적용하는 방안을 검토합니다.

추정은 지난달 사용량에 코어 감소 비율을 반영합니다. 실행기 두 개에 각각 두 코어와 드라이버 한 코어로 총 다섯 코어를 쓰던 변환이 한 코어로 실행된다면 0.8, 즉 (5-1)/5를 곱한 사용량을 절감 후보로 계산합니다.

User-scoped schedule

프로젝트 권한 실행이 아닌 일정입니다. 범위 제한 토큰 모드로 전환하며 기본 범위는 빌드 대상 데이터셋의 프로젝트 RID입니다. 실행 신원과 프로젝트 접근 범위가 달라지는 변경이므로 대상 리소스 권한을 함께 확인합니다.