연결하고 바로 빌드

주문부터 첫
xcodebuild까지

클라우드 Mac 워크스테이션 사용 안내서입니다. 처음 10분 안에 연결 정보를 확인하고 SSH 로그인 및 환경 점검을 마치는 것이 목표입니다. 의존성 다운로드와 전체 빌드 시간은 프로젝트에 따라 달라집니다.

워크스테이션 정보 확인

개통 후 먼저 확인할 네 가지

콘솔에 로그인해 해당 주문의 인스턴스 상세 정보를 여세요. 연결 주소, 계정, 포트는 인스턴스에 표시된 정보를 기준으로 합니다. 주문 번호를 로그인 사용자 이름으로 사용하지 마세요.

워크스테이션 정보 예시 · 실제 자격 증명 아님

Desk M4

Mac mini M4 · 메모리 16GB · SSD 256GB

공인 IP
인스턴스 상세 정보에서 확인하고 복사
로그인 사용자 이름
콘솔에서 할당된 사용자 이름 사용
초기 비밀번호
비공개 환경에서만 확인하고 로그에 붙여 넣지 마세요
SSH 공개 키
콘솔의 해당 메뉴에서 공개 키 업로드

독립형 물리 Mac 한 대를 단독으로 사용

Desk M4는 가상 머신이 아닌 클라우드 Mac으로, macOS 그래픽 인터페이스와 명령줄을 모두 사용할 수 있습니다. 먼저 주문에 해당하는 노드를 확인한 다음 연결 정보를 확인해 다른 워크스테이션의 주소를 스크립트에 입력하지 않도록 하세요.

처음에는 SSH 연결을 권장합니다. 주소, 포트, 인증 상태를 빠르게 확인할 수 있습니다. 그래픽 인터페이스는 클릭이 필요한 시스템 설정이나 Xcode 구성에 사용하고, 빌드 작업의 상시 접속 수단으로 삼을 필요는 없습니다.

  • 개인 키는 내 컴퓨터에 보관하세요. 업로드하는 것은 ssh-ed25519 등의 유형으로 시작하는 공개 키입니다.
  • 초기 비밀번호, 개인 키, 서명 인증서 비밀번호를 일반 로그로 전달하지 마세요.
  • 인스턴스에서 연결 정보가 아직 표시되지 않으면 콘솔에서 주문 상태를 확인하고, 주소나 사용자 이름을 추측하지 마세요.
첫 연결

SSH 로그인 후 빌드 실행

아래 예시의 IP 주소와 사용자 이름을 콘솔에 표시된 값으로 바꾸세요.203.0.113.24 는 문서용 예시 주소이므로 워크스테이션에 연결할 때 사용할 수 없습니다.

  1. 01

    키 준비

    로컬에서 전용 작업 키를 생성하고 암호를 설정하세요. 적합한 키가 이미 있다면 해당 공개 키를 업로드하면 됩니다. 기존 파일을 덮어쓰지 마세요.

    ssh-keygen -t ed25519 -f ~/.ssh/minivps_workstation
    cat ~/.ssh/minivps_workstation.pub
  2. 02

    지문 확인

    처음 연결하면 호스트 키 지문이 표시됩니다. 신뢰할 수 있는 출처에서 받은 지문과 먼저 대조하세요. 콘솔에 지문이 없다면 지원 티켓으로 확인하세요. 안내가 표시됐다는 이유만으로 바로 수락하지 마세요.

    ssh -i ~/.ssh/minivps_workstation dev@203.0.113.24
  3. 03

    환경 확인

    원격 시스템에서 아래 명령을 실행해 아키텍처, 개발 도구 경로, 버전을 확인하세요. 프로젝트에서 다른 Xcode 버전을 요구하면 버전을 먼저 맞춘 뒤 프로젝트 의존성을 설치하세요.

    uname -m
    xcode-select -p
    xcodebuild -version
    sw_vers

전체 세션 예시 읽는 법

