⑴ 임포트 플러그인
Upload(임포트) 플러그인의 역할, 입력 계약, 기본 구현, 전처리 단계, 사용자 입력 옵션 선언 방법
Upload(임포트) 플러그인이 스토리지 파일을 검증하고 Synapse 데이터유닛으로 생성하는 흐름을 구현합니다.
진행 순서
- 임포트 플러그인의 역할을 확인합니다.
- 업로드 파일의 입력 계약을 확인합니다.
- 기본 임포트 플러그인 코드를 구현합니다.
- 필요한 경우 전처리 단계를 추가합니다.
- 필요한 경우 사용자 입력 옵션을
config.yaml에 선언합니다.
1. 임포트 플러그인 역할 확인
Upload(임포트) 플러그인은 파일 수집, 검증, 업로드, 데이터유닛 생성을 처리합니다.
기본 골격이 표준 업로드 절차를 포함하므로, 일반적인 임포트 플러그인은 필요한 제한 조건과 전처리 로직만 추가해서 구현할 수 있습니다.
| 처리 단계 | 설명 |
|---|---|
| 파일 수집 | 스토리지에서 임포트 대상 파일을 가져옵니다. |
| 파일 검증 | 데이터 컬렉션에 정의된 파일 사양에 맞는지 확인합니다. |
| 파일 업로드 | 검증된 파일을 업로드합니다. |
| 데이터유닛 생성 | 업로드된 파일을 Synapse 데이터유닛으로 생성합니다. |
2. 파일 사양 확인하기
업로드되는 파일은 데이터 컬렉션에 정의된 파일 사양(file specification) 과 맞아야 합니다.
검증 대상에는 허용 확장자, 파일 크기 제한, 필수 파일 존재 여부가 포함됩니다.
| 항목 | 설명 |
|---|---|
| 허용 확장자 | 파일 사양별로 업로드 가능한 확장자를 제한합니다. |
| 파일 크기 | 기본 파일 크기 제한은 50 MB입니다. 옵션으로 조정할 수 있습니다. |
| 필수 파일 | 데이터유닛 생성에 필요한 파일이 모두 있는지 확인합니다. |
| 파일 그룹 | 같은 파일명 stem을 가진 파일은 하나의 데이터유닛으로 묶입니다. |
| 중복 파일 | 중복 파일은 자동으로 건너뛰며 실패로 처리하지 않습니다. |
예를 들어 0001.jpg와 0001.pcd는 파일명 stem이 0001로 같기 때문에 하나의 데이터유닛으로 생성됩니다.
3. 기본 임포트 플러그인 구현
기본 구현에서는 DefaultUploadAction과 UploadParams를 사용합니다.
최소 임포트 플러그인은 허용 확장자만 정의해도 동작할 수 있습니다.
from synapse_sdk.plugins.actions.upload import DefaultUploadAction, UploadParams
class UploadAction(DefaultUploadAction[UploadParams]):
action_name = 'upload'
params_model = UploadParams
def get_allowed_extensions(self):
return {'image': ['.jpg', '.jpeg', '.png']}코드 구성
| 항목 | 설명 |
|---|---|
DefaultUploadAction | 표준 업로드 절차를 제공하는 베이스 클래스입니다. |
UploadParams | 업로드 액션에서 사용하는 기본 파라미터 모델입니다. |
get_allowed_extensions | 파일 사양별 허용 확장자를 반환합니다. |
4. 전처리 단계 추가
표준 업로드 흐름 중간에 플러그인별 전처리 단계를 추가할 수 있습니다.
기본 업로드 절차를 유지하려면 먼저 super().setup_steps(registry)를 호출한 뒤, 원하는 위치에 커스텀 단계를 삽입합니다.
def setup_steps(self, registry):
super().setup_steps(registry)
registry.insert_after('organize_files', MyPreprocessStep())
전처리 단계 추가 기준기본 업로드 흐름을 유지하려면
super().setup_steps(registry)를 먼저 호출하세요. 이후registry.insert_after(...)를 사용해 필요한 위치에 커스텀 전처리 단계를 추가합니다.
5. 사용자 입력 옵션 선언
플러그인 전용 옵션은 config.yaml의 ui_schema에 선언합니다.
스토리지, 경로, 데이터 컬렉션처럼 플랫폼에서 공통으로 처리하는 입력값은 ui_schema에 추가하지 않습니다.
actions:
upload:
entrypoint:plugin.upload.UploadAction
method:job
ui_schema:
-$formkit:text
name:frame_per_second
label:초당 추출 프레임 수
required:false사용자가 입력한 값은 실행 시 다음 경로로 전달됩니다.
context.params['extra_params']
주의사항스토리지, 경로, 데이터 컬렉션처럼 플랫폼에서 공통으로 제공하는 입력값은
ui_schema에 선언하지 마세요.
ui_schema에는 플러그인에서만 필요한 고유 옵션만 선언합니다.
Updated 7 days ago
