TL;DR
- Ignis는 Obsidian에서 사용하는 Electron API를 브라우저 호환 방식으로 구현하는 호환성 계층으로, vault를 서버에 둔 채 표준 브라우저에서 Obsidian을 실행함.
- Docker 컨테이너는 처음 실행할 때 Obsidian을 공식 출처에서 내려받으며, 프로젝트에는 Obsidian 자체가 포함되거나 배포되지 않음.
- 현재는 자체 호스팅 서버 형태로 제공되며, 다중 vault, 탭 간 실시간 동기화, 플러그인 및 모바일 UI를 지원함.
- 브라우저에서 사용할 수 없는 Electron·Node 기능 때문에 일부 플러그인과 기능에는 제한이 있으며, Ignis에는 내장 인증 기능이 없음.
- 압축된 초기 응답, 실시간 파일 이벤트, 사전 캐시 및 기본 50MB의 LRU 캐시 등으로 대규모 vault와 느린 저장소의 사용을 고려함.
개요
- Ignis는 Obsidian에서 사용하는 Electron API의 브라우저 호환 구현을 제공하는 호환성 계층(shim)으로, vault를 서버에 둔 채 표준 브라우저에서 Obsidian을 실행함.
- Obsidian 자체는 이 프로젝트에 포함되거나 배포되지 않으며, Docker 컨테이너가 처음 실행될 때 Obsidian을 공식 출처에서 직접 내려받음.
개발 배경
- Obsidian의 로컬 우선(local-first) 방식은 대부분의 사용자에게 잘 작동하지만, 개인 Obsidian 설치본에 원격으로 접근하는 방법은 사용자 경험이 좋지 않은 VNC 기반 솔루션에 제한돼 있음.
- Ignis는 브라우저에서 개인 Obsidian 설치본에 네이티브에 가까운 형식으로 접근하려는 사용자를 위한 대안임.
프로젝트 상태
- Ignis는 현재 일상적인 노트 작성에 사용하는 도구로 활발히 개발 중이며, 새 프로젝트인 만큼 확인되는 공백을 문서화하고 수정하는 중임.
- 주요 계획 기능과 수정 사항의 개요는 로드맵에서 확인할 수 있음.
빠른 시작
- Docker Compose로 Ignis를 실행하며, 기본 설정은 이미지
nobbe/ignis:latest, 포트8080, 사용자 IDPUID=1000, 그룹 IDPGID=1000을 사용함. - vault 저장 위치는
./vaults:/vaults, 앱 데이터는./data:/app/data, Obsidian 앱 파일은obsidian-app:/app/obsidian-app에 연결하며, 컨테이너 재시작 정책은unless-stopped임. - 설정을
docker-compose.yml로 저장한 뒤docker compose up -d를 실행하고http://localhost:8080에 접속함. - 첫 실행 시 Obsidian을 공식 출처에서 내려받으므로 1~2분 정도 걸릴 수 있으며, vault가 없으면 첫 vault를 만들 수 있도록 vault 관리자가 열림.
- 다른 기기에서 접속하도록 공개하기 전에 인증을 적용하고 HTTPS로 제공해야 함.
- Ignis에는 내장 인증이 없으므로 공개된 인스턴스에 접근할 수 있는 누구나 전체 vault를 읽고 쓸 수 있음.
- HTTPS 또는 localhost 같은 안전한 컨텍스트가 아니면 브라우저가 Ignis에 필요한 기능을 비활성화함.
- 전체 설정과 구성은 배포 안내서에 있으며, 나머지 문서는 설정, 보안 및 운영을 다룸.
배포 형태
- Ignis는 현재 자체 호스팅 서버 형태로 제공되며, 데스크톱 플러그인 형태는 계획 중임.
- 서버 버전은
apps/ignis-server/에 있으며 설정 방법은 문서에 안내돼 있음.
기능
- Obsidian 핵심 기능: 편집기, 캔버스, 베이스, 명령 팔레트, 컨텍스트 메뉴, 테마 및 CSS 스니펫.
- Obsidian 플러그인 API를 기반으로 만든 커뮤니티 플러그인 대부분.
- Node 네이티브 모듈 또는
child_process가 필요한 플러그인은 로드되지 않음. - 파일 업로드: 리본, 마우스 오른쪽 클릭, 끌어다 놓기.
- 파일 다운로드: 개별 파일 또는 ZIP 형식의 폴더.
- 다중 vault: 생성, 열기, 전환, 이름 변경 및 삭제, 브라우저 탭마다 별도의 vault 사용.
- WebSocket을 통한 탭 간 실시간 동기화로 편집 내용이 1초 이내에 전파됨.
- 저장된 작업 공간을
?workspace=URL 매개변수로 별도 탭에서 열기. ?file=매개변수로 URL에서 노트를 바로 열기.- 노트 메뉴의 ‘경로 복사’ 항목에 ‘Ignis URL로’ 옵션이 있음.
- 로그인한 탭에서 사용하는 Obsidian Sync 또는 탭을 열지 않아도 작동하는 서버 측 Headless Sync.
- 플러그인 요청을 위한 교차 출처 프록시와 CORS 호환 호스트를 위한 직접 요청 허용 목록.
- 작은 화면용 모바일 UI.
- 전체 기능과 설정 방법은 문서에서 확인할 수 있음.
제한 사항
- 브라우저에서 Obsidian을 실행하면 대응되는 기능이 없는 일부 Electron 및 Node 기능 때문에 특정 플러그인과 기능의 사용이 제한되거나 불가능함.
- 자세한 내용은 제한 사항 및 플러그인 호환성 문서에 안내돼 있음.
성능
- 사전 압축된 초기 응답 한 번으로 vault 정보, vault 목록, 메타데이터 트리 및 플러그인 목록을 전달함.
- 실시간 파일 이벤트를 이용해 vault 파일 트리를 최신 상태로 유지함.
- 인덱서 사전 가져오기가 콘텐츠 캐시를 예열하므로 Obsidian 시작 시 인덱싱 요청이 네트워크 대신 캐시를 사용함.
- 기본 50MB인 LRU 콘텐츠 캐시로 메모리 사용량을 제한하며, vault 전체를 메모리에 보관하지 않음.
- 대규모 vault에서 파일 감시 부하를 줄이도록 파일 감시 대상에서 경로를 제외할 수 있음.
- 느린 파일 시스템(rclone, FUSE, NFS, SMB)을 위한 선택적 쓰기 병합 기능은 빠른 쓰기를 디바운스하며,
WRITE_COALESCE_MS를 설정하지 않으면 꺼져 있음. - 자세한 설명은 설정 문서에 안내돼 있음.
기여
- 기여를 환영하며, 플러그인 호환성 문제 보고 방법을 포함한 지침은
CONTRIBUTING.md에 안내돼 있음. - 작업할 항목은 공개 이슈에서 확인할 수 있음.
아키텍처
- 호환성 계층, 플러그인 시스템 및 서버 내부 구조에 관한 자세한 내용은
ARCHITECTURE.md에 안내돼 있음.
라이선스
- 이 프로젝트는 GNU Affero General Public License v3.0에 따라 라이선스가 부여됨.
법적 고지
- Ignis는 Dynalist Inc. 또는 Obsidian과 제휴하거나, 이들의 보증을 받거나, 이들과 관련된 프로젝트가 아님.
- 이 프로젝트는 독립적으로 개발된 상호 운용성 도구이며 Obsidian 소스 코드, 바이너리 또는 자산을 포함하지 않음.
- Obsidian의 어떤 부분도 이 저장소에 배포되거나 포함되지 않으며, Docker 컨테이너가 실행 시 Obsidian을 공식 출처에서 직접 내려받음.
- 이 작업은 유럽연합 소프트웨어 지침인 Directive 2009/24/EC 제6조의 상호 운용성 조항에 해당함. 전체 근거는
LEGAL.md에 안내돼 있음. - 이 프로젝트는 Obsidian을 매일 사용하며 브라우저에서도 접근하고자 하는 데서 비롯됐으며, Obsidian, Dynalist Inc. 또는 이들의 사업에 해를 끼치려는 의도는 없음.
- Dynalist Inc. 관계자는
ignis@thiefling.com으로 연락해 프로젝트에 관해 논의할 수 있음.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요