아래는 형식 예시이며 실시간 실행 결과가 아닙니다. 지문, 소요 시간, 빌드 로그는 인스턴스와 프로젝트에 따라 달라집니다. 업로드를 완료하려면 기존 서명 자료와 유효한 배포 자격 증명이 필요합니다.

dev@desk-m4-tokyo
$ ssh -i ~/.ssh/minivps_workstation dev@203.0.113.24
The authenticity of host '203.0.113.24' can't be established.
ED25519 key fingerprint is SHA256:…
Are you sure you want to continue connecting (yes/no/[fingerprint])?
yes
Warning: Permanently added '203.0.113.24' to the list of known hosts.

$ cd ~/work/App
$ xcodebuild -scheme App -destination 'generic/platform=iOS' archive
…
** ARCHIVE SUCCEEDED **

$ bundle exec fastlane beta
…
Successfully uploaded the new binary to App Store Connect
Successfully finished processing the build

지문을 확인한 뒤에만 yes를 입력하세요. 호스트 키가 변경됐다는 메시지가 표시되면 시스템을 재설치했거나 인스턴스를 교체했는지 먼저 확인하세요. 전체 known_hosts 기록을 삭제해 확인 절차를 우회하지 마세요.

실패한 단계를 먼저 찾고 설정을 변경하세요
표시된 메시지먼저 확인할 항목다음 단계
Connection timed outIP, SSH 포트, 로컬 네트워크, 방화벽다른 로컬 네트워크에서 확인하세요. 계속 실패하면 연결 시간과 노드를 적어 지원 티켓을 제출하세요.
Permission denied사용자 이름, 공개 키 업로드 여부, 올바른 개인 키 선택 여부를 사용해 ssh -v 인증 과정을 확인하세요. 로그를 공유하기 전에 민감한 정보를 삭제하세요.
Scheme not found현재 프로젝트 디렉터리, workspace, 공유 Scheme먼저 xcodebuild -list를 실행하세요. CocoaPods를 사용하는 프로젝트는 보통 workspace를 지정해야 합니다.
Signing failed인증서와 개인 키, 프로비저닝 프로파일, 키체인 접근 권한먼저 대화형 세션에서 서명을 한 번 검증한 다음 무인 CI로 옮기세요.
그래픽 인터페이스가 필요할 때

SSH 터널로 원격 데스크톱 연결

SSH는 명령 실행과 자동화에, VNC는 그래픽 설정과 직접 조작에 사용합니다. 먼저 SSH를 연결한 다음 화면 공유 포트를 전달하고, VNC 서비스를 공용 인터넷에 직접 노출하지 마세요.

원격 화면 공유 설정 확인

시스템 설정에서 화면 공유가 켜져 있는지, 어떤 사용자가 접근할 수 있는지 확인하세요. 필요한 사용자에게만 권한을 부여하세요. macOS 버전에 따라 설정 위치가 다를 수 있습니다.

서비스가 꺼져 있거나 계정에 권한이 없으면 터널 연결에 성공해도 데스크톱이 표시되지 않습니다.

로컬 포트 전달 설정

아래 SSH 세션을 계속 실행해 두세요. 예시에서는 로컬 포트 15900을 원격 포트 5900으로 전달하고, 로컬 루프백 주소에서만 연결을 수신합니다.

인스턴스에서 다른 SSH 포트를 사용한다면 명령에 -p 와 콘솔에 표시된 포트를 추가하세요.

로컬 주소로 연결

로컬 Mac에서는 화면 공유를 사용할 수 있고, 다른 시스템에서는 호환되는 VNC 클라이언트를 사용하세요. 원격 공인 IP가 아니라 로컬 주소와 전달 포트를 입력하세요.

클라이언트에서도 권한이 부여된 원격 계정으로 인증해야 합니다.

ssh -N -L 127.0.0.1:15900:127.0.0.1:5900 \
  -o ExitOnForwardFailure=yes \
  -i ~/.ssh/minivps_workstation dev@203.0.113.24

