소개
Odin은 Windows 기반 개발자 워크스테이션의 환경 구성과 복구를 돕기 위해 만들어진 명령줄 인터페이스(CLI) 도구입니다. AsimAftab이 GitHub(AsimAftab/Project-Odin)에서 Rust로 공개한 프로젝트이며, 도구·패키지 관리자·셸 프로필·Git 설정·VS Code 확장·환경 변수·PATH 상태 등을 한 번에 스냅샷으로 보관하고 복원·동기화·진단할 수 있도록 설계되었습니다. winget과 같은 패키지 관리자 경로로 설치할 수 있으며, `odin --help` 같은 명령으로 사용 가능한 명령과 옵션을 확인할 수 있습니다.
상세정보
환경 스냅샷과 복원
`odin snapshot`은 현재 머신 상태를 `~/.odin`으로 캡처하고, `odin restore`는 그 스냅샷을 다시 설치·복원합니다. 복원은 “계획(plan) → 확인(confirm) → 적용(apply)” 흐름을 따르며, `–apply`가 없으면 설치·유지·건너뜀·주의 항목을 모두 출력만 하고 시스템에는 손대지 않습니다. README는 다음 사용 예시를 제공합니다.
odin restore— 계획만 출력odin restore --apply— 실행odin restore --interactive --apply— 체크리스트 → 계획 → 확인 → 실행odin restore --only packages --managers winget --exclude Docker.DockerDesktop --apply— winget으로 패키지만 복원하고 Docker Desktop은 제외odin restore --apply --bootstrap-managers— 새 머신에서 scoop/choco/pnpm 등 패키지 관리자 자동 설치
`odin diff`는 현재 머신과 마지막 스냅샷을 비교하고, `odin export`는 PowerShell 부트스트랩/복원 스크립트를 생성하며, `odin init`은 `~/.odin/config.yaml`을 초기화합니다.
GitHub 동기화
`odin sync`는 `%USERPROFILE%.odin`을 Git 저장소로 초기화하고, 변경된 스냅샷 파일을 커밋해 원격으로 푸시합니다. README에 명시된 기본 사용법은 다음과 같습니다.
odin sync --remote https://github.com/you/private-odin-state.git --branch main
비공개 저장소일 때는 일반 Git 자격 증명 도우미를 그대로 활용하거나, README에서 안내한 `odin config github` 명령으로 Odin 측 설정을 진행할 수 있습니다. `–create-private-repo` 옵션과 `GITHUB_TOKEN` 환경 변수를 함께 사용하면 GitHub API를 통해 비공개 저장소를 직접 만들 수도 있습니다. 토큰은 운영체제 자격 증명 저장소에 보관됩니다.
타임머신과 스케줄링
`odin history`는 컬러 타임라인으로 스냅샷 이력을 보여 주고, `odin rollback`은 특정 스냅샷 시점으로 환경을 되돌립니다. `–apply`가 없으면 기본값은 dry-run이며, README는 `snapshot-20250313-120000` 같은 스냅샷 ID 형식을 예시로 사용합니다. `odin schedule`은 Windows 작업 스케줄러에 반복 스냅샷 작업을 등록하거나 제거하는 명령입니다.
프로세스·포트·진단
진단 영역에서는 `odin doctor`가 깨진 PATH 항목, 누락된 SDK, 충돌을 점검하고, `odin ports`는 JSON 출력을 포함한 수신 대기 포트 목록과 프로세스 정보를 보여 줍니다. `odin ps`는 htop 스타일의 인터랙티브 프로세스 대시보드이며, `odin freeport`(별칭 `odin kill`)은 안전 검사를 거쳐 포트나 PID를 해제합니다.
Asgard 프로파일 영역
`odin asgard`는 Norse 신화 테마의 인터랙티브 TUI 선택기로, `↑↓` 탐색, `Enter`로 바인딩(활성화), `N` 신규, `E` 편집, `D` 삭제, `X` 언바인딩, `?` 도움말, `Q` 종료 키를 README가 안내합니다. 프로파일은 환경 변수(rune), 시작 앱(warrior), 브라우저 URL(raven), 선택적 VS Code 워크스페이스를 묶어 한 번에 실행하도록 구성하며, `%USERPROFILE%.odinasgard\profile.yaml`에 저장됩니다. 관련 명령은 `odin activate <profile>`, `odin deactivate`, `odin current`, `odin profile list`(JSON 지원), `odin profile create/edit/delete`, `odin profile export/import`(`.tar.gz` 번들) 입니다.
대시보드와 업데이트
`odin all-eye`(`odin dashboard` 별칭)는 Ratatui 기반 터미널 대시보드로 스냅샷 메타데이터, 개발 도구, 패키지 관리자, GitHub 동기화 상태, 헬스 지표를 한 화면에서 보여 줍니다. `q` 또는 `Esc`로 종료합니다. `odin update`는 GitHub Releases에서 최신 버전을 확인하고 설치하며, `odin backup`은 `odin sync`의 별칭입니다.
Windows 통합 대상
README가 직접 통합을 명시한 항목은 winget, Chocolatey, Scoop, PowerShell 프로필 탐지, Git 설정 탐지 및 복원, VS Code 확장 탐지 및 복원, Windows Terminal 설정 탐지, 환경 변수와 PATH 분석입니다.
Odin은 어떤 운영체제를 지원하나요?
Windows를 1차 대상으로 하며, GitHub Releases에서 배포되는 산출물은 x64 아키텍처 기반입니다. Linux/macOS는 README에서 향후 확장 가능 영역으로 언급되어 있지만, 현 시점 공식 지원 대상으로 명시되어 있지는 않습니다.
설치와 업데이트는 어떻게 하나요?
README가 안내한 권장 경로는 winget입니다. 설치는 `winget install AsimAftab.Odin`, 업데이트는 `winget upgrade`, 제거는 `winget uninstall AsimAftab.Odin`을 사용합니다. CI/자동화 환경에서는 부트스트랩 스크립트(`bootstrap.ps1`)와 install/uninstall PowerShell 스크립트가 함께 제공됩니다.
스냅샷은 어디에 저장되고 어떻게 백업하나요?
스냅샷은 `%USERPROFILE%.odin` 아래에 JSON과 스크립트 형태로 저장되며, `odin sync`로 비공개 GitHub 저장소에 푸시해 백업하거나 여러 머신 간 공유할 수 있습니다. 토큰은 운영체제 자격 증명 저장소에 보관됩니다.
복원 시 안전 장치는 무엇이 있나요?
`odin restore`는 “계획 → 확인 → 적용” 흐름을 따르고, `–apply`가 없으면 어떤 변경도 적용하지 않은 채 계획만 출력합니다. 패키지가 이미 설치되어 있으면 건너뛰며, 적용 후에는 매니저별 요약과 함께 자동 설치에 실패한 항목의 수동 설치 목록을 출력하고, 전체 보고서는 `~/.odin/logs/restore-<timestamp>.json`에 기록됩니다.
시스템 요구사항
운영체제는 Windows를 기준으로 하며 빌드와 배포 산출물은 x64 아키텍처를 대상으로 합니다. 패키지 식별자는 winget의 `AsimAftab.Odin`이며, 설치 경로로 winget을 사용할 경우 별도의 추가 런타임 없이 곧바로 PATH에 등록됩니다. 스냅샷 파일은 `%USERPROFILE%.odin` 아래에 JSON 형태로 저장되며, 동기화를 위해 GitHub 자격 증명(개인 액세스 토큰)이 운영체제 자격 증명 저장소에 보관됩니다. 동기화 대상이 되는 원격 저장소는 사용자가 직접 만든 비공개 GitHub 저장소를 사용해야 하며, 로그인 기반 스냅샷 복원(`odin login`)을 함께 사용하면 Odin Platform에서 원격 스냅샷을 받아올 수도 있습니다.


