리버스 프록시 주의 사항
CDN 이나 리버스 프록시 뒤에 두는 경우 확인할 한도(요청 본문 100MB, 응답 100초 등)와 대용량 업로드 방법
CDN 이나 리버스 프록시를 앱 앞에 두면 실제 한도는 서버가 아니라 프록시가 결정. 서버가 파일당 2 GiB 까지 허용해도 요청은 프록시를 먼저 거침.
프록시의 두 한도
아래 숫자는 널리 사용하는 CDN 프록시의 기본 한도 예. 실제 값은 프록시와 요금제마다 다르므로 직접 확인 필요.
| 한도 | 서버 설정 | 프록시 기본 한도 예 | 초과 시 |
|---|---|---|---|
| 요청 본문 | 파일당 2 GiB (GEO_MLOPS_DATASET_MAX_UPLOAD_BYTES) | 100 MB | 413: 프록시가 반환한 HTML 오류 페이지. 요청이 서버에 도달하지 않음 |
| 응답 대기 | 없음 | 100초 | 524(프록시에 따라 504): 프록시가 응답 대기를 중단함. 서버는 끝까지 처리함 |
오류 발생 시 먼저 본문 형식 확인. JSON(/api/v1 은 {"error_id", "code", "message", "detail"}, 그 밖의 경로는 {"detail": …} 등)이면 서버가 반환한 것, HTML 오류 페이지면 프록시가 반환한 것(오류 형식).
524·504 는 "실패" 가 아니라 "클라이언트가 결과를 수신하지 못했다" 는 뜻. 서버 측에는 이미 반영되어 있을 수 있음. 액세스 로그에 없다고 해서 요청이 도착하지 않은 것도 아님.
플랫폼이 한도 이하로 분할하는 경로
아래 경로는 요청을 한도보다 작게 분할해 전송하므로 프록시 뒤에서도 동작.
| 경로 | 한 번에 전송하는 크기 |
|---|---|
| 웹 화면·CLI 의 데이터셋 업로드(청크 세션) | 32 MiB 청크(웹 화면은 ZIP 과 32 MiB 를 넘는 파일을 분할하고, 나머지는 한 요청으로 전송). 전송이 끝나면 서버가 백그라운드에서 병합하고 압축을 해제하므로 응답이 바로 반환됨. |
화면의 이미지 반입(docker save tar) | 32 MiB 청크 |
| 엣지 장비의 오프라인 파일 업로드 | 청크당 최대 50 MiB |
| 엣지 장비의 명령 대기(롱폴: 응답이 올 때까지 요청을 열어 두고 기다리는 방식) | 최대 30초(응답 한도보다 짧게) |
대용량 데이터셋은 CLI 로
수천 개 파일은 브라우저 대신 클라이언트 CLI(geo-mlops-client, 서버 소스 디렉터리에서는 ./client)로 업로드. datasets upload-archive 는 파일들을 16 MiB 짜리 무압축 ZIP 묶음으로 만들고, 묶음마다 재개 가능한 청크 세션으로 전송. 전송에 실패한 청크는 자동으로 세 번까지 재전송.
-
로그인. 서버 주소와 테넌트는 한 번 입력하면 캐시.
geo-mlops-client login [email protected] --base-url https://api.mlops.example.com --tenant DEMO -
데이터셋 ID 와 업로드할 디렉터리(하위 폴더 포함) 지정.
--skip-existing은 이미 업로드된 파일 이름을 먼저 조회해 건너뜀.geo-mlops-client datasets upload-archive <DATASET_ID> ~/corpus --skip-existing \ 2>&1 | tee -a ~/upload.log -
노트북 절전 등으로 명령이 중단되면 같은 명령을 다시 실행.
--skip-existing덕분에 중단된 지점부터 이어서 진행.
- 진행 로그는 표준 오류로, 완료 후의 요약 JSON 은 표준 출력으로 출력.
- 서버는 파일을 파일 이름(basename) 기준으로 저장. 다른 폴더에 같은 이름의 파일이 있으면 충돌하므로 명령이 전송 전에 경고.
- 묶음 하나를 만들 임시 공간이
TMPDIR에 필요. 부족하면TMPDIR=/여유/경로를 명령 앞에 지정. datasets upload(파일 하나 = 요청 하나)는 청크로 나누지 않음. 프록시 한도(예: 100 MB)를 넘는 파일은 프록시에서 차단. 대용량 파일도upload-archive로 전송.
프록시 사용 시 기타 확인 사항
- HTTPS 와 쿠키: 프록시가 HTTPS 를 종료하고 앱에 전달한다면
GEO_MLOPS_AUTH_COOKIE_SECURE=true(기본값) 유지. 앱은--forwarded-allow-ips '*'로 실행되어 프록시가 전달한X-Forwarded-*헤더를 신뢰. 앱 포트(10000)는 프록시 외에는 외부에서 접근할 수 없도록 방화벽으로 차단 필요. - MLflow Host 검사: 도메인으로
/mlflow를 사용하면GEO_MLOPS_MLFLOW_ALLOWED_HOSTS에 그 도메인 추가(Docker Compose 로 설치 참고). - Alertmanager 웹훅: 프록시 뒤라면 웹훅 주소도 인터넷에 노출.
GEO_MLOPS_ALERTMANAGER_WEBHOOK_TOKEN반드시 설정. 비어 있으면 앱이 웹훅 요청을 거부해(503) 위조된 경보 주입 차단. docker push: Docker 클라이언트는 이미지 레이어를 대용량 요청으로 전송. 프록시 한도(예: 100 MB)를 넘는 레이어는 프록시에서 차단될 수 있음. 대용량 이미지는 사내망에서 레지스트리에 직접 push 하거나,docker save로 tar 를 만들어 이미지 반입으로 업로드.
다음: 폐쇄망 설치