클라이언트 연결 주소: vnc://127.0.0.1:15900입니다. 포워딩 세션을 종료하면 이 연결 경로도 끊깁니다. 상시 공용 인터넷 서비스처럼 사용하지 마세요.

먼저 화면 부하를 줄이고 네트워크 문제를 확인하세요

클라이언트 디버깅을 위해 해상도를 1440 × 900으로 설정하고 단일 화면부터 시작해 보세요. 이는 권장 사항이며 요금제 제한이 아닙니다. 동적 데스크톱과 불필요한 미리보기를 끄고 파일 전송에는 SSH를 사용하세요. 대역폭이 높다고 입력 지연이 낮아지는 것은 아닙니다. 왕복 지연 시간, 패킷 손실, 로컬 무선 네트워크도 중요합니다.

명령줄은 정상적으로 응답하지만 화면이 느리다면 클라이언트 화질이나 해상도를 낮춰 보세요. SSH와 화면이 동시에 끊기면 발생 시각, 로컬 네트워크 유형, 클라이언트 메시지를 기록해 연결 문제 지원 티켓을 제출하세요.

반복 작업을 워크스테이션에 맡기기

작업 하나를 실행한 다음 주 파이프라인에 연결

워크스테이션을 자체 CI 프로젝트에 등록하세요. 플랫폼별 등록 매개변수는 프로젝트나 관리 페이지에서 확인해야 합니다. 다른 사람의 토큰을 재사용하거나 등록 토큰을 코드 저장소에 커밋하지 마세요.

GitHub Actions

저장소 또는 조직의 Runner 설정에서 macOS와 ARM64를 선택하고, 페이지에 표시된 최신 설치 명령으로 자체 호스팅 Runner를 다운로드하고 구성하세요.

설정할 때 desk-m4 와 같은 용도 태그를 추가하세요. 먼저 대화형으로 진단 작업을 실행한 뒤 설치 패키지 안내에 따라 현재 사용자의 백그라운드 서비스로 등록하세요.

다음 항목을 함께 사용하세요: self-hosted,macOS,ARM64 및 사용자 지정 용도 태그를 활용해 Runner를 지정하세요.

GitLab Runner

Runner를 설치한 뒤 프로젝트나 그룹에서 Runner를 생성하고 인증 토큰을 받으세요. 등록 시 해당 시스템에 맞는 실행 방식을 선택하세요. macOS 네이티브 빌드는 shell executor부터 시작할 수 있습니다.

신뢰할 수 있는 프로젝트의 작업만 받도록 하고 macos-arm64 와 용도 태그를 설정하세요. 태그가 없는 작업을 받을지는 명시적으로 구성해야 합니다.

먼저 gitlab-runner verify 로 등록 상태를 확인한 뒤 첫 작업 로그를 살펴보세요.

Jenkins Agent

Jenkins 컨트롤러에서 고정 노드를 만들고 원격 작업 디렉터리, 실행기 수, 태그를 설정하세요. 해당 노드 페이지에 표시된 SSH 또는 Agent 시작 명령으로 연결합니다.

실행 사용자, Java 버전, 명령줄 환경이 일치하는지 확인하세요. 첫 작업에서는 도구 버전만 출력해 보고, 연결 테스트로 곧바로 배포 작업을 실행하지 마세요.

먼저 실행기 하나로 시작해 메모리와 디스크 사용량의 최고치를 확인한 뒤 동시 실행 수를 조정하세요.

태그에는 기능을 쓰고 임시 상태는 넣지 마세요

아키텍처 태그 macos-arm64와 용도 태그 ios-build를 사용하고, desk-m4 로 해당 유형의 워크스테이션을 표시하세요. 특정 환경으로 작업을 보내야 하는 경우에만 노드 또는 버전 태그를 추가하세요. 태그가 지나치게 세분화되면 일치하는 머신이 없어질 수 있습니다.

