컴파일 빌드

앱을 네이티브 바이너리로 컴파일하면서 라이선스 게이트를 모든 모듈에 자동으로 삽입합니다 — 평문 Python이 배포되지 않으며, 찾아서 지울 수 있는 단일 검사 지점도 존재하지 않습니다.

편의 티어는 한 번 복호화하면 읽을 수 있는 Python 바이트코드를 배포합니다. magiclock build는 여기서 한 걸음 더 나아갑니다. 소스 트리의 모든 모듈에 라이선스 게이트 검사를 자동으로 삽입하고, 그 게이트를 컴파일된 네이티브 코드에 직접 짜 넣고, 번들에 포함된 모델을 암호화하고, 벤더의 공개 키를 임베드한 뒤 결과물을 컴파일합니다 — 그래서 읽을 평문 Python도, 찾아서 patch할 수 있는 단일 검사 지점도 남지 않습니다.

표시할 것이 없습니다

데코레이터도 없고, 코드에 주석을 달 필요도 없습니다 — 소스 코드를 전혀 바꾸지 않습니다. magiclock build app.pyapp.py에서 도달 가능한 모든 .py 모듈을 순회하며, 컴파일하기 전에 각 모듈에 게이트 검사(python_protect 역량 확인)를 하나씩 삽입합니다. 진입 모듈에는 magiclock.air.bootstrap() 호출도 자동으로 삽입되므로 직접 작성할 필요가 없습니다.

python
# 여러분의 소스 코드, 그대로입니다 — 데코레이터도, 수동으로 추가한 bootstrap() 호출도 없습니다
def export_report(data: str) -> bytes:
    return render_pdf(data)
shell
magiclock build app.py   # 트리 안의 모든 모듈이 — 이 모듈을 포함해서 — 자동으로 게이트가 걸립니다

게이트 검사는 각 모듈당 한 번, 프로세스가 그 모듈을 처음 import할 때 실행됩니다 — 호출마다가 아니라 모듈마다 하나의 검사 지점입니다(장시간 실행되는 프로세스에서 이것이 의미하는 바와 유효 기간/취소와의 트레이드오프는 보안 모델을 참고하세요).

빌드하기

shell
magiclock build app.py                        # -> dist/app.<...>.so   (single compiled module)
magiclock build app.py --standalone            # a self-contained app directory instead
magiclock build app.py --no-compile            # scan + inject + embed only — skip compiling (no C toolchain needed)
magiclock build app.py --model weights.onnx    # also encrypt a model into the build (repeatable)
플래그기본값의미
-o, --output-dirdist빌드 출력이 기록되는 위치.
--source-root진입점 파일스캔/변환할 프로젝트 루트(app.py가 프로젝트 최상위에 있지 않을 때 사용).
--module단일 파일 네이티브 확장 모듈로 컴파일(기본 타깃).
--standalone단일 모듈 대신 독립 실행형 앱 디렉터리로 컴파일. --module과 상호 배타적.
--no-compileoff스캔, 게이트 주입, 리소스 임베드까지만 수행하고 실제 네이티브 컴파일은 건너뜁니다 — 변환 결과를 확인하거나, C 툴체인이 없는 머신에서 유용합니다.
--keep-tmpoff정리하지 않고 중간 변환 디렉터리를 유지합니다.
--model PATHnone모델을 암호화해 빌드에 번들로 포함합니다. 반복 지정 가능.
--model-lock-passphraseoff번들된 모델에 패스프레이즈를 2단계 요소로 추가합니다(--model이 하나 이상 필요).
--model-trial / --model-expires-in / --model-expires-atnone번들된 모델의 유효 기간 — 코드 암호화의 유효 기간 플래그와 의미가 동일하며, 서로 배타적입니다.

배포되는 것

컴파일된 .so/.pyd/독립 실행형 디렉터리는 이를 실행하는 머신에서 MagicLock 설치도, 계정도, 네트워크도 필요하지 않습니다 — 복호화와 라이선스 검사 모두 완전히 오프라인으로 이루어집니다(보안 모델 참고).

기본적으로 컴파일된 바이너리는 노드 잠금 상태입니다. 즉 빌드한 그 머신에서만 복호화되고 실행됩니다(신뢰 루트는 그 머신의 핑거프린트입니다). 동일한 빌드를 두 대 이상의 머신에서 실행해야 한다면 — 두 번째 워크스테이션이나 배포 서버 등 — 해당 머신도 계정 아래에서 활성화한 뒤 그곳에서 빌드하세요. 컴파일 강력 보호는 코드 암호화모델 암호화가 제공하는 포터블(--no-bind-machine) 잠금 해제를 현재 제공하지 않습니다.

다음으로 볼 문서

  • 보안 모델 — 편의 티어가 완전히 배제하지 못하는 "검사 지점을 찾아서 patch하는" 우회를 컴파일 강력 보호가 어떻게 막아내는지 설명합니다.
  • 계정 및 활성화 — 추가 빌드/배포 머신을 활성화하는 방법.