name: workstation-check
on: workflow_dispatch
jobs:
  check:
    runs-on: [self-hosted, macOS, ARM64, desk-m4]
    steps:
      - name: Check toolchain
        run: |
          uname -m
          xcodebuild -version
          df -h

자체 호스팅 Runner는 저장소의 코드를 실행합니다. 신뢰할 수 없는 외부 기여 코드가 서명 자료를 보유한 워크스테이션에 접근하지 못하도록 하세요. 빌드 권한과 배포 권한을 분리하고, CI의 비밀 변수로 키를 주입하며, 접근 가능한 브랜치를 제한하세요.

익숙한 개발 환경을 옮기기

데이터, 툴체인, 스케줄링을 세 단계로 이전

사용자 디렉터리 전체를 그대로 복사하지 마세요. 먼저 프로젝트 하나를 옮기고 재현 가능한 의존성을 기록한 다음 CI 태그를 전환하세요. 각 단계는 따로 검증하고 필요하면 개별적으로 되돌릴 수 있습니다.

01 · 데이터

프로젝트를 동기화한 뒤 서명 자료 가져오기

로컬에서 rsync로 작업 디렉터리를 동기화하고 빌드 산출물은 제외하세요. 인증서는 개인 키와 함께 비밀번호로 보호된 파일로 내보내고, 프로비저닝 프로파일은 별도로 이전하세요. 가져온 뒤 검증하고 임시 전송 사본을 삭제하세요.

rsync -av \
  --exclude DerivedData \
  --exclude build \
  -e "ssh -i ~/.ssh/minivps_workstation" \
  ./App/ dev@203.0.113.24:~/work/App/

확인: 프로젝트 파일이 모두 있고 서명에 필요한 인증서와 개인 키가 한 쌍으로 갖춰져 있습니다.

02 · 툴체인

목록을 기준으로 의존성 맞추기

로컬에서 Brewfile을 내보내고 원격에서 검토한 뒤 설치하세요. 프로젝트 요구 사항에 맞는 Xcode 버전을 준비하고 xcodes로 설치된 버전을 선택하세요. Ruby, Bundler, 프로젝트 잠금 파일도 확인합니다.

brew bundle dump --file=Brewfile
brew bundle --file=Brewfile
xcodes installed
xcodes select
xcodebuild -version

확인: 개발 도구 버전이 프로젝트 요구 사항과 일치하고 의존성을 다시 설치할 수 있습니다.

03 · CI 연동

마지막으로 스케줄링 태그 바꾸기

기존 파이프라인은 그대로 두고 수동 실행 검증 작업을 하나 추가하세요. 프로젝트 읽기, 서명, 산출물 업로드가 가능한지 확인한 다음 정식 작업의 runs-on 또는 노드 태그를 새 워크스테이션으로 전환하세요.

cd ~/work/App
bundle install
xcodebuild -list
bundle exec fastlane beta

확인: 전체 작업이 한 번 성공하고 산출물을 가져올 수 있으며 실패 로그에서 문제를 찾을 수 있습니다.

이는 마이그레이션 순서에 대한 안내이며 소요 시간을 보장하지 않습니다. 첫 의존성 설치, SDK 다운로드, 프로젝트 규모에 따라 SSH 로그인보다 훨씬 오래 걸릴 수 있습니다. 먼저 배포 작업 없이 빌드 검증을 진행하세요.

빌드 외 실험 환경

환경을 분리한 뒤 모델 가중치 다운로드

Desk M4는 통합 메모리 16GB를 제공하며 시스템, 그래픽 인터페이스, 모델이 이 메모리를 함께 사용합니다. 양자화 방식, 컨텍스트 길이, 동시 실행 수에 따라 실행 가능 여부가 달라집니다. 추가 SSD는 저장 공간을 늘리지만 메모리를 늘리지는 않습니다.

MLX: 독립 Python 환경

시스템 Python을 변경하지 않도록 가상 환경에 MLX와 추론 도구를 설치하세요. 먼저 모듈을 가져올 수 있는지 확인한 다음 호환되는 모델과 양자화 버전을 선택합니다.

python3 -m venv ~/venvs/mlx
source ~/venvs/mlx/bin/activate
python -m pip install -U pip
python -m pip install mlx mlx-lm
python -c "import mlx.core as mx; print(mx.default_device())"

작은 모델, 짧은 컨텍스트, 단일 요청으로 시작하세요. 메모리 사용량을 확인한 뒤 부하를 늘리세요.

llama.cpp: 가중치 경로 직접 지정

Homebrew로 도구를 설치한 뒤 로컬 GGUF 파일을 사용해 실행하세요. 예시 경로를 먼저 만들고 실제 모델 파일을 넣어야 합니다. 매개변수는 설치된 버전의 도움말을 확인하세요.

brew install llama.cpp
llama-cli --help
llama-cli \
  -m /Volumes/WorkSSD/models/model.gguf \
  -p "Hello" -n 64

GGUF 파일은 선택한 모델 아키텍처 및 양자화 형식과 호환되어야 합니다.

Ollama: 먼저 로컬 접근만 허용

설치 후 서비스를 로컬 주소에 바인딩하고 모델 출처의 안내에 따라 가중치를 가져오세요. 로컬 컴퓨터에서 호출하려면 SSH 포트 전달을 우선 사용하고 추론 API를 직접 공개하지 마세요.

brew install ollama
OLLAMA_HOST=127.0.0.1:11434 \
OLLAMA_MODELS=/Volumes/WorkSSD/models/ollama \
ollama serve

모델은 각자의 라이선스에 따라 다운로드하고 사용해야 합니다. 서비스가 시작됐다고 가중치가 준비된 것은 아닙니다.

가중치 디렉터리 통일하기

아래에서는 /Volumes/WorkSSD 가 정상적으로 마운트된 추가 SSD라고 가정합니다. models 에는 가중치를, cache 에는 다시 만들 수 있는 캐시를 저장합니다. 이는 경로 예시일 뿐이며 시스템이 자동으로 이 볼륨 이름을 사용하는 것은 아닙니다. 디스크가 마운트되어 있고 디렉터리에 쓸 수 있는지 확인한 뒤 디렉터리를 만드세요. 마운트되지 않은 상태에서 대용량 파일을 실수로 시스템 디스크에 저장하지 마세요.

diskutil info /Volumes/WorkSSD
test -d /Volumes/WorkSSD && test -w /Volumes/WorkSSD
mkdir -p /Volumes/WorkSSD/models /Volumes/WorkSSD/cache
export HF_HOME=/Volumes/WorkSSD/cache/huggingface
디스크를 확인한 뒤 쓰기

저장 공간을 늘려도 메모리가 합쳐지지는 않습니다

추가 옵션은 +1TB SSD, +2TB SSD, Thunderbolt 5 다중 연결입니다. 연결 후의 디스크 이름, 장치 번호, 링크 정보는 인스턴스에서 실제로 확인하세요. 다른 사용자의 디스크 번호를 그대로 사용하지 마세요.

추가 SSD 확인

외장 물리 디스크를 확인한 다음 볼륨 이름, 용량, 여유 공간을 대조하세요. 아래 명령은 정보만 읽으며 디스크를 포맷하지 않습니다.

diskutil list external physical
ls /Volumes
df -h
diskutil info /Volumes/WorkSSD

마운트를 확인한 뒤 모델, 빌드 캐시, 프로젝트를 옮기세요. 이동하기 전에 해당 디렉터리에 쓰는 빌드 프로세스를 중지하고 별도의 백업을 보관하세요.

무턱대고 실행하지 마세요: eraseDisk 또는 디스크 지우기 명령. 디스크가 보이지 않으면 읽기 전용 점검 결과를 첨부해 지원 티켓을 제출하세요.

여러 대 연결의 한계 이해하기

Thunderbolt 5 다중 연결은 여러 머신 간 통신이나 데이터 전송이 필요한 워크플로에 사용합니다. 연결된 머신은 각각 별도의 호스트이며 시스템, 작업, 메모리 공간도 독립적입니다.

system_profiler SPThunderboltDataType
networksetup -listallhardwareports
ifconfig

인터페이스가 인식됐다고 해서 애플리케이션이 자동으로 분산 실행되는 것은 아닙니다. 네트워크, 전송 프로토콜, 작업 분배를 직접 구성해야 합니다. 실제 연결 방식과 사용 가능한 조합은 주문 전에 문의해 확인하세요.

여러 대를 연결해도 하나의 더 큰 메모리를 가진 Mac으로 자동 통합되지 않으며 빌드 속도가 빨라진다고 보장할 수 없습니다.

캐시를 옮길 때 재생성 가능한 데이터와 대체 불가능한 데이터 구분하기

DerivedData와 의존성 다운로드 캐시는 다시 만들 수 있지만, 커밋하지 않은 소스 코드 변경 사항, 서명 개인 키, 실험 결과는 캐시로 복구할 수 없습니다. 두 종류의 데이터를 분리해 관리하고 대체할 수 없는 데이터부터 백업하세요. 갱신 또는 만료 처리 전에 보관할 프로젝트, 산출물, 설정을 직접 내보내세요. 워크스테이션 디스크를 유일한 백업으로 사용하지 마세요.

문제를 명확하게 전달하기

막히셨나요? 다음 네 가지를 알려주세요

인스턴스 문제는 주문과 연결하기 쉽도록 콘솔에 로그인해 지원 티켓을 제출하는 것이 우선입니다. 로그인할 수 없거나 구매 전 사양 상담이 필요하거나 추가 설명을 보내려면 support@macminivps.com으로 이메일을 보내세요.

  • 주문 번호와 노드: 어느 워크스테이션인지 알려주세요. 비밀번호나 개인 키는 보내지 마세요.
  • 발생 시각과 시간대: 처음 문제가 나타난 시각과 재현 여부를 적어 주세요.
  • 원본 오류 일부: 명령, 종료 코드, 주요 로그는 유지하고 토큰, 인증서 내용, 개인 정보는 삭제하세요.
  • 이미 확인한 내용: 예를 들어 로컬 네트워크 변경, SSH 포트 확인, 단일 빌드 실행 여부를 알려주세요.

답변 시간 안내

확인되지 않은 평균 응답 시간이나 고정 지원 시간을 안내하지 않습니다. 응답 일정은 연락처 안내와 지원 티켓에 실제로 남기는 답변을 기준으로 합니다. 제출 후 같은 문제를 반복해서 새 티켓으로 만들기보다 기존 티켓에 자료를 추가하면 추적하기 쉽습니다.

연결 문제라면 SSH와 VNC가 동시에 실패하는지 알려주세요. 빌드만 문제라면 대화형 세션에서 같은 명령을 실행할 수 있는지 알려주세요. 이를 통해 네트워크, 인증, 환경, 프로젝트 문제를 먼저 구분할 수 있습니다.

과정을 이해하셨다면,
이제 프로젝트용 워크스테이션을 선택하세요

Desk M4는 가상 머신이 아닌 독립형 물리 Mac mini입니다. 주문 설정으로 이동하기 전에 프로젝트에 필요한 Xcode 버전, 사용 기간, 저장 공간을 확인하세요. 이용 가능 여부는 콘솔에 실시간으로 표시되는 정보를 기준으로 합니다.

USDT-TRC20 또는 Visa / Mastercard / Amex(Stripe)만 지원하며 모든 결제는 USD로 처리됩니다. 실제 이용 가능한 결제 게이트웨이는 백엔드 응답을 기준으로 합